diff --git a/website/docs/r/container_cluster.html.markdown b/website/docs/r/container_cluster.html.markdown
-index 229241d93..2e60bccbe 100644
+index 1407d6340..bccdf8ed6 100644
--- a/website/docs/r/container_cluster.html.markdown
+++ b/website/docs/r/container_cluster.html.markdown
@@ -13,15 +13,12 @@ To get more information about GKE clusters, see:
@@ -1627,7 +1627,7 @@ index 229241d93..2e60bccbe 100644
## Argument Reference
* `name` - (Required) The name of the cluster, unique within the project and
-@@ -228,8 +244,7 @@ Structure is [documented below](#nested_master_auth).
+@@ -229,8 +245,7 @@ Structure is [documented below](#nested_master_auth).
If unset, the cluster's version will be set by GKE to the version of the most recent
official release (which is not necessarily the latest version). Most users will find
the `google_container_engine_versions` data source useful - it indicates which versions
@@ -1637,7 +1637,7 @@ index 229241d93..2e60bccbe 100644
[the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version)
describe the various acceptable formats for this field.
-@@ -259,8 +274,11 @@ region are guaranteed to support the same version.
+@@ -260,8 +275,11 @@ region are guaranteed to support the same version.
* `node_config` - (Optional) Parameters used in creating the default node pool.
Generally, this field should not be used at the same time as a
`google_container_node_pool` or a `node_pool` block; this configuration
@@ -1651,7 +1651,7 @@ index 229241d93..2e60bccbe 100644
* `node_pool` - (Optional) List of node pools associated with this cluster.
See [google_container_node_pool](container_node_pool.html) for schema.
-@@ -279,9 +297,9 @@ region are guaranteed to support the same version.
+@@ -280,9 +298,9 @@ region are guaranteed to support the same version.
or set to the same value as `min_master_version` on create. Defaults to the default
version set by GKE which is not necessarily the latest version. This only affects
nodes in the default node pool. While a fuzzy version can be specified, it's
@@ -1663,7 +1663,7 @@ index 229241d93..2e60bccbe 100644
To update nodes in other node pools, use the `version` attribute on the node pool.
* `notification_config` - (Optional) Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is [documented below](#nested_notification_config).
-@@ -320,7 +338,7 @@ When updating this field, GKE imposes specific version requirements. See
+@@ -321,7 +339,7 @@ When updating this field, GKE imposes specific version requirements. See
[Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel)
for more details; the `google_container_engine_versions` datasource can provide
the default version for a channel. Note that removing the `release_channel`
@@ -1672,7 +1672,7 @@ index 229241d93..2e60bccbe 100644
release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"`
channel. Structure is [documented below](#nested_release_channel).
-@@ -894,10 +912,6 @@ gvnic {
+@@ -904,10 +922,6 @@ gvnic {
* `guest_accelerator` - (Optional) List of the type and count of accelerator cards attached to the instance.
Structure [documented below](#nested_guest_accelerator).
@@ -1683,7 +1683,7 @@ index 229241d93..2e60bccbe 100644
* `image_type` - (Optional) The image type to use for this node. Note that changing the image type
will delete and recreate all nodes in the node pool.
-@@ -918,7 +932,7 @@ gvnic {
+@@ -928,7 +942,7 @@ gvnic {
* `metadata` - (Optional) The metadata key/value pairs assigned to instances in
the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to
`true` by the API; if `metadata` is set but that default value is not
@@ -1692,7 +1692,7 @@ index 229241d93..2e60bccbe 100644
value in your config.
* `min_cpu_platform` - (Optional) Minimum CPU platform to be used by this instance.
-@@ -943,10 +957,7 @@ gvnic {
+@@ -953,10 +967,7 @@ gvnic {
See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms)
for more information. Defaults to false.
@@ -1704,7 +1704,7 @@ index 229241d93..2e60bccbe 100644
* `service_account` - (Optional) The service account to be used by the Node VMs.
If not specified, the "default" service account is used.
-@@ -960,13 +971,14 @@ gvnic {
+@@ -970,13 +981,14 @@ gvnic {
* `resource_manager_tags` - (Optional) A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`.
@@ -1726,7 +1726,7 @@ index 229241d93..2e60bccbe 100644
* `workload_metadata_config` - (Optional) Metadata configuration to expose to workloads on the node pool.
Structure is [documented below](#nested_workload_metadata_config).
-@@ -1025,6 +1037,20 @@ sole_tenant_config {
+@@ -1035,6 +1047,20 @@ sole_tenant_config {
* `enable_nested_virtualization`- (Optional) Defines whether the instance should have nested virtualization enabled. Defaults to false.
@@ -1747,7 +1747,7 @@ index 229241d93..2e60bccbe 100644
The `ephemeral_storage_config` block supports:
* `local_ssd_count` (Required) - Number of local SSDs to use to back ephemeral storage. Uses NVMe interfaces. Each local SSD is 375 GB in size. If zero, it means to disable using local SSDs as ephemeral storage.
-@@ -1204,7 +1230,7 @@ for more details. This field only applies to private clusters, when
+@@ -1216,7 +1242,7 @@ for more details. This field only applies to private clusters, when
* `private_endpoint_subnetwork` - (Optional) Subnetwork in cluster's network where master's endpoint will be provisioned.
* `master_global_access_config` (Optional) - Controls cluster master global
@@ -1756,7 +1756,7 @@ index 229241d93..2e60bccbe 100644
not modify the previously-set value. Structure is [documented below](#nested_master_global_access_config).
In addition, the `private_cluster_config` allows access to the following read-only fields:
-@@ -1306,9 +1332,9 @@ Enables monitoring and attestation of the boot integrity of the instance. The at
+@@ -1318,9 +1344,9 @@ Enables monitoring and attestation of the boot integrity of the instance. The at
* `mode` (Required) How to expose the node metadata to the workload running on the node.
Accepted values are:
@@ -1770,7 +1770,7 @@ index 229241d93..2e60bccbe 100644
The `kubelet_config` block supports:
diff --git a/website/docs/r/container_node_pool.html.markdown b/website/docs/r/container_node_pool.html.markdown
-index 08759e68c..3b9ca755e 100644
+index 9a2cc5411..44ca4db4d 100644
--- a/website/docs/r/container_node_pool.html.markdown
+++ b/website/docs/r/container_node_pool.html.markdown
@@ -6,14 +6,11 @@ description: |-
@@ -1984,7 +1984,7 @@ index 98421f823..dfd01911a 100644
* `zone` - (Optional) The zone in which the created job should run. If it is not provided, the provider zone is used.
* `region` - (Optional) The region in which the created job should run.
diff --git a/website/docs/r/dataproc_cluster.html.markdown b/website/docs/r/dataproc_cluster.html.markdown
-index 926e19d6d..66820e009 100644
+index fcfb4bdbf..fa1cc53be 100644
--- a/website/docs/r/dataproc_cluster.html.markdown
+++ b/website/docs/r/dataproc_cluster.html.markdown
@@ -146,7 +146,7 @@ resource "google_dataproc_cluster" "accelerated_cluster" {
@@ -1996,7 +1996,7 @@ index 926e19d6d..66820e009 100644
Does not affect auto scaling decomissioning from an autoscaling policy.
Graceful decommissioning allows removing nodes from the cluster without interrupting jobs in progress.
Timeout specifies how long to wait for jobs in progress to finish before forcefully removing nodes (and potentially interrupting jobs).
-@@ -641,7 +641,6 @@ will be set for you based on whatever was set for the `worker_config.machine_typ
+@@ -644,7 +644,6 @@ will be set for you based on whatever was set for the `worker_config.machine_typ
* PREEMPTIBILITY_UNSPECIFIED
* NON_PREEMPTIBLE
* PREEMPTIBLE
diff --git a/patches/0007-Remove-duplicative-resource-token.patch b/patches/0007-Remove-duplicative-resource-token.patch
index ffd7af91ac..5898c88ca3 100644
--- a/patches/0007-Remove-duplicative-resource-token.patch
+++ b/patches/0007-Remove-duplicative-resource-token.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Remove duplicative resource token
diff --git a/google-beta/provider/provider.go b/google-beta/provider/provider.go
-index 4861208ef..6ebfba930 100644
+index 8f31ba934..d21aebbde 100644
--- a/google-beta/provider/provider.go
+++ b/google-beta/provider/provider.go
-@@ -908,6 +908,15 @@ func Provider() *schema.Provider {
+@@ -916,6 +916,15 @@ func Provider() *schema.Provider {
func DatasourceMap() map[string]*schema.Resource {
datasourceMap, _ := DatasourceMapWithErrors()
diff --git a/patches/0008-Fix-794-with-an-unconditional-read.patch b/patches/0008-Fix-794-with-an-unconditional-read.patch
index 106535e2a1..f9b04b52d8 100644
--- a/patches/0008-Fix-794-with-an-unconditional-read.patch
+++ b/patches/0008-Fix-794-with-an-unconditional-read.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Fix #794 with an unconditional read.
diff --git a/google-beta/services/sql/resource_sql_database_instance.go b/google-beta/services/sql/resource_sql_database_instance.go
-index af14d90a7..406447fe3 100644
+index 7d6b2c6e0..697785180 100644
--- a/google-beta/services/sql/resource_sql_database_instance.go
+++ b/google-beta/services/sql/resource_sql_database_instance.go
@@ -2009,10 +2009,11 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
diff --git a/patches/0009-Bucket-Skip-default-labels-for-Import-and-Create.patch b/patches/0009-Bucket-Skip-default-labels-for-Import-and-Create.patch
index d4ff3d1c1d..344164ad9c 100644
--- a/patches/0009-Bucket-Skip-default-labels-for-Import-and-Create.patch
+++ b/patches/0009-Bucket-Skip-default-labels-for-Import-and-Create.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Bucket: Skip default labels for Import and Create
diff --git a/google-beta/services/storage/resource_storage_bucket.go b/google-beta/services/storage/resource_storage_bucket.go
-index 6531cb26e..d8d5486b6 100644
+index 54a8dec66..cd55b80b0 100644
--- a/google-beta/services/storage/resource_storage_bucket.go
+++ b/google-beta/services/storage/resource_storage_bucket.go
-@@ -1904,10 +1904,10 @@ func setStorageBucket(d *schema.ResourceData, config *transport_tpg.Config, res
+@@ -1902,10 +1902,10 @@ func setStorageBucket(d *schema.ResourceData, config *transport_tpg.Config, res
if err := d.Set("lifecycle_rule", flattenBucketLifecycle(d, res.Lifecycle)); err != nil {
return fmt.Errorf("Error setting lifecycle_rule: %s", err)
}
@@ -22,7 +22,7 @@ index 6531cb26e..d8d5486b6 100644
}
if err := d.Set("effective_labels", res.Labels); err != nil {
diff --git a/google-beta/tpgresource/labels.go b/google-beta/tpgresource/labels.go
-index ffb1515cf..669e561c3 100644
+index eafe38438..c1f82d0d2 100644
--- a/google-beta/tpgresource/labels.go
+++ b/google-beta/tpgresource/labels.go
@@ -31,6 +31,34 @@ func SetLabels(labels map[string]string, d *schema.ResourceData, lineage string)
@@ -59,4 +59,4 @@ index ffb1515cf..669e561c3 100644
+
// Sets the "labels" field and "terraform_labels" with the value of the field "effective_labels" for data sources.
// When reading data source, as the labels field is unavailable in the configuration of the data source,
- // the "labels" field will be empty. With this funciton, the labels "field" will have all of labels in the resource.
+ // the "labels" field will be empty. With this function, the labels "field" will have all of labels in the resource.
diff --git a/patches/0010-Rename-default-provisioning-label-to-goog-pulumi-pro.patch b/patches/0010-Rename-default-provisioning-label-to-goog-pulumi-pro.patch
index cb3391f0ca..3134b4b44a 100644
--- a/patches/0010-Rename-default-provisioning-label-to-goog-pulumi-pro.patch
+++ b/patches/0010-Rename-default-provisioning-label-to-goog-pulumi-pro.patch
@@ -5,10 +5,10 @@ Subject: [PATCH] Rename default provisioning label to goog-pulumi-provisioned
diff --git a/google-beta/transport/config.go b/google-beta/transport/config.go
-index 514bcad6b..a76eae477 100644
+index 840d0cb0e..9bc2c3ab2 100644
--- a/google-beta/transport/config.go
+++ b/google-beta/transport/config.go
-@@ -664,7 +664,7 @@ var DefaultClientScopes = []string{
+@@ -668,7 +668,7 @@ var DefaultClientScopes = []string{
"https://www.googleapis.com/auth/userinfo.email",
}
diff --git a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json
index 0c87ef91ca..890f16696e 100644
--- a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json
+++ b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json
@@ -4408,6 +4408,9 @@
"network_config": {
"maxItemsOne": true
},
+ "private_service_connect": {
+ "maxItemsOne": true
+ },
"worker_config": {
"maxItemsOne": true
}
@@ -4750,7 +4753,21 @@
"elem": {
"fields": {
"gateway_service_mesh": {
- "maxItemsOne": true
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "route_destinations": {
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "destination_ids": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ }
},
"service_networking": {
"maxItemsOne": true
@@ -4834,6 +4851,19 @@
"anthos_cluster": {
"maxItemsOne": true
},
+ "associated_entities": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "anthos_clusters": {
+ "maxItemsOne": false
+ },
+ "gke_clusters": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
"custom_target": {
"maxItemsOne": true
},
@@ -7705,6 +7735,9 @@
"cloud_run": {
"maxItemsOne": true
},
+ "psc_data": {
+ "maxItemsOne": true
+ },
"serverless_deployment": {
"maxItemsOne": true
}
@@ -9082,7 +9115,21 @@
"maxItemsOne": true
},
"layer_7_ddos_defense_config": {
- "maxItemsOne": true
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "threshold_configs": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "traffic_granularity_configs": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ }
}
}
}
@@ -10694,6 +10741,9 @@
}
}
},
+ "enterprise_config": {
+ "maxItemsOne": true
+ },
"fleet": {
"maxItemsOne": true
},
@@ -11151,6 +11201,9 @@
"maxItemsOne": true,
"elem": {
"fields": {
+ "linux_node_config": {
+ "maxItemsOne": true
+ },
"network_tags": {
"maxItemsOne": true,
"elem": {
@@ -14764,7 +14817,21 @@
}
},
"runtime_config": {
- "maxItemsOne": true
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "autotuning_config": {
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "scenarios": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ }
},
"runtime_info": {
"maxItemsOne": false,
@@ -14900,6 +14967,9 @@
"maxItemsOne": true,
"elem": {
"fields": {
+ "confidential_instance_config": {
+ "maxItemsOne": true
+ },
"node_group_affinity": {
"maxItemsOne": true
},
@@ -14973,6 +15043,9 @@
},
"instance_selection_results": {
"maxItemsOne": false
+ },
+ "provisioning_model_mix": {
+ "maxItemsOne": true
}
}
}
@@ -18417,6 +18490,44 @@
}
}
},
+ "google_gemini_code_repository_index": {
+ "current": "gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex",
+ "majorVersion": 8
+ },
+ "google_gemini_repository_group": {
+ "current": "gcp:gemini/repositoryGroup:RepositoryGroup",
+ "majorVersion": 8,
+ "fields": {
+ "repositories": {
+ "maxItemsOne": false
+ }
+ }
+ },
+ "google_gemini_repository_group_iam_binding": {
+ "current": "gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding",
+ "majorVersion": 8,
+ "fields": {
+ "condition": {
+ "maxItemsOne": true
+ },
+ "members": {
+ "maxItemsOne": false
+ }
+ }
+ },
+ "google_gemini_repository_group_iam_member": {
+ "current": "gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember",
+ "majorVersion": 8,
+ "fields": {
+ "condition": {
+ "maxItemsOne": true
+ }
+ }
+ },
+ "google_gemini_repository_group_iam_policy": {
+ "current": "gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy",
+ "majorVersion": 8
+ },
"google_gke_backup_backup_plan": {
"current": "gcp:gkebackup/backupPlan:BackupPlan",
"majorVersion": 8,
@@ -20185,6 +20296,18 @@
}
}
},
+ "google_iam_projects_policy_binding": {
+ "current": "gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding",
+ "majorVersion": 8,
+ "fields": {
+ "condition": {
+ "maxItemsOne": true
+ },
+ "target": {
+ "maxItemsOne": true
+ }
+ }
+ },
"google_iam_workforce_pool": {
"current": "gcp:iam/workforcePool:WorkforcePool",
"majorVersion": 8,
@@ -22641,6 +22764,32 @@
"current": "gcp:networksecurity/gatewaySecurityPolicyRule:GatewaySecurityPolicyRule",
"majorVersion": 8
},
+ "google_network_security_mirroring_deployment": {
+ "current": "gcp:networksecurity/mirroringDeployment:MirroringDeployment",
+ "majorVersion": 8
+ },
+ "google_network_security_mirroring_deployment_group": {
+ "current": "gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup",
+ "majorVersion": 8,
+ "fields": {
+ "connected_endpoint_groups": {
+ "maxItemsOne": false
+ }
+ }
+ },
+ "google_network_security_mirroring_endpoint_group": {
+ "current": "gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup",
+ "majorVersion": 8
+ },
+ "google_network_security_mirroring_endpoint_group_association": {
+ "current": "gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation",
+ "majorVersion": 8,
+ "fields": {
+ "locations_details": {
+ "maxItemsOne": false
+ }
+ }
+ },
"google_network_security_security_profile": {
"current": "gcp:networksecurity/securityProfile:SecurityProfile",
"majorVersion": 8,
@@ -25720,6 +25869,32 @@
"current": "gcp:redis/cluster:Cluster",
"majorVersion": 8,
"fields": {
+ "cross_cluster_replication_config": {
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "membership": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "primary_cluster": {
+ "maxItemsOne": false
+ },
+ "secondary_clusters": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
+ "primary_cluster": {
+ "maxItemsOne": true
+ },
+ "secondary_clusters": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
"discovery_endpoints": {
"maxItemsOne": false,
"elem": {
@@ -27590,6 +27765,29 @@
}
}
},
+ "google_tpu_v2_queued_resource": {
+ "current": "gcp:tpu/v2QueuedResource:V2QueuedResource",
+ "majorVersion": 8,
+ "fields": {
+ "tpu": {
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "node_spec": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "node": {
+ "maxItemsOne": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"google_tpu_v2_vm": {
"current": "gcp:tpu/v2Vm:V2Vm",
"majorVersion": 8,
@@ -29135,6 +29333,15 @@
"current": "gcp:artifactregistry/getRepositoryIamPolicy:getRepositoryIamPolicy",
"majorVersion": 8
},
+ "google_backup_dr_backup": {
+ "current": "gcp:backupdisasterrecovery/getBackup:getBackup",
+ "majorVersion": 8,
+ "fields": {
+ "backups": {
+ "maxItemsOne": false
+ }
+ }
+ },
"google_backup_dr_backup_plan": {
"current": "gcp:backupdisasterrecovery/getBackupPlan:getBackupPlan",
"majorVersion": 8,
@@ -29186,6 +29393,10 @@
}
}
},
+ "google_backup_dr_backup_vault": {
+ "current": "gcp:backupdisasterrecovery/getBackupVault:getBackupVault",
+ "majorVersion": 8
+ },
"google_backup_dr_data_source": {
"current": "gcp:backupdisasterrecovery/getDataSource:getDataSource",
"majorVersion": 8,
@@ -31631,6 +31842,9 @@
"cloud_run": {
"maxItemsOne": false
},
+ "psc_data": {
+ "maxItemsOne": false
+ },
"serverless_deployment": {
"maxItemsOne": false
}
@@ -31896,7 +32110,21 @@
"maxItemsOne": false
},
"layer_7_ddos_defense_config": {
- "maxItemsOne": false
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "threshold_configs": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "traffic_granularity_configs": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ }
}
}
}
@@ -32311,6 +32539,9 @@
}
}
},
+ "enterprise_config": {
+ "maxItemsOne": false
+ },
"fleet": {
"maxItemsOne": false
},
@@ -32768,6 +32999,9 @@
"maxItemsOne": false,
"elem": {
"fields": {
+ "linux_node_config": {
+ "maxItemsOne": false
+ },
"network_tags": {
"maxItemsOne": false,
"elem": {
@@ -33322,6 +33556,10 @@
}
}
},
+ "google_gemini_repository_group_iam_policy": {
+ "current": "gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy",
+ "majorVersion": 8
+ },
"google_gke_backup_backup_plan_iam_policy": {
"current": "gcp:gkebackup/getBackupPlanIamPolicy:getBackupPlanIamPolicy",
"majorVersion": 8
@@ -35991,6 +36229,14 @@
"effective_labels",
"terraform_labels"
],
+ "google_gemini_code_repository_index": [
+ "effective_labels",
+ "terraform_labels"
+ ],
+ "google_gemini_repository_group": [
+ "effective_labels",
+ "terraform_labels"
+ ],
"google_gke_backup_backup_plan": [
"effective_labels",
"terraform_labels"
@@ -36175,6 +36421,22 @@
"effective_labels",
"terraform_labels"
],
+ "google_network_security_mirroring_deployment": [
+ "effective_labels",
+ "terraform_labels"
+ ],
+ "google_network_security_mirroring_deployment_group": [
+ "effective_labels",
+ "terraform_labels"
+ ],
+ "google_network_security_mirroring_endpoint_group": [
+ "effective_labels",
+ "terraform_labels"
+ ],
+ "google_network_security_mirroring_endpoint_group_association": [
+ "effective_labels",
+ "terraform_labels"
+ ],
"google_network_security_security_profile": [
"effective_labels",
"terraform_labels"
@@ -36417,6 +36679,10 @@
"effective_labels",
"terraform_labels"
],
+ "google_backup_dr_backup_vault": [
+ "effective_labels",
+ "terraform_labels"
+ ],
"google_beyondcorp_app_connection": [
"effective_labels",
"terraform_labels"
@@ -37189,6 +37455,11 @@
"gcp:folder/iAMPolicy:IAMPolicy": 0,
"gcp:folder/iamAuditConfig:IamAuditConfig": 0,
"gcp:folder/organizationPolicy:OrganizationPolicy": 0,
+ "gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex": 0,
+ "gcp:gemini/repositoryGroup:RepositoryGroup": 0,
+ "gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding": 0,
+ "gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember": 0,
+ "gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy": 0,
"gcp:gkebackup/backupPlan:BackupPlan": 0,
"gcp:gkebackup/backupPlanIamBinding:BackupPlanIamBinding": 0,
"gcp:gkebackup/backupPlanIamMember:BackupPlanIamMember": 0,
@@ -37247,6 +37518,7 @@
"gcp:iam/foldersPolicyBinding:FoldersPolicyBinding": 0,
"gcp:iam/organizationsPolicyBinding:OrganizationsPolicyBinding": 0,
"gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy": 0,
+ "gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding": 0,
"gcp:iam/workforcePool:WorkforcePool": 0,
"gcp:iam/workforcePoolProvider:WorkforcePoolProvider": 0,
"gcp:iam/workloadIdentityPool:WorkloadIdentityPool": 0,
@@ -37380,6 +37652,10 @@
"gcp:networksecurity/firewallEndpointAssociation:FirewallEndpointAssociation": 0,
"gcp:networksecurity/gatewaySecurityPolicy:GatewaySecurityPolicy": 0,
"gcp:networksecurity/gatewaySecurityPolicyRule:GatewaySecurityPolicyRule": 0,
+ "gcp:networksecurity/mirroringDeployment:MirroringDeployment": 0,
+ "gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup": 0,
+ "gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup": 0,
+ "gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation": 0,
"gcp:networksecurity/securityProfile:SecurityProfile": 0,
"gcp:networksecurity/securityProfileGroup:SecurityProfileGroup": 0,
"gcp:networksecurity/serverTlsPolicy:ServerTlsPolicy": 0,
@@ -37593,6 +37869,7 @@
"gcp:tags/tagValueIamMember:TagValueIamMember": 0,
"gcp:tags/tagValueIamPolicy:TagValueIamPolicy": 0,
"gcp:tpu/node:Node": 0,
+ "gcp:tpu/v2QueuedResource:V2QueuedResource": 0,
"gcp:tpu/v2Vm:V2Vm": 0,
"gcp:transcoder/job:Job": 0,
"gcp:transcoder/jobTemplate:JobTemplate": 0,
@@ -37664,8 +37941,10 @@
"gcp:artifactregistry/getLocations:getLocations": 0,
"gcp:artifactregistry/getRepository:getRepository": 0,
"gcp:artifactregistry/getRepositoryIamPolicy:getRepositoryIamPolicy": 0,
+ "gcp:backupdisasterrecovery/getBackup:getBackup": 0,
"gcp:backupdisasterrecovery/getBackupPlan:getBackupPlan": 0,
"gcp:backupdisasterrecovery/getBackupPlanAssociation:getBackupPlanAssociation": 0,
+ "gcp:backupdisasterrecovery/getBackupVault:getBackupVault": 0,
"gcp:backupdisasterrecovery/getDataSource:getDataSource": 0,
"gcp:backupdisasterrecovery/getManagementServer:getManagementServer": 0,
"gcp:beyondcorp/getAppConnection:getAppConnection": 0,
@@ -37823,6 +38102,7 @@
"gcp:firebase/getWebAppConfig:getWebAppConfig": 1,
"gcp:folder/getIamPolicy:getIamPolicy": 0,
"gcp:folder/getOrganizationPolicy:getOrganizationPolicy": 0,
+ "gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy": 0,
"gcp:gkebackup/getBackupPlanIamPolicy:getBackupPlanIamPolicy": 0,
"gcp:gkebackup/getRestorePlanIamPolicy:getRestorePlanIamPolicy": 0,
"gcp:gkehub/getFeatureIamPolicy:getFeatureIamPolicy": 0,
diff --git a/provider/cmd/pulumi-resource-gcp/schema.json b/provider/cmd/pulumi-resource-gcp/schema.json
index abe2f0c15e..0536967e7e 100644
--- a/provider/cmd/pulumi-resource-gcp/schema.json
+++ b/provider/cmd/pulumi-resource-gcp/schema.json
@@ -84,6 +84,7 @@
"firestore": "Firestore",
"folder": "Folder",
"gcp": "Gcp",
+ "gemini": "Gemini",
"gkebackup": "GkeBackup",
"gkehub": "GkeHub",
"gkeonprem": "GkeOnPrem",
@@ -455,6 +456,9 @@
"firestoreCustomEndpoint": {
"type": "string"
},
+ "geminiCustomEndpoint": {
+ "type": "string"
+ },
"gkeBackupCustomEndpoint": {
"type": "string"
},
@@ -2229,6 +2233,10 @@
"type": "string",
"description": "Description of the ServicePerimeter and its use. Does not affect\nbehavior.\n"
},
+ "etag": {
+ "type": "string",
+ "description": "(Output)\nAn opaque identifier for the current version of the ServicePerimeter. This\nidentifier does not follow any specific format. If an etag is not provided, the\noperation will be performed as if a valid etag is provided.\n"
+ },
"name": {
"type": "string",
"description": "Resource name for the ServicePerimeter. The short_name component must\nbegin with a letter and only include alphanumeric and '_'.\nFormat: accessPolicies/{policy_id}/servicePerimeters/{short_name}\n",
@@ -2269,6 +2277,7 @@
"nodejs": {
"requiredOutputs": [
"createTime",
+ "etag",
"name",
"title",
"updateTime"
@@ -6696,7 +6705,7 @@
"properties": {
"uri": {
"type": "string",
- "description": "Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY`\n",
+ "description": "One of:\na. Artifact Registry Repository resource, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY`\nb. URI to the registry, e.g. `\"https://registry-1.docker.io\"`\nc. URI to Artifact Registry Repository, e.g. `\"https://REGION-docker.pkg.dev/UPSTREAM_PROJECT_ID/UPSTREAM_REPOSITORY\"`\n",
"willReplaceOnChanges": true
}
},
@@ -6709,7 +6718,7 @@
"properties": {
"customRepository": {
"$ref": "#/types/gcp:artifactregistry/RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository:RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository",
- "description": "Settings for a remote repository with a custom uri.\nStructure is documented below.\n",
+ "description": "[Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.\nStructure is documented below.\n",
"willReplaceOnChanges": true
},
"publicRepository": {
@@ -6734,7 +6743,7 @@
"properties": {
"customRepository": {
"$ref": "#/types/gcp:artifactregistry/RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository:RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository",
- "description": "Settings for a remote repository with a custom uri.\nStructure is documented below.\n",
+ "description": "[Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.\nStructure is documented below.\n",
"willReplaceOnChanges": true
},
"publicRepository": {
@@ -6759,7 +6768,7 @@
"properties": {
"customRepository": {
"$ref": "#/types/gcp:artifactregistry/RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository:RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository",
- "description": "Settings for a remote repository with a custom uri.\nStructure is documented below.\n",
+ "description": "[Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.\nStructure is documented below.\n",
"willReplaceOnChanges": true
},
"publicRepository": {
@@ -6784,7 +6793,7 @@
"properties": {
"customRepository": {
"$ref": "#/types/gcp:artifactregistry/RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository:RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository",
- "description": "Settings for a remote repository with a custom uri.\nStructure is documented below.\n",
+ "description": "[Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.\nStructure is documented below.\n",
"willReplaceOnChanges": true
},
"publicRepository": {
@@ -7172,7 +7181,7 @@
"properties": {
"uri": {
"type": "string",
- "description": "Specific uri to the Artifact Registory repository, e.g. 'projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY'\n"
+ "description": "One of:\na. Artifact Registry Repository resource, e.g. 'projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY'\nb. URI to the registry, e.g. '\"https://registry-1.docker.io\"'\nc. URI to Artifact Registry Repository, e.g. '\"https://REGION-docker.pkg.dev/UPSTREAM_PROJECT_ID/UPSTREAM_REPOSITORY\"'\n"
}
},
"type": "object",
@@ -7192,7 +7201,7 @@
"items": {
"$ref": "#/types/gcp:artifactregistry/getRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository:getRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository"
},
- "description": "Settings for a remote repository with a custom uri.\n"
+ "description": "[Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.\n"
},
"publicRepository": {
"type": "string",
@@ -7234,7 +7243,7 @@
"items": {
"$ref": "#/types/gcp:artifactregistry/getRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository:getRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository"
},
- "description": "Settings for a remote repository with a custom uri.\n"
+ "description": "[Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.\n"
},
"publicRepository": {
"type": "string",
@@ -7276,7 +7285,7 @@
"items": {
"$ref": "#/types/gcp:artifactregistry/getRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository:getRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository"
},
- "description": "Settings for a remote repository with a custom uri.\n"
+ "description": "[Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.\n"
},
"publicRepository": {
"type": "string",
@@ -7318,7 +7327,7 @@
"items": {
"$ref": "#/types/gcp:artifactregistry/getRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository:getRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository"
},
- "description": "Settings for a remote repository with a custom uri.\n"
+ "description": "[Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.\n"
},
"publicRepository": {
"type": "string",
@@ -7860,6 +7869,43 @@
"network"
]
},
+ "gcp:backupdisasterrecovery/getBackupBackup:getBackupBackup": {
+ "properties": {
+ "backupId": {
+ "type": "string",
+ "description": "Id of the requesting object, Backup.\n"
+ },
+ "backupVaultId": {
+ "type": "string",
+ "description": "Name of the Backup Vault associated with Backup.\n"
+ },
+ "dataSourceId": {
+ "type": "string",
+ "description": "Name of the Data Source associated with Backup.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Location of the resource.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Name of the resource.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "backupId",
+ "backupVaultId",
+ "dataSourceId",
+ "location",
+ "name"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"gcp:backupdisasterrecovery/getBackupPlanAssociationRulesConfigInfo:getBackupPlanAssociationRulesConfigInfo": {
"properties": {
"lastBackupErrors": {
@@ -11676,7 +11722,7 @@
"items": {
"type": "string"
},
- "description": "Optional. If creditTypesTreatment is INCLUDE_SPECIFIED_CREDITS,\nthis is a list of credit types to be subtracted from gross cost to determine the spend for threshold calculations. See a list of acceptable credit type values.\nIf creditTypesTreatment is not INCLUDE_SPECIFIED_CREDITS, this field must be empty.\n**Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.\n"
+ "description": "Optional. If creditTypesTreatment is INCLUDE_SPECIFIED_CREDITS,\nthis is a list of credit types to be subtracted from gross cost to determine the spend for threshold calculations. See a list of acceptable credit type values.\nIf creditTypesTreatment is not INCLUDE_SPECIFIED_CREDITS, this field must be empty.\n**Note:** If the field has a value in the config and needs to be removed, the field has to be an empty array in the config.\n"
},
"creditTypesTreatment": {
"type": "string",
@@ -11719,7 +11765,7 @@
"items": {
"type": "string"
},
- "description": "A set of subaccounts of the form billingAccounts/{account_id},\nspecifying that usage from only this set of subaccounts should\nbe included in the budget. If a subaccount is set to the name of\nthe parent account, usage from the parent account will be included.\nIf the field is omitted, the report will include usage from the parent\naccount and all subaccounts, if they exist.\n**Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.\n"
+ "description": "A set of subaccounts of the form billingAccounts/{account_id},\nspecifying that usage from only this set of subaccounts should\nbe included in the budget. If a subaccount is set to the name of\nthe parent account, usage from the parent account will be included.\nIf the field is omitted, the report will include usage from the parent\naccount and all subaccounts, if they exist.\n**Note:** If the field has a value in the config and needs to be removed, the field has to be an empty array in the config.\n"
}
},
"type": "object",
@@ -12296,7 +12342,7 @@
"properties": {
"keyId": {
"type": "string",
- "description": "The value of the KeyId in lowercase hexidecimal.\n\n\u003ca name=\"nested_x509_config\"\u003e\u003c/a\u003eThe `x509_config` block supports:\n",
+ "description": "The value of the KeyId in lowercase hexadecimal.\n\n\u003ca name=\"nested_x509_config\"\u003e\u003c/a\u003eThe `x509_config` block supports:\n",
"willReplaceOnChanges": true
}
},
@@ -13503,7 +13549,7 @@
"properties": {
"keyId": {
"type": "string",
- "description": "The value of the KeyId in lowercase hexidecimal.\n"
+ "description": "The value of the KeyId in lowercase hexadecimal.\n"
}
},
"type": "object",
@@ -14048,7 +14094,7 @@
"properties": {
"keyId": {
"type": "string",
- "description": "The value of the KeyId in lowercase hexidecimal.\n",
+ "description": "The value of the KeyId in lowercase hexadecimal.\n",
"willReplaceOnChanges": true
}
},
@@ -14923,7 +14969,7 @@
"properties": {
"keyId": {
"type": "string",
- "description": "The value of the KeyId in lowercase hexidecimal.\n"
+ "description": "The value of the KeyId in lowercase hexadecimal.\n"
}
},
"type": "object",
@@ -17151,6 +17197,24 @@
"peeredNetwork"
]
},
+ "gcp:cloudbuild/WorkerPoolPrivateServiceConnect:WorkerPoolPrivateServiceConnect": {
+ "properties": {
+ "networkAttachment": {
+ "type": "string",
+ "description": "Required. Immutable. The network attachment that the worker network interface is connected to. Must be in the format `projects/{project}/regions/{region}/networkAttachments/{networkAttachment}`. The region of network attachment must be the same as the worker pool. See [Network Attachments](https://cloud.google.com/vpc/docs/about-network-attachments)\n",
+ "willReplaceOnChanges": true
+ },
+ "routeAllTraffic": {
+ "type": "boolean",
+ "description": "Immutable. Route all traffic through PSC interface. Enable this if you want full control of traffic in the private pool. Configure Cloud NAT for the subnet of network attachment if you need to access public Internet. If false, Only route private IPs, e.g. 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16 through PSC interface.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "networkAttachment"
+ ]
+ },
"gcp:cloudbuild/WorkerPoolWorkerConfig:WorkerPoolWorkerConfig": {
"properties": {
"diskSizeGb": {
@@ -19486,6 +19550,10 @@
"type": "string",
"description": "Optional. The label to use when selecting Pods for the Deployment and Service resources. This label must already be present in both resources.\n"
},
+ "routeDestinations": {
+ "$ref": "#/types/gcp:clouddeploy/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations:DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations",
+ "description": "Optional. Route destinations allow configuring the Gateway API HTTPRoute to be deployed to additional clusters. This option is available for multi-cluster service mesh set ups that require the route to exist in the clusters that call the service. If unspecified, the HTTPRoute will only be deployed to the Target cluster.\n"
+ },
"routeUpdateWaitTime": {
"type": "string",
"description": "Optional. The time to wait for route updates to propagate. The maximum configurable time is 3 hours, in seconds format. If unspecified, there is no wait time.\n"
@@ -19506,6 +19574,25 @@
"service"
]
},
+ "gcp:clouddeploy/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations:DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations": {
+ "properties": {
+ "destinationIds": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Required. The clusters where the Gateway API HTTPRoute resource will be deployed to. Valid entries include the associated entities IDs configured in the Target resource and \"@self\" to include the Target cluster.\n"
+ },
+ "propagateService": {
+ "type": "boolean",
+ "description": "Optional. Whether to propagate the Kubernetes Service to the route destination clusters. The Service will always be deployed to the Target cluster even if the HTTPRoute is not. This option may be used to facilitiate successful DNS lookup in the route destination clusters. Can only be set to true if destinations are specified.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "destinationIds"
+ ]
+ },
"gcp:clouddeploy/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworking:DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworking": {
"properties": {
"deployment": {
@@ -19581,6 +19668,58 @@
},
"type": "object"
},
+ "gcp:clouddeploy/TargetAssociatedEntity:TargetAssociatedEntity": {
+ "properties": {
+ "anthosClusters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:clouddeploy/TargetAssociatedEntityAnthosCluster:TargetAssociatedEntityAnthosCluster"
+ },
+ "description": "Optional. Information specifying Anthos clusters as associated entities.\n"
+ },
+ "entityId": {
+ "type": "string",
+ "description": "The name for the key in the map for which this object is mapped to in the API\n"
+ },
+ "gkeClusters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:clouddeploy/TargetAssociatedEntityGkeCluster:TargetAssociatedEntityGkeCluster"
+ },
+ "description": "Optional. Information specifying GKE clusters as associated entities.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "entityId"
+ ]
+ },
+ "gcp:clouddeploy/TargetAssociatedEntityAnthosCluster:TargetAssociatedEntityAnthosCluster": {
+ "properties": {
+ "membership": {
+ "type": "string",
+ "description": "Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`.\n"
+ }
+ },
+ "type": "object"
+ },
+ "gcp:clouddeploy/TargetAssociatedEntityGkeCluster:TargetAssociatedEntityGkeCluster": {
+ "properties": {
+ "cluster": {
+ "type": "string",
+ "description": "Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`.\n"
+ },
+ "internalIp": {
+ "type": "boolean",
+ "description": "Optional. If true, `cluster` is accessed using the private IP address of the control plane endpoint. Otherwise, the default IP address of the control plane endpoint is used. The default IP address is the private IP address for clusters with private control-plane endpoints and the public IP address otherwise. Only specify this option when `cluster` is a [private GKE cluster](https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept).\n"
+ },
+ "proxyUrl": {
+ "type": "string",
+ "description": "Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server.\n"
+ }
+ },
+ "type": "object"
+ },
"gcp:clouddeploy/TargetCustomTarget:TargetCustomTarget": {
"properties": {
"customTargetType": {
@@ -20852,7 +20991,7 @@
},
"projectId": {
"type": "string",
- "description": "Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.\n"
+ "description": "Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.\n"
},
"secret": {
"type": "string",
@@ -20879,7 +21018,7 @@
},
"projectId": {
"type": "string",
- "description": "Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.\n"
+ "description": "Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.\n"
},
"secret": {
"type": "string",
@@ -21314,7 +21453,7 @@
},
"projectId": {
"type": "string",
- "description": "Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.\n"
+ "description": "Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.\n"
},
"secret": {
"type": "string",
@@ -21346,7 +21485,7 @@
},
"projectId": {
"type": "string",
- "description": "Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.\n"
+ "description": "Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.\n"
},
"secret": {
"type": "string",
@@ -32342,6 +32481,15 @@
"type": "boolean",
"description": "Defines whether the instance should have nested virtualization enabled. Defaults to false.\n"
},
+ "enableUefiNetworking": {
+ "type": "boolean",
+ "description": "Whether to enable UEFI networking for instance creation.\n",
+ "willReplaceOnChanges": true
+ },
+ "performanceMonitoringUnit": {
+ "type": "string",
+ "description": "[The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.\n"
+ },
"threadsPerCore": {
"type": "integer",
"description": "The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.\n"
@@ -32510,7 +32658,7 @@
},
"storagePool": {
"type": "string",
- "description": "The URL of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n",
+ "description": "The URL or the name of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /zones/{zone}/storagePools/{storagePool}\n* /{storagePool}\n",
"willReplaceOnChanges": true
},
"type": {
@@ -32553,6 +32701,15 @@
"type": "boolean",
"description": "Whether to enable nested virtualization or not.\n"
},
+ "enableUefiNetworking": {
+ "type": "boolean",
+ "description": "Whether to enable UEFI networking for the instance.\n",
+ "willReplaceOnChanges": true
+ },
+ "performanceMonitoringUnit": {
+ "type": "string",
+ "description": "The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are \"STANDARD\", \"ENHANCED\", and \"ARCHITECTURAL\".\n"
+ },
"threadsPerCore": {
"type": "integer",
"description": "The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.\n"
@@ -32571,6 +32728,8 @@
"nodejs": {
"requiredOutputs": [
"enableNestedVirtualization",
+ "enableUefiNetworking",
+ "performanceMonitoringUnit",
"threadsPerCore",
"turboMode",
"visibleCoreCount"
@@ -32858,7 +33017,7 @@
},
"nicType": {
"type": "string",
- "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF\n",
+ "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA\n",
"willReplaceOnChanges": true
},
"queueCount": {
@@ -33347,6 +33506,15 @@
"type": "boolean",
"description": "Whether to enable nested virtualization or not.\n"
},
+ "enableUefiNetworking": {
+ "type": "boolean",
+ "description": "Whether to enable UEFI networking for the instance.\n",
+ "willReplaceOnChanges": true
+ },
+ "performanceMonitoringUnit": {
+ "type": "string",
+ "description": "The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are \"STANDARD\", \"ENHANCED\", and \"ARCHITECTURAL\".\n"
+ },
"threadsPerCore": {
"type": "integer",
"description": "The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.\n"
@@ -33365,6 +33533,8 @@
"nodejs": {
"requiredOutputs": [
"enableNestedVirtualization",
+ "enableUefiNetworking",
+ "performanceMonitoringUnit",
"threadsPerCore",
"turboMode",
"visibleCoreCount"
@@ -33652,7 +33822,7 @@
},
"nicType": {
"type": "string",
- "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF\n",
+ "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA\n",
"willReplaceOnChanges": true
},
"queueCount": {
@@ -34620,7 +34790,7 @@
},
"nicType": {
"type": "string",
- "description": "The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF.\n",
+ "description": "The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. In the beta provider the additional values of MRDMA and IRDMA are supported.\n",
"willReplaceOnChanges": true
},
"queueCount": {
@@ -35052,6 +35222,16 @@
"description": "Defines whether the instance should have nested virtualization enabled. Defaults to false.\n",
"willReplaceOnChanges": true
},
+ "enableUefiNetworking": {
+ "type": "boolean",
+ "description": "Whether to enable UEFI networking for instance creation.\n",
+ "willReplaceOnChanges": true
+ },
+ "performanceMonitoringUnit": {
+ "type": "string",
+ "description": "[The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.\n",
+ "willReplaceOnChanges": true
+ },
"threadsPerCore": {
"type": "integer",
"description": "The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.\n",
@@ -35342,7 +35522,7 @@
},
"nicType": {
"type": "string",
- "description": "The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET.\n",
+ "description": "The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported.\n",
"willReplaceOnChanges": true
},
"queueCount": {
@@ -38572,6 +38752,16 @@
"description": "Defines whether the instance should have nested virtualization enabled. Defaults to false.\n",
"willReplaceOnChanges": true
},
+ "enableUefiNetworking": {
+ "type": "boolean",
+ "description": "Whether to enable UEFI networking for instance creation.\n",
+ "willReplaceOnChanges": true
+ },
+ "performanceMonitoringUnit": {
+ "type": "string",
+ "description": "[The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.\n",
+ "willReplaceOnChanges": true
+ },
"threadsPerCore": {
"type": "integer",
"description": "The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.\n",
@@ -38856,7 +39046,7 @@
},
"nicType": {
"type": "string",
- "description": "The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET.\n",
+ "description": "The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported.\n",
"willReplaceOnChanges": true
},
"queueCount": {
@@ -39294,6 +39484,16 @@
},
"type": "object"
},
+ "gcp:compute/RegionNetworkEndpointGroupPscData:RegionNetworkEndpointGroupPscData": {
+ "properties": {
+ "producerPort": {
+ "type": "string",
+ "description": "The PSC producer port to use when consumer PSC NEG connects to a producer. If\nthis flag isn't specified for a PSC NEG with endpoint type\nprivate-service-connect, then PSC NEG will be connected to a first port in the\navailable PSC producer port range.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
"gcp:compute/RegionNetworkEndpointGroupServerlessDeployment:RegionNetworkEndpointGroupServerlessDeployment": {
"properties": {
"platform": {
@@ -43912,6 +44112,13 @@
"ruleVisibility": {
"type": "string",
"description": "Rule visibility. Supported values include: \"STANDARD\", \"PREMIUM\".\n"
+ },
+ "thresholdConfigs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:compute/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig:SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig"
+ },
+ "description": "Configuration options for layer7 adaptive protection for various customizable thresholds.\n"
}
},
"type": "object",
@@ -43923,6 +44130,73 @@
}
}
},
+ "gcp:compute/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig:SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig": {
+ "properties": {
+ "autoDeployConfidenceThreshold": {
+ "type": "number",
+ "description": "Confidence threshold above which Adaptive Protection's auto-deploy takes actions.\n"
+ },
+ "autoDeployExpirationSec": {
+ "type": "integer",
+ "description": "Duration over which Adaptive Protection's auto-deployed actions last.\n"
+ },
+ "autoDeployImpactedBaselineThreshold": {
+ "type": "number",
+ "description": "Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions.\n"
+ },
+ "autoDeployLoadThreshold": {
+ "type": "number",
+ "description": "Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack.\n"
+ },
+ "detectionAbsoluteQps": {
+ "type": "number",
+ "description": "Detection threshold based on absolute QPS.\n"
+ },
+ "detectionLoadThreshold": {
+ "type": "number",
+ "description": "Detection threshold based on the backend service's load.\n"
+ },
+ "detectionRelativeToBaselineQps": {
+ "type": "number",
+ "description": "Detection threshold based on QPS relative to the average of baseline traffic.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of config. The name must be 1-63 characters long, and comply with RFC1035. The name must be unique within the security policy.\n"
+ },
+ "trafficGranularityConfigs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:compute/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig:SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig"
+ },
+ "description": "Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "name"
+ ]
+ },
+ "gcp:compute/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig:SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig": {
+ "properties": {
+ "enableEachUniqueValue": {
+ "type": "boolean",
+ "description": "If enabled, traffic matching each unique value for the specified type constitutes a separate traffic unit. It can only be set to true if value is empty.\n"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of this configuration, a granular traffic unit can be one of the following:\n* `HTTP_HEADER_HOST`\n* `HTTP_PATH`\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "Requests that match this value constitute a granular traffic unit.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "type"
+ ]
+ },
"gcp:compute/SecurityPolicyAdvancedOptionsConfig:SecurityPolicyAdvancedOptionsConfig": {
"properties": {
"jsonCustomConfig": {
@@ -45169,7 +45443,7 @@
"properties": {
"defaultCustomErrorResponsePolicy": {
"$ref": "#/types/gcp:compute/URLMapPathMatcherDefaultCustomErrorResponsePolicy:URLMapPathMatcherDefaultCustomErrorResponsePolicy",
- "description": "defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.\nThis policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors\nA RouteRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in RouteRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\nWhen used in conjunction with pathMatcher.defaultRouteAction.retryPolicy, retries take precedence. Only once all retries are exhausted, the defaultCustomErrorResponsePolicy is applied. While attempting a retry, if load balancer is successful in reaching the service, the defaultCustomErrorResponsePolicy is ignored and the response from the service is returned to the client.\ndefaultCustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
+ "description": "defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.\nThis policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors\nA RouteRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in RouteRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\nWhen used in conjunction with pathMatcher.defaultRouteAction.retryPolicy, retries take precedence. Only once all retries are exhausted, the defaultCustomErrorResponsePolicy is applied. While attempting a retry, if load balancer is successful in reaching the service, the defaultCustomErrorResponsePolicy is ignored and the response from the service is returned to the client.\ndefaultCustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
},
"defaultRouteAction": {
"$ref": "#/types/gcp:compute/URLMapPathMatcherDefaultRouteAction:URLMapPathMatcherDefaultRouteAction",
@@ -45666,7 +45940,7 @@
"properties": {
"customErrorResponsePolicy": {
"$ref": "#/types/gcp:compute/URLMapPathMatcherPathRuleCustomErrorResponsePolicy:URLMapPathMatcherPathRuleCustomErrorResponsePolicy",
- "description": "customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.\nIf a policy for an error code is not configured for the PathRule, a policy for the error code configured in pathMatcher.defaultCustomErrorResponsePolicy is applied. If one is not specified in pathMatcher.defaultCustomErrorResponsePolicy, the policy configured in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy are configured with policies for 5xx and 4xx errors\nA PathRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in PathRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\ncustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
+ "description": "customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.\nIf a policy for an error code is not configured for the PathRule, a policy for the error code configured in pathMatcher.defaultCustomErrorResponsePolicy is applied. If one is not specified in pathMatcher.defaultCustomErrorResponsePolicy, the policy configured in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy are configured with policies for 5xx and 4xx errors\nA PathRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in PathRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\ncustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
},
"paths": {
"type": "array",
@@ -47965,7 +48239,7 @@
},
"region": {
"type": "string",
- "description": "The region you want to get the forwarding rules from.\n\nThese arguments must be set in either the provider or the resouce in order for the information to be queried.\n"
+ "description": "The region you want to get the forwarding rules from.\n\nThese arguments must be set in either the provider or the resource in order for the information to be queried.\n"
},
"selfLink": {
"type": "string",
@@ -48444,6 +48718,14 @@
"type": "boolean",
"description": "Whether to enable nested virtualization or not.\n"
},
+ "enableUefiNetworking": {
+ "type": "boolean",
+ "description": "Whether to enable UEFI networking for the instance.\n"
+ },
+ "performanceMonitoringUnit": {
+ "type": "string",
+ "description": "The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are \"STANDARD\", \"ENHANCED\", and \"ARCHITECTURAL\".\n"
+ },
"threadsPerCore": {
"type": "integer",
"description": "The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.\n"
@@ -48460,6 +48742,8 @@
"type": "object",
"required": [
"enableNestedVirtualization",
+ "enableUefiNetworking",
+ "performanceMonitoringUnit",
"threadsPerCore",
"turboMode",
"visibleCoreCount"
@@ -49221,7 +49505,7 @@
},
"nicType": {
"type": "string",
- "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF\n"
+ "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA\n"
},
"queueCount": {
"type": "integer",
@@ -49708,6 +49992,14 @@
"type": "boolean",
"description": "Whether to enable nested virtualization or not.\n"
},
+ "enableUefiNetworking": {
+ "type": "boolean",
+ "description": "Whether to enable UEFI networking or not.\n"
+ },
+ "performanceMonitoringUnit": {
+ "type": "string",
+ "description": "The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are \"STANDARD\", \"ENHANCED\", and \"ARCHITECTURAL\".\n"
+ },
"threadsPerCore": {
"type": "integer",
"description": "The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.\n"
@@ -49724,6 +50016,8 @@
"type": "object",
"required": [
"enableNestedVirtualization",
+ "enableUefiNetworking",
+ "performanceMonitoringUnit",
"threadsPerCore",
"turboMode",
"visibleCoreCount"
@@ -50022,7 +50316,7 @@
},
"nicType": {
"type": "string",
- "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET\n"
+ "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA\n"
},
"queueCount": {
"type": "integer",
@@ -51220,6 +51514,14 @@
"type": "boolean",
"description": "Whether to enable nested virtualization or not.\n"
},
+ "enableUefiNetworking": {
+ "type": "boolean",
+ "description": "Whether to enable UEFI networking or not.\n"
+ },
+ "performanceMonitoringUnit": {
+ "type": "string",
+ "description": "The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are \"STANDARD\", \"ENHANCED\", and \"ARCHITECTURAL\".\n"
+ },
"threadsPerCore": {
"type": "integer",
"description": "The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.\n"
@@ -51236,6 +51538,8 @@
"type": "object",
"required": [
"enableNestedVirtualization",
+ "enableUefiNetworking",
+ "performanceMonitoringUnit",
"threadsPerCore",
"turboMode",
"visibleCoreCount"
@@ -51529,7 +51833,7 @@
},
"nicType": {
"type": "string",
- "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET\n"
+ "description": "The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA\n"
},
"queueCount": {
"type": "integer",
@@ -52026,6 +52330,23 @@
}
}
},
+ "gcp:compute/getRegionNetworkEndpointGroupPscData:getRegionNetworkEndpointGroupPscData": {
+ "properties": {
+ "producerPort": {
+ "type": "string",
+ "description": "The PSC producer port to use when consumer PSC NEG connects to a producer. If\nthis flag isn't specified for a PSC NEG with endpoint type\nprivate-service-connect, then PSC NEG will be connected to a first port in the\navailable PSC producer port range.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "producerPort"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"gcp:compute/getRegionNetworkEndpointGroupServerlessDeployment:getRegionNetworkEndpointGroupServerlessDeployment": {
"properties": {
"platform": {
@@ -53041,12 +53362,99 @@
"ruleVisibility": {
"type": "string",
"description": "Rule visibility. Supported values include: \"STANDARD\", \"PREMIUM\".\n"
+ },
+ "thresholdConfigs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:compute/getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig:getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig"
+ },
+ "description": "Configuration options for layer7 adaptive protection for various customizable thresholds.\n"
}
},
"type": "object",
"required": [
"enable",
- "ruleVisibility"
+ "ruleVisibility",
+ "thresholdConfigs"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "gcp:compute/getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig:getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig": {
+ "properties": {
+ "autoDeployConfidenceThreshold": {
+ "type": "number"
+ },
+ "autoDeployExpirationSec": {
+ "type": "integer"
+ },
+ "autoDeployImpactedBaselineThreshold": {
+ "type": "number"
+ },
+ "autoDeployLoadThreshold": {
+ "type": "number"
+ },
+ "detectionAbsoluteQps": {
+ "type": "number"
+ },
+ "detectionLoadThreshold": {
+ "type": "number"
+ },
+ "detectionRelativeToBaselineQps": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the security policy. Provide either this or a `self_link`.\n"
+ },
+ "trafficGranularityConfigs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:compute/getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig:getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig"
+ }
+ }
+ },
+ "type": "object",
+ "required": [
+ "autoDeployConfidenceThreshold",
+ "autoDeployExpirationSec",
+ "autoDeployImpactedBaselineThreshold",
+ "autoDeployLoadThreshold",
+ "detectionAbsoluteQps",
+ "detectionLoadThreshold",
+ "detectionRelativeToBaselineQps",
+ "name",
+ "trafficGranularityConfigs"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
+ "gcp:compute/getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig:getSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig": {
+ "properties": {
+ "enableEachUniqueValue": {
+ "type": "boolean",
+ "description": "If enabled, traffic matching each unique value for the specified type constitutes a separate traffic unit. It can only be set to true if value is empty.\n"
+ },
+ "type": {
+ "type": "string",
+ "description": "Type of this configuration.\n"
+ },
+ "value": {
+ "type": "string",
+ "description": "Requests that match this value constitute a granular traffic unit.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "enableEachUniqueValue",
+ "type",
+ "value"
],
"language": {
"nodejs": {
@@ -55723,7 +56131,7 @@
},
"diskType": {
"type": "string",
- "description": "Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard`\n"
+ "description": "Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd', 'pd-balanced', or 'hyperdisk-balanced'). Defaults to `hyperdisk-balanced` if `hyperdisk-balanced` is supported and `pd-balanced` is not supported for the machine type; otherwise defaults to `pd-balanced`.\n"
},
"imageType": {
"type": "string",
@@ -56063,6 +56471,27 @@
"enabledApis"
]
},
+ "gcp:container/ClusterEnterpriseConfig:ClusterEnterpriseConfig": {
+ "properties": {
+ "clusterTier": {
+ "type": "string",
+ "description": "The effective tier of the cluster.\n"
+ },
+ "desiredTier": {
+ "type": "string",
+ "description": "Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`.\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "clusterTier",
+ "desiredTier"
+ ]
+ }
+ }
+ },
"gcp:container/ClusterFleet:ClusterFleet": {
"properties": {
"membership": {
@@ -56593,6 +57022,11 @@
"description": "The amount of local SSD disks that will be\nattached to each cluster node. Defaults to 0.\n",
"willReplaceOnChanges": true
},
+ "localSsdEncryptionMode": {
+ "type": "string",
+ "description": "Possible Local SSD encryption modes:\nAccepted values are:\n* `STANDARD_ENCRYPTION`: The given node will be encrypted using keys managed by Google infrastructure and the keys wll be deleted when the node is deleted.\n* `EPHEMERAL_KEY_ENCRYPTION`: The given node will opt-in for using ephemeral key for encrypting Local SSDs. The Local SSDs will not be able to recover data in case of node crash.\n",
+ "willReplaceOnChanges": true
+ },
"loggingVariant": {
"type": "string",
"description": "Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.\n"
@@ -57344,6 +57778,10 @@
},
"gcp:container/ClusterNodePoolAutoConfig:ClusterNodePoolAutoConfig": {
"properties": {
+ "linuxNodeConfig": {
+ "$ref": "#/types/gcp:container/ClusterNodePoolAutoConfigLinuxNodeConfig:ClusterNodePoolAutoConfigLinuxNodeConfig",
+ "description": "Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroup_mode` field is supported in `node_pool_auto_config`. Structure is documented below.\n"
+ },
"networkTags": {
"$ref": "#/types/gcp:container/ClusterNodePoolAutoConfigNetworkTags:ClusterNodePoolAutoConfigNetworkTags",
"description": "The network tag config for the cluster's automatically provisioned node pools. Structure is documented below.\n"
@@ -57369,6 +57807,22 @@
}
}
},
+ "gcp:container/ClusterNodePoolAutoConfigLinuxNodeConfig:ClusterNodePoolAutoConfigLinuxNodeConfig": {
+ "properties": {
+ "cgroupMode": {
+ "type": "string",
+ "description": "Possible cgroup modes that can be used.\nAccepted values are:\n* `CGROUP_MODE_UNSPECIFIED`: CGROUP_MODE_UNSPECIFIED is when unspecified cgroup configuration is used. The default for the GKE node OS image will be used.\n* `CGROUP_MODE_V1`: CGROUP_MODE_V1 specifies to use cgroupv1 for the cgroup configuration on the node image.\n* `CGROUP_MODE_V2`: CGROUP_MODE_V2 specifies to use cgroupv2 for the cgroup configuration on the node image.\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "cgroupMode"
+ ]
+ }
+ }
+ },
"gcp:container/ClusterNodePoolAutoConfigNetworkTags:ClusterNodePoolAutoConfigNetworkTags": {
"properties": {
"tags": {
@@ -57784,6 +58238,11 @@
"description": "The amount of local SSD disks that will be\nattached to each cluster node. Defaults to 0.\n",
"willReplaceOnChanges": true
},
+ "localSsdEncryptionMode": {
+ "type": "string",
+ "description": "Possible Local SSD encryption modes:\nAccepted values are:\n* `STANDARD_ENCRYPTION`: The given node will be encrypted using keys managed by Google infrastructure and the keys wll be deleted when the node is deleted.\n* `EPHEMERAL_KEY_ENCRYPTION`: The given node will opt-in for using ephemeral key for encrypting Local SSDs. The Local SSDs will not be able to recover data in case of node crash.\n",
+ "willReplaceOnChanges": true
+ },
"loggingVariant": {
"type": "string",
"description": "Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.\n"
@@ -59170,6 +59629,11 @@
"description": "The number of local SSD disks to be attached to the node.\n",
"willReplaceOnChanges": true
},
+ "localSsdEncryptionMode": {
+ "type": "string",
+ "description": "LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node.\n",
+ "willReplaceOnChanges": true
+ },
"loggingVariant": {
"type": "string",
"description": "Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT.\n"
@@ -60891,6 +61355,28 @@
}
}
},
+ "gcp:container/getClusterEnterpriseConfig:getClusterEnterpriseConfig": {
+ "properties": {
+ "clusterTier": {
+ "type": "string",
+ "description": "Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE.\n"
+ },
+ "desiredTier": {
+ "type": "string",
+ "description": "Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "clusterTier",
+ "desiredTier"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"gcp:container/getClusterFleet:getClusterFleet": {
"properties": {
"membership": {
@@ -61549,6 +62035,10 @@
"type": "integer",
"description": "The number of local SSD disks to be attached to the node.\n"
},
+ "localSsdEncryptionMode": {
+ "type": "string",
+ "description": "LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node.\n"
+ },
"loggingVariant": {
"type": "string",
"description": "Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT.\n"
@@ -61692,6 +62182,7 @@
"linuxNodeConfigs",
"localNvmeSsdBlockConfigs",
"localSsdCount",
+ "localSsdEncryptionMode",
"loggingVariant",
"machineType",
"metadata",
@@ -62476,6 +62967,13 @@
},
"gcp:container/getClusterNodePoolAutoConfig:getClusterNodePoolAutoConfig": {
"properties": {
+ "linuxNodeConfigs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:container/getClusterNodePoolAutoConfigLinuxNodeConfig:getClusterNodePoolAutoConfigLinuxNodeConfig"
+ },
+ "description": "Linux node configuration options.\n"
+ },
"networkTags": {
"type": "array",
"items": {
@@ -62500,6 +62998,7 @@
},
"type": "object",
"required": [
+ "linuxNodeConfigs",
"networkTags",
"nodeKubeletConfigs",
"resourceManagerTags"
@@ -62510,6 +63009,23 @@
}
}
},
+ "gcp:container/getClusterNodePoolAutoConfigLinuxNodeConfig:getClusterNodePoolAutoConfigLinuxNodeConfig": {
+ "properties": {
+ "cgroupMode": {
+ "type": "string",
+ "description": "cgroupMode specifies the cgroup mode to be used on the node.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "cgroupMode"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredInputs": []
+ }
+ }
+ },
"gcp:container/getClusterNodePoolAutoConfigNetworkTag:getClusterNodePoolAutoConfigNetworkTag": {
"properties": {
"tags": {
@@ -63048,6 +63564,10 @@
"type": "integer",
"description": "The number of local SSD disks to be attached to the node.\n"
},
+ "localSsdEncryptionMode": {
+ "type": "string",
+ "description": "LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node.\n"
+ },
"loggingVariant": {
"type": "string",
"description": "Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT.\n"
@@ -63191,6 +63711,7 @@
"linuxNodeConfigs",
"localNvmeSsdBlockConfigs",
"localSsdCount",
+ "localSsdEncryptionMode",
"loggingVariant",
"machineType",
"metadata",
@@ -74571,6 +75092,16 @@
},
"gcp:dataproc/BatchRuntimeConfig:BatchRuntimeConfig": {
"properties": {
+ "autotuningConfig": {
+ "$ref": "#/types/gcp:dataproc/BatchRuntimeConfigAutotuningConfig:BatchRuntimeConfigAutotuningConfig",
+ "description": "Optional. Autotuning configuration of the workload.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "cohort": {
+ "type": "string",
+ "description": "Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs.\n",
+ "willReplaceOnChanges": true
+ },
"containerImage": {
"type": "string",
"description": "Optional custom container image for the job runtime environment. If not specified, a default container image will be used.\n",
@@ -74607,6 +75138,19 @@
}
}
},
+ "gcp:dataproc/BatchRuntimeConfigAutotuningConfig:BatchRuntimeConfigAutotuningConfig": {
+ "properties": {
+ "scenarios": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Optional. Scenarios for which tunings are applied.\nEach value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
"gcp:dataproc/BatchRuntimeInfo:BatchRuntimeInfo": {
"properties": {
"approximateUsages": {
@@ -75213,6 +75757,10 @@
},
"gcp:dataproc/ClusterClusterConfigGceClusterConfig:ClusterClusterConfigGceClusterConfig": {
"properties": {
+ "confidentialInstanceConfig": {
+ "$ref": "#/types/gcp:dataproc/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig:ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig",
+ "description": "Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute)\n"
+ },
"internalIpOnly": {
"type": "boolean",
"description": "By default, clusters are not restricted to internal IP addresses,\nand will have ephemeral external IP addresses assigned to each instance. If set to true, all\ninstances in the cluster will only have internal IP addresses. Note: Private Google Access\n(also known as `privateIpGoogleAccess`) must be enabled on the subnetwork that the cluster\nwill be launched in.\n",
@@ -75279,6 +75827,7 @@
"language": {
"nodejs": {
"requiredOutputs": [
+ "confidentialInstanceConfig",
"network",
"nodeGroupAffinity",
"reservationAffinity",
@@ -75289,6 +75838,16 @@
}
}
},
+ "gcp:dataproc/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig:ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig": {
+ "properties": {
+ "enableConfidentialCompute": {
+ "type": "boolean",
+ "description": "Defines whether the instance should have confidential compute enabled.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
"gcp:dataproc/ClusterClusterConfigGceClusterConfigNodeGroupAffinity:ClusterClusterConfigGceClusterConfigNodeGroupAffinity": {
"properties": {
"nodeGroupUri": {
@@ -75596,6 +76155,11 @@
"$ref": "#/types/gcp:dataproc/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResult:ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResult"
},
"description": "A list of instance selection results in the group.\n"
+ },
+ "provisioningModelMix": {
+ "$ref": "#/types/gcp:dataproc/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix:ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix",
+ "description": "Defines how Dataproc should create VMs with a mixture of provisioning models.\n",
+ "willReplaceOnChanges": true
}
},
"type": "object",
@@ -75655,6 +76219,21 @@
}
}
},
+ "gcp:dataproc/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix:ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix": {
+ "properties": {
+ "standardCapacityBase": {
+ "type": "integer",
+ "description": "The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need.\n",
+ "willReplaceOnChanges": true
+ },
+ "standardCapacityPercentAboveBase": {
+ "type": "integer",
+ "description": "The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
"gcp:dataproc/ClusterClusterConfigSecurityConfig:ClusterClusterConfigSecurityConfig": {
"properties": {
"kerberosConfig": {
@@ -81745,7 +82324,7 @@
},
"useTimeoutBasedEndpointing": {
"type": "boolean",
- "description": "Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value.\n"
+ "description": "Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value.\n"
}
},
"type": "object"
@@ -87766,6 +88345,65 @@
}
}
},
+ "gcp:gemini/RepositoryGroupIamBindingCondition:RepositoryGroupIamBindingCondition": {
+ "properties": {
+ "description": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "expression": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "title": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "expression",
+ "title"
+ ]
+ },
+ "gcp:gemini/RepositoryGroupIamMemberCondition:RepositoryGroupIamMemberCondition": {
+ "properties": {
+ "description": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "expression": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "title": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "expression",
+ "title"
+ ]
+ },
+ "gcp:gemini/RepositoryGroupRepository:RepositoryGroupRepository": {
+ "properties": {
+ "branchPattern": {
+ "type": "string",
+ "description": "Required. The Git branch pattern used for indexing in RE2 syntax.\nSee https://github.com/google/re2/wiki/syntax for syntax.\n\n- - -\n"
+ },
+ "resource": {
+ "type": "string",
+ "description": "Required. The DeveloperConnect repository full resource name, relative resource name\nor resource URL to be indexed.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "branchPattern",
+ "resource"
+ ]
+ },
"gcp:gkebackup/BackupPlanBackupConfig:BackupPlanBackupConfig": {
"properties": {
"allNamespaces": {
@@ -88826,7 +89464,7 @@
"properties": {
"installation": {
"type": "string",
- "description": "Configures the manner in which the template library is installed on the cluster.\nPossible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`.\n"
+ "description": "Configures the manner in which the template library is installed on the cluster.\nPossible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`.\n"
}
},
"type": "object"
@@ -88932,7 +89570,7 @@
},
"metricsGcpServiceAccountEmail": {
"type": "string",
- "description": "The Email of the Google Cloud Service Account (GSA) used for exporting Config Sync metrics to Cloud Monitoring. The GSA should have the Monitoring Metric Writer(roles/monitoring.metricWriter) IAM role. The Kubernetes ServiceAccount `default` in the namespace `config-management-monitoring` should be bound to the GSA.\n"
+ "description": "Deprecated: If Workload Identity Federation for GKE is enabled, Google Cloud Service Account is no longer needed for exporting Config Sync metrics: https://cloud.google.com/kubernetes-engine/enterprise/config-sync/docs/how-to/monitor-config-sync-cloud-monitoring#custom-monitoring.\n"
},
"oci": {
"$ref": "#/types/gcp:gkehub/FeatureMembershipConfigmanagementConfigSyncOci:FeatureMembershipConfigmanagementConfigSyncOci",
@@ -88940,11 +89578,15 @@
},
"preventDrift": {
"type": "boolean",
- "description": "Supported from Config Sync versions 1.10.0 onwards. Set to true to enable the Config Sync admission webhook to prevent drifts. If set to \"false\", disables the Config Sync admission webhook and does not prevent drifts.\n"
+ "description": "Supported from Config Sync versions 1.10.0 onwards. Set to `true` to enable the Config Sync admission webhook to prevent drifts. If set to `false`, disables the Config Sync admission webhook and does not prevent drifts.\n"
},
"sourceFormat": {
"type": "string",
"description": "Specifies whether the Config Sync Repo is in \"hierarchical\" or \"unstructured\" mode.\n"
+ },
+ "stopSyncing": {
+ "type": "boolean",
+ "description": "Set to `true` to stop syncing configurations for a single cluster. This field is only available on clusters using Config Sync [auto-upgrades](http://cloud/kubernetes-engine/enterprise/config-sync/docs/how-to/upgrade-config-sync#auto-upgrade-config) or on Config Sync version 1.20.0 or later. Defaults: `false`.\n"
}
},
"type": "object",
@@ -93168,6 +93810,37 @@
"resources"
]
},
+ "gcp:iam/ProjectsPolicyBindingCondition:ProjectsPolicyBindingCondition": {
+ "properties": {
+ "description": {
+ "type": "string",
+ "description": "Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n"
+ },
+ "expression": {
+ "type": "string",
+ "description": "Textual representation of an expression in Common Expression Language syntax.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file.\n"
+ },
+ "title": {
+ "type": "string",
+ "description": "Optional. Title for the expression, i.e. a short string describing its purpose. This can be used e.g. in UIs which allow to enter the expression.\n"
+ }
+ },
+ "type": "object"
+ },
+ "gcp:iam/ProjectsPolicyBindingTarget:ProjectsPolicyBindingTarget": {
+ "properties": {
+ "principalSet": {
+ "type": "string",
+ "description": "Required. Immutable. The resource name of the policy to be bound.\nThe binding parent and policy must belong to the same Organization (or Project).\n\n- - -\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
"gcp:iam/WorkforcePoolAccessRestrictions:WorkforcePoolAccessRestrictions": {
"properties": {
"allowedServices": {
@@ -94958,7 +95631,7 @@
},
"encryptionKeyValue": {
"$ref": "#/types/gcp:integrationconnectors/ConnectionAuthConfigAdditionalVariableEncryptionKeyValue:ConnectionAuthConfigAdditionalVariableEncryptionKeyValue",
- "description": "Encription key value of configVariable.\nStructure is documented below.\n"
+ "description": "Encryption key value of configVariable.\nStructure is documented below.\n"
},
"integerValue": {
"type": "integer",
@@ -95204,7 +95877,7 @@
},
"encryptionKeyValue": {
"$ref": "#/types/gcp:integrationconnectors/ConnectionConfigVariableEncryptionKeyValue:ConnectionConfigVariableEncryptionKeyValue",
- "description": "Encription key value of configVariable.\nStructure is documented below.\n"
+ "description": "Encryption key value of configVariable.\nStructure is documented below.\n"
},
"integerValue": {
"type": "integer",
@@ -95343,7 +96016,7 @@
},
"encryptionKeyValue": {
"$ref": "#/types/gcp:integrationconnectors/ConnectionEventingConfigAdditionalVariableEncryptionKeyValue:ConnectionEventingConfigAdditionalVariableEncryptionKeyValue",
- "description": "Encription key value of configVariable.\nStructure is documented below.\n"
+ "description": "Encryption key value of configVariable.\nStructure is documented below.\n"
},
"integerValue": {
"type": "integer",
@@ -95428,7 +96101,7 @@
},
"encryptionKeyValue": {
"$ref": "#/types/gcp:integrationconnectors/ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValue:ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValue",
- "description": "Encription key value of configVariable.\nStructure is documented below.\n"
+ "description": "Encryption key value of configVariable.\nStructure is documented below.\n"
},
"integerValue": {
"type": "integer",
@@ -95687,7 +96360,7 @@
},
"encryptionKeyValue": {
"$ref": "#/types/gcp:integrationconnectors/ConnectionSslConfigAdditionalVariableEncryptionKeyValue:ConnectionSslConfigAdditionalVariableEncryptionKeyValue",
- "description": "Encription key value of configVariable.\nStructure is documented below.\n"
+ "description": "Encryption key value of configVariable.\nStructure is documented below.\n"
},
"integerValue": {
"type": "integer",
@@ -98319,7 +98992,10 @@
"properties": {
"alertRule": {
"type": "string",
- "description": "The alerting rule name of this alert in the corresponding Prometheus\nconfiguration file.\nSome external tools may require this field to be populated correctly\nin order to refer to the original Prometheus configuration file.\nThe rule group name and the alert name are necessary to update the\nrelevant AlertPolicies in case the definition of the rule group changes\nin the future.\nThis field is optional. If this field is not empty, then it must be a\nvalid Prometheus label name.\n\n- - -\n"
+ "description": "The alerting rule name of this alert in the corresponding Prometheus\nconfiguration file.\nSome external tools may require this field to be populated correctly\nin order to refer to the original Prometheus configuration file.\nThe rule group name and the alert name are necessary to update the\nrelevant AlertPolicies in case the definition of the rule group changes\nin the future.\nThis field is optional. If this field is not empty, then it must be a\nvalid Prometheus label name.\n"
+ },
+ "disableMetricValidation": {
+ "type": "boolean"
},
"duration": {
"type": "string",
@@ -99376,7 +100052,7 @@
},
"allowedClients": {
"type": "string",
- "description": "Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses.\n"
+ "description": "Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses.\n"
},
"hasRootAccess": {
"type": "string",
@@ -100349,6 +101025,43 @@
"targetUri"
]
},
+ "gcp:networksecurity/MirroringDeploymentGroupConnectedEndpointGroup:MirroringDeploymentGroupConnectedEndpointGroup": {
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "(Output)\nOutput only. A connected mirroring endpoint group.\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "name"
+ ]
+ }
+ }
+ },
+ "gcp:networksecurity/MirroringEndpointGroupAssociationLocationsDetail:MirroringEndpointGroupAssociationLocationsDetail": {
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringEndpointGroupAssociation`.\n\n\n- - -\n"
+ },
+ "state": {
+ "type": "string",
+ "description": "(Output)\nOutput only. The association state in this location.\nPossible values:\nSTATE_UNSPECIFIED\nACTIVE\nOUT_OF_SYNC\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "location",
+ "state"
+ ]
+ }
+ }
+ },
"gcp:networksecurity/SecurityProfileThreatPreventionProfile:SecurityProfileThreatPreventionProfile": {
"properties": {
"severityOverrides": {
@@ -104716,6 +105429,9 @@
"type": "string",
"description": "The name of the Autonomous Database. The database name must be unique in\nthe project. The name must begin with a letter and can\ncontain a maximum of 30 alphanumeric characters.\n"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "The display name for the Autonomous Database. The name does not have to\nbe unique within your project.\n"
@@ -104777,6 +105493,7 @@
"cidr",
"createTime",
"database",
+ "deletionProtection",
"displayName",
"effectiveLabels",
"entitlementId",
@@ -105709,6 +106426,9 @@
"type": "string",
"description": "The date and time that the Exadata Infrastructure was created.\n"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "User friendly name for this resource.\n"
@@ -105767,6 +106487,7 @@
"required": [
"cloudExadataInfrastructureId",
"createTime",
+ "deletionProtection",
"displayName",
"effectiveLabels",
"entitlementId",
@@ -106272,6 +106993,9 @@
"type": "string",
"description": "The date and time that the VM cluster was created.\n"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "User friendly name for this resource.\n"
@@ -106336,6 +107060,7 @@
"cidr",
"cloudVmClusterId",
"createTime",
+ "deletionProtection",
"displayName",
"effectiveLabels",
"exadataInfrastructure",
@@ -111618,6 +112343,154 @@
}
}
},
+ "gcp:redis/ClusterCrossClusterReplicationConfig:ClusterCrossClusterReplicationConfig": {
+ "properties": {
+ "clusterRole": {
+ "type": "string",
+ "description": "The role of the cluster in cross cluster replication. Supported values are:\n1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes.\n1. `NONE`: This is an independent cluster that previously participated in cross cluster replication(either as a `PRIMARY` or `SECONDARY` cluster). It allows both reads and writes.\n1. `PRIMARY`: This cluster serves as the replication source for secondary clusters that are replicating from it. Any data written to it is automatically replicated to its secondary clusters. It allows both reads and writes.\n1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads.\nPossible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`.\n"
+ },
+ "memberships": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:redis/ClusterCrossClusterReplicationConfigMembership:ClusterCrossClusterReplicationConfigMembership"
+ },
+ "description": "(Output)\nAn output only view of all the member clusters participating in cross cluster replication. This field is populated for all the member clusters irrespective of their cluster role.\nStructure is documented below.\n"
+ },
+ "primaryCluster": {
+ "$ref": "#/types/gcp:redis/ClusterCrossClusterReplicationConfigPrimaryCluster:ClusterCrossClusterReplicationConfigPrimaryCluster",
+ "description": "Details of the primary cluster that is used as the replication source for this secondary cluster. This is allowed to be set only for clusters whose cluster role is of type `SECONDARY`.\nStructure is documented below.\n"
+ },
+ "secondaryClusters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:redis/ClusterCrossClusterReplicationConfigSecondaryCluster:ClusterCrossClusterReplicationConfigSecondaryCluster"
+ },
+ "description": "List of secondary clusters that are replicating from this primary cluster. This is allowed to be set only for clusters whose cluster role is of type `PRIMARY`.\nStructure is documented below.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "(Output)\nThe last time cross cluster replication config was updated.\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "memberships",
+ "updateTime"
+ ]
+ }
+ }
+ },
+ "gcp:redis/ClusterCrossClusterReplicationConfigMembership:ClusterCrossClusterReplicationConfigMembership": {
+ "properties": {
+ "primaryClusters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:redis/ClusterCrossClusterReplicationConfigMembershipPrimaryCluster:ClusterCrossClusterReplicationConfigMembershipPrimaryCluster"
+ },
+ "description": "Details of the primary cluster that is used as the replication source for all the secondary clusters.\n"
+ },
+ "secondaryClusters": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:redis/ClusterCrossClusterReplicationConfigMembershipSecondaryCluster:ClusterCrossClusterReplicationConfigMembershipSecondaryCluster"
+ },
+ "description": "List of secondary clusters that are replicating from the primary cluster.\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "primaryClusters",
+ "secondaryClusters"
+ ]
+ }
+ }
+ },
+ "gcp:redis/ClusterCrossClusterReplicationConfigMembershipPrimaryCluster:ClusterCrossClusterReplicationConfigMembershipPrimaryCluster": {
+ "properties": {
+ "cluster": {
+ "type": "string",
+ "description": "The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id}\n"
+ },
+ "uid": {
+ "type": "string",
+ "description": "(Output)\nThe unique id of the primary cluster.\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "cluster",
+ "uid"
+ ]
+ }
+ }
+ },
+ "gcp:redis/ClusterCrossClusterReplicationConfigMembershipSecondaryCluster:ClusterCrossClusterReplicationConfigMembershipSecondaryCluster": {
+ "properties": {
+ "cluster": {
+ "type": "string",
+ "description": "(Output)\nThe full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id}\n"
+ },
+ "uid": {
+ "type": "string",
+ "description": "(Output)\nThe unique id of the secondary cluster.\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "cluster",
+ "uid"
+ ]
+ }
+ }
+ },
+ "gcp:redis/ClusterCrossClusterReplicationConfigPrimaryCluster:ClusterCrossClusterReplicationConfigPrimaryCluster": {
+ "properties": {
+ "cluster": {
+ "type": "string",
+ "description": "The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id}\n"
+ },
+ "uid": {
+ "type": "string",
+ "description": "(Output)\nThe unique id of the primary cluster.\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "uid"
+ ]
+ }
+ }
+ },
+ "gcp:redis/ClusterCrossClusterReplicationConfigSecondaryCluster:ClusterCrossClusterReplicationConfigSecondaryCluster": {
+ "properties": {
+ "cluster": {
+ "type": "string",
+ "description": "(Output)\nThe full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id}\n"
+ },
+ "uid": {
+ "type": "string",
+ "description": "(Output)\nThe unique id of the secondary cluster.\n"
+ }
+ },
+ "type": "object",
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "uid"
+ ]
+ }
+ }
+ },
"gcp:redis/ClusterDiscoveryEndpoint:ClusterDiscoveryEndpoint": {
"properties": {
"address": {
@@ -111779,7 +112652,7 @@
"properties": {
"appendFsync": {
"type": "string",
- "description": "Optional. Available fsync modes.\n- NO - Do not explicilty call fsync(). Rely on OS defaults.\n- EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability.\n- ALWAYS - Call fsync() for earch write command.\nPossible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`.\n"
+ "description": "Optional. Available fsync modes.\n- NO - Do not explicitly call fsync(). Rely on OS defaults.\n- EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability.\n- ALWAYS - Call fsync() for earch write command.\nPossible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`.\n"
}
},
"type": "object",
@@ -120209,6 +121082,74 @@
"preemptible"
]
},
+ "gcp:tpu/V2QueuedResourceTpu:V2QueuedResourceTpu": {
+ "properties": {
+ "nodeSpecs": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:tpu/V2QueuedResourceTpuNodeSpec:V2QueuedResourceTpuNodeSpec"
+ },
+ "description": "The TPU node(s) being requested.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:tpu/V2QueuedResourceTpuNodeSpec:V2QueuedResourceTpuNodeSpec": {
+ "properties": {
+ "node": {
+ "$ref": "#/types/gcp:tpu/V2QueuedResourceTpuNodeSpecNode:V2QueuedResourceTpuNodeSpecNode",
+ "description": "The node.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "nodeId": {
+ "type": "string",
+ "description": "Unqualified node identifier used to identify the node in the project once provisioned.\n",
+ "willReplaceOnChanges": true
+ },
+ "parent": {
+ "type": "string",
+ "description": "The parent resource name.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "node",
+ "parent"
+ ]
+ },
+ "gcp:tpu/V2QueuedResourceTpuNodeSpecNode:V2QueuedResourceTpuNodeSpecNode": {
+ "properties": {
+ "acceleratorType": {
+ "type": "string",
+ "description": "TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'.\n",
+ "willReplaceOnChanges": true
+ },
+ "description": {
+ "type": "string",
+ "description": "Text description of the TPU.\n",
+ "willReplaceOnChanges": true
+ },
+ "runtimeVersion": {
+ "type": "string",
+ "description": "Runtime version for the TPU.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "runtimeVersion"
+ ],
+ "language": {
+ "nodejs": {
+ "requiredOutputs": [
+ "acceleratorType",
+ "runtimeVersion"
+ ]
+ }
+ }
+ },
"gcp:tpu/V2VmAcceleratorConfig:V2VmAcceleratorConfig": {
"properties": {
"topology": {
@@ -120218,7 +121159,7 @@
},
"type": {
"type": "string",
- "description": "Type of TPU.\nPossible values are: `V2`, `V3`, `V4`, `V5P`.\n",
+ "description": "Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type\n",
"willReplaceOnChanges": true
}
},
@@ -125779,553 +126720,559 @@
"firestoreCustomEndpoint": {
"type": "string"
},
- "gkeBackupCustomEndpoint": {
- "type": "string"
- },
- "gkeHub2CustomEndpoint": {
- "type": "string"
- },
- "gkeHubCustomEndpoint": {
- "type": "string"
- },
- "gkehubFeatureCustomEndpoint": {
- "type": "string"
- },
- "gkeonpremCustomEndpoint": {
- "type": "string"
- },
- "googlePartnerName": {
- "type": "string"
- },
- "healthcareCustomEndpoint": {
- "type": "string"
- },
- "iam2CustomEndpoint": {
- "type": "string"
- },
- "iam3CustomEndpoint": {
- "type": "string"
- },
- "iamBetaCustomEndpoint": {
- "type": "string"
- },
- "iamCredentialsCustomEndpoint": {
- "type": "string"
- },
- "iamCustomEndpoint": {
- "type": "string"
- },
- "iamWorkforcePoolCustomEndpoint": {
- "type": "string"
- },
- "iapCustomEndpoint": {
- "type": "string"
- },
- "identityPlatformCustomEndpoint": {
- "type": "string"
- },
- "impersonateServiceAccount": {
- "type": "string"
- },
- "impersonateServiceAccountDelegates": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "integrationConnectorsCustomEndpoint": {
- "type": "string"
- },
- "integrationsCustomEndpoint": {
- "type": "string"
- },
- "kmsCustomEndpoint": {
- "type": "string"
- },
- "loggingCustomEndpoint": {
- "type": "string"
- },
- "lookerCustomEndpoint": {
- "type": "string"
- },
- "managedKafkaCustomEndpoint": {
- "type": "string"
- },
- "memcacheCustomEndpoint": {
- "type": "string"
- },
- "memorystoreCustomEndpoint": {
- "type": "string"
- },
- "migrationCenterCustomEndpoint": {
- "type": "string"
- },
- "mlEngineCustomEndpoint": {
- "type": "string"
- },
- "monitoringCustomEndpoint": {
- "type": "string"
- },
- "netappCustomEndpoint": {
- "type": "string"
- },
- "networkConnectivityCustomEndpoint": {
- "type": "string"
- },
- "networkManagementCustomEndpoint": {
- "type": "string"
- },
- "networkSecurityCustomEndpoint": {
- "type": "string"
- },
- "networkServicesCustomEndpoint": {
- "type": "string"
- },
- "notebooksCustomEndpoint": {
- "type": "string"
- },
- "oracleDatabaseCustomEndpoint": {
- "type": "string"
- },
- "orgPolicyCustomEndpoint": {
- "type": "string"
- },
- "osConfigCustomEndpoint": {
- "type": "string"
- },
- "osLoginCustomEndpoint": {
- "type": "string"
- },
- "parallelstoreCustomEndpoint": {
- "type": "string"
- },
- "privatecaCustomEndpoint": {
- "type": "string"
- },
- "privilegedAccessManagerCustomEndpoint": {
- "type": "string"
- },
- "project": {
- "type": "string"
- },
- "publicCaCustomEndpoint": {
- "type": "string"
- },
- "pubsubCustomEndpoint": {
- "type": "string"
- },
- "pubsubLiteCustomEndpoint": {
- "type": "string"
- },
- "pulumiAttributionLabelAdditionStrategy": {
- "type": "string"
- },
- "recaptchaEnterpriseCustomEndpoint": {
- "type": "string"
- },
- "redisCustomEndpoint": {
- "type": "string"
- },
- "region": {
- "type": "string"
- },
- "requestReason": {
- "type": "string"
- },
- "requestTimeout": {
- "type": "string"
- },
- "resourceManagerCustomEndpoint": {
- "type": "string"
- },
- "resourceManagerV3CustomEndpoint": {
- "type": "string"
- },
- "runtimeConfigCustomEndpoint": {
- "type": "string"
- },
- "runtimeconfigCustomEndpoint": {
- "type": "string"
- },
- "scopes": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "secretManagerCustomEndpoint": {
- "type": "string"
- },
- "secretManagerRegionalCustomEndpoint": {
- "type": "string"
- },
- "secureSourceManagerCustomEndpoint": {
- "type": "string"
- },
- "securityCenterCustomEndpoint": {
- "type": "string"
- },
- "securityCenterManagementCustomEndpoint": {
- "type": "string"
- },
- "securityCenterV2CustomEndpoint": {
- "type": "string"
- },
- "securityScannerCustomEndpoint": {
- "type": "string"
- },
- "securitypostureCustomEndpoint": {
- "type": "string"
- },
- "serviceDirectoryCustomEndpoint": {
- "type": "string"
- },
- "serviceManagementCustomEndpoint": {
- "type": "string"
- },
- "serviceNetworkingCustomEndpoint": {
- "type": "string"
- },
- "serviceUsageCustomEndpoint": {
- "type": "string"
- },
- "siteVerificationCustomEndpoint": {
- "type": "string"
- },
- "sourceRepoCustomEndpoint": {
- "type": "string"
- },
- "spannerCustomEndpoint": {
- "type": "string"
- },
- "sqlCustomEndpoint": {
- "type": "string"
- },
- "storageCustomEndpoint": {
- "type": "string"
- },
- "storageInsightsCustomEndpoint": {
- "type": "string"
- },
- "storageTransferCustomEndpoint": {
- "type": "string"
- },
- "tagsCustomEndpoint": {
- "type": "string"
- },
- "tagsLocationCustomEndpoint": {
- "type": "string"
- },
- "tpuCustomEndpoint": {
- "type": "string"
- },
- "tpuV2CustomEndpoint": {
- "type": "string"
- },
- "transcoderCustomEndpoint": {
- "type": "string"
- },
- "universeDomain": {
- "type": "string"
- },
- "userProjectOverride": {
- "type": "boolean"
- },
- "vertexAiCustomEndpoint": {
- "type": "string"
- },
- "vmwareengineCustomEndpoint": {
- "type": "string"
- },
- "vpcAccessCustomEndpoint": {
- "type": "string"
- },
- "workbenchCustomEndpoint": {
- "type": "string"
- },
- "workflowsCustomEndpoint": {
- "type": "string"
- },
- "workstationsCustomEndpoint": {
- "type": "string"
- },
- "zone": {
- "type": "string"
- }
- },
- "inputProperties": {
- "accessApprovalCustomEndpoint": {
- "type": "string"
- },
- "accessContextManagerCustomEndpoint": {
- "type": "string"
- },
- "accessToken": {
- "type": "string",
- "secret": true
- },
- "activeDirectoryCustomEndpoint": {
- "type": "string"
- },
- "addPulumiAttributionLabel": {
- "type": "boolean"
- },
- "alloydbCustomEndpoint": {
- "type": "string"
- },
- "apiGatewayCustomEndpoint": {
- "type": "string"
- },
- "apigeeCustomEndpoint": {
- "type": "string"
- },
- "apikeysCustomEndpoint": {
- "type": "string"
- },
- "appEngineCustomEndpoint": {
- "type": "string"
- },
- "apphubCustomEndpoint": {
- "type": "string"
- },
- "artifactRegistryCustomEndpoint": {
- "type": "string"
- },
- "assuredWorkloadsCustomEndpoint": {
- "type": "string"
- },
- "backupDrCustomEndpoint": {
- "type": "string"
- },
- "batching": {
- "$ref": "#/types/gcp:index/ProviderBatching:ProviderBatching"
- },
- "beyondcorpCustomEndpoint": {
- "type": "string"
- },
- "bigQueryCustomEndpoint": {
- "type": "string"
- },
- "biglakeCustomEndpoint": {
- "type": "string"
- },
- "bigqueryAnalyticsHubCustomEndpoint": {
- "type": "string"
- },
- "bigqueryConnectionCustomEndpoint": {
- "type": "string"
- },
- "bigqueryDataTransferCustomEndpoint": {
- "type": "string"
- },
- "bigqueryDatapolicyCustomEndpoint": {
- "type": "string"
- },
- "bigqueryReservationCustomEndpoint": {
- "type": "string"
- },
- "bigtableCustomEndpoint": {
- "type": "string"
- },
- "billingCustomEndpoint": {
- "type": "string"
- },
- "billingProject": {
- "type": "string"
- },
- "binaryAuthorizationCustomEndpoint": {
- "type": "string"
- },
- "blockchainNodeEngineCustomEndpoint": {
- "type": "string"
- },
- "certificateManagerCustomEndpoint": {
- "type": "string"
- },
- "cloudAssetCustomEndpoint": {
- "type": "string"
- },
- "cloudBillingCustomEndpoint": {
- "type": "string"
- },
- "cloudBuildCustomEndpoint": {
- "type": "string"
- },
- "cloudBuildWorkerPoolCustomEndpoint": {
- "type": "string"
- },
- "cloudFunctionsCustomEndpoint": {
- "type": "string"
- },
- "cloudIdentityCustomEndpoint": {
- "type": "string"
- },
- "cloudIdsCustomEndpoint": {
- "type": "string"
- },
- "cloudQuotasCustomEndpoint": {
- "type": "string"
- },
- "cloudResourceManagerCustomEndpoint": {
- "type": "string"
- },
- "cloudRunCustomEndpoint": {
- "type": "string"
- },
- "cloudRunV2CustomEndpoint": {
- "type": "string"
- },
- "cloudSchedulerCustomEndpoint": {
- "type": "string"
- },
- "cloudTasksCustomEndpoint": {
- "type": "string"
- },
- "cloudbuildv2CustomEndpoint": {
- "type": "string"
- },
- "clouddeployCustomEndpoint": {
- "type": "string"
- },
- "clouddomainsCustomEndpoint": {
- "type": "string"
- },
- "cloudfunctions2CustomEndpoint": {
- "type": "string"
- },
- "composerCustomEndpoint": {
- "type": "string"
- },
- "computeCustomEndpoint": {
- "type": "string"
- },
- "containerAnalysisCustomEndpoint": {
- "type": "string"
- },
- "containerAttachedCustomEndpoint": {
- "type": "string"
- },
- "containerAwsCustomEndpoint": {
- "type": "string"
- },
- "containerAzureCustomEndpoint": {
- "type": "string"
- },
- "containerCustomEndpoint": {
- "type": "string"
- },
- "coreBillingCustomEndpoint": {
- "type": "string"
- },
- "credentials": {
- "type": "string"
- },
- "dataCatalogCustomEndpoint": {
- "type": "string"
- },
- "dataFusionCustomEndpoint": {
- "type": "string"
- },
- "dataLossPreventionCustomEndpoint": {
- "type": "string"
- },
- "dataPipelineCustomEndpoint": {
- "type": "string"
- },
- "databaseMigrationServiceCustomEndpoint": {
- "type": "string"
- },
- "dataflowCustomEndpoint": {
- "type": "string"
- },
- "dataformCustomEndpoint": {
- "type": "string"
- },
- "dataplexCustomEndpoint": {
- "type": "string"
- },
- "dataprocCustomEndpoint": {
- "type": "string"
- },
- "dataprocGdcCustomEndpoint": {
- "type": "string"
- },
- "dataprocMetastoreCustomEndpoint": {
- "type": "string"
- },
- "datastreamCustomEndpoint": {
- "type": "string"
- },
- "defaultLabels": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- }
- },
- "deploymentManagerCustomEndpoint": {
- "type": "string"
- },
- "developerConnectCustomEndpoint": {
- "type": "string"
- },
- "dialogflowCustomEndpoint": {
- "type": "string"
- },
- "dialogflowCxCustomEndpoint": {
- "type": "string"
- },
- "disableGooglePartnerName": {
- "type": "boolean"
- },
- "discoveryEngineCustomEndpoint": {
- "type": "string"
- },
- "dnsCustomEndpoint": {
- "type": "string"
- },
- "documentAiCustomEndpoint": {
- "type": "string"
- },
- "documentAiWarehouseCustomEndpoint": {
- "type": "string"
- },
- "edgecontainerCustomEndpoint": {
- "type": "string"
- },
- "edgenetworkCustomEndpoint": {
- "type": "string"
- },
- "essentialContactsCustomEndpoint": {
- "type": "string"
- },
- "eventarcCustomEndpoint": {
- "type": "string"
- },
- "filestoreCustomEndpoint": {
- "type": "string"
- },
- "firebaseAppCheckCustomEndpoint": {
- "type": "string"
- },
- "firebaseCustomEndpoint": {
- "type": "string"
- },
- "firebaseDatabaseCustomEndpoint": {
- "type": "string"
- },
- "firebaseExtensionsCustomEndpoint": {
- "type": "string"
- },
- "firebaseHostingCustomEndpoint": {
- "type": "string"
- },
- "firebaseStorageCustomEndpoint": {
- "type": "string"
- },
- "firebaserulesCustomEndpoint": {
- "type": "string"
- },
- "firestoreCustomEndpoint": {
+ "geminiCustomEndpoint": {
+ "type": "string"
+ },
+ "gkeBackupCustomEndpoint": {
+ "type": "string"
+ },
+ "gkeHub2CustomEndpoint": {
+ "type": "string"
+ },
+ "gkeHubCustomEndpoint": {
+ "type": "string"
+ },
+ "gkehubFeatureCustomEndpoint": {
+ "type": "string"
+ },
+ "gkeonpremCustomEndpoint": {
+ "type": "string"
+ },
+ "googlePartnerName": {
+ "type": "string"
+ },
+ "healthcareCustomEndpoint": {
+ "type": "string"
+ },
+ "iam2CustomEndpoint": {
+ "type": "string"
+ },
+ "iam3CustomEndpoint": {
+ "type": "string"
+ },
+ "iamBetaCustomEndpoint": {
+ "type": "string"
+ },
+ "iamCredentialsCustomEndpoint": {
+ "type": "string"
+ },
+ "iamCustomEndpoint": {
+ "type": "string"
+ },
+ "iamWorkforcePoolCustomEndpoint": {
+ "type": "string"
+ },
+ "iapCustomEndpoint": {
+ "type": "string"
+ },
+ "identityPlatformCustomEndpoint": {
+ "type": "string"
+ },
+ "impersonateServiceAccount": {
+ "type": "string"
+ },
+ "impersonateServiceAccountDelegates": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "integrationConnectorsCustomEndpoint": {
+ "type": "string"
+ },
+ "integrationsCustomEndpoint": {
+ "type": "string"
+ },
+ "kmsCustomEndpoint": {
+ "type": "string"
+ },
+ "loggingCustomEndpoint": {
+ "type": "string"
+ },
+ "lookerCustomEndpoint": {
+ "type": "string"
+ },
+ "managedKafkaCustomEndpoint": {
+ "type": "string"
+ },
+ "memcacheCustomEndpoint": {
+ "type": "string"
+ },
+ "memorystoreCustomEndpoint": {
+ "type": "string"
+ },
+ "migrationCenterCustomEndpoint": {
+ "type": "string"
+ },
+ "mlEngineCustomEndpoint": {
+ "type": "string"
+ },
+ "monitoringCustomEndpoint": {
+ "type": "string"
+ },
+ "netappCustomEndpoint": {
+ "type": "string"
+ },
+ "networkConnectivityCustomEndpoint": {
+ "type": "string"
+ },
+ "networkManagementCustomEndpoint": {
+ "type": "string"
+ },
+ "networkSecurityCustomEndpoint": {
+ "type": "string"
+ },
+ "networkServicesCustomEndpoint": {
+ "type": "string"
+ },
+ "notebooksCustomEndpoint": {
+ "type": "string"
+ },
+ "oracleDatabaseCustomEndpoint": {
+ "type": "string"
+ },
+ "orgPolicyCustomEndpoint": {
+ "type": "string"
+ },
+ "osConfigCustomEndpoint": {
+ "type": "string"
+ },
+ "osLoginCustomEndpoint": {
+ "type": "string"
+ },
+ "parallelstoreCustomEndpoint": {
+ "type": "string"
+ },
+ "privatecaCustomEndpoint": {
+ "type": "string"
+ },
+ "privilegedAccessManagerCustomEndpoint": {
+ "type": "string"
+ },
+ "project": {
+ "type": "string"
+ },
+ "publicCaCustomEndpoint": {
+ "type": "string"
+ },
+ "pubsubCustomEndpoint": {
+ "type": "string"
+ },
+ "pubsubLiteCustomEndpoint": {
+ "type": "string"
+ },
+ "pulumiAttributionLabelAdditionStrategy": {
+ "type": "string"
+ },
+ "recaptchaEnterpriseCustomEndpoint": {
+ "type": "string"
+ },
+ "redisCustomEndpoint": {
+ "type": "string"
+ },
+ "region": {
+ "type": "string"
+ },
+ "requestReason": {
+ "type": "string"
+ },
+ "requestTimeout": {
+ "type": "string"
+ },
+ "resourceManagerCustomEndpoint": {
+ "type": "string"
+ },
+ "resourceManagerV3CustomEndpoint": {
+ "type": "string"
+ },
+ "runtimeConfigCustomEndpoint": {
+ "type": "string"
+ },
+ "runtimeconfigCustomEndpoint": {
+ "type": "string"
+ },
+ "scopes": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "secretManagerCustomEndpoint": {
+ "type": "string"
+ },
+ "secretManagerRegionalCustomEndpoint": {
+ "type": "string"
+ },
+ "secureSourceManagerCustomEndpoint": {
+ "type": "string"
+ },
+ "securityCenterCustomEndpoint": {
+ "type": "string"
+ },
+ "securityCenterManagementCustomEndpoint": {
+ "type": "string"
+ },
+ "securityCenterV2CustomEndpoint": {
+ "type": "string"
+ },
+ "securityScannerCustomEndpoint": {
+ "type": "string"
+ },
+ "securitypostureCustomEndpoint": {
+ "type": "string"
+ },
+ "serviceDirectoryCustomEndpoint": {
+ "type": "string"
+ },
+ "serviceManagementCustomEndpoint": {
+ "type": "string"
+ },
+ "serviceNetworkingCustomEndpoint": {
+ "type": "string"
+ },
+ "serviceUsageCustomEndpoint": {
+ "type": "string"
+ },
+ "siteVerificationCustomEndpoint": {
+ "type": "string"
+ },
+ "sourceRepoCustomEndpoint": {
+ "type": "string"
+ },
+ "spannerCustomEndpoint": {
+ "type": "string"
+ },
+ "sqlCustomEndpoint": {
+ "type": "string"
+ },
+ "storageCustomEndpoint": {
+ "type": "string"
+ },
+ "storageInsightsCustomEndpoint": {
+ "type": "string"
+ },
+ "storageTransferCustomEndpoint": {
+ "type": "string"
+ },
+ "tagsCustomEndpoint": {
+ "type": "string"
+ },
+ "tagsLocationCustomEndpoint": {
+ "type": "string"
+ },
+ "tpuCustomEndpoint": {
+ "type": "string"
+ },
+ "tpuV2CustomEndpoint": {
+ "type": "string"
+ },
+ "transcoderCustomEndpoint": {
+ "type": "string"
+ },
+ "universeDomain": {
+ "type": "string"
+ },
+ "userProjectOverride": {
+ "type": "boolean"
+ },
+ "vertexAiCustomEndpoint": {
+ "type": "string"
+ },
+ "vmwareengineCustomEndpoint": {
+ "type": "string"
+ },
+ "vpcAccessCustomEndpoint": {
+ "type": "string"
+ },
+ "workbenchCustomEndpoint": {
+ "type": "string"
+ },
+ "workflowsCustomEndpoint": {
+ "type": "string"
+ },
+ "workstationsCustomEndpoint": {
+ "type": "string"
+ },
+ "zone": {
+ "type": "string"
+ }
+ },
+ "inputProperties": {
+ "accessApprovalCustomEndpoint": {
+ "type": "string"
+ },
+ "accessContextManagerCustomEndpoint": {
+ "type": "string"
+ },
+ "accessToken": {
+ "type": "string",
+ "secret": true
+ },
+ "activeDirectoryCustomEndpoint": {
+ "type": "string"
+ },
+ "addPulumiAttributionLabel": {
+ "type": "boolean"
+ },
+ "alloydbCustomEndpoint": {
+ "type": "string"
+ },
+ "apiGatewayCustomEndpoint": {
+ "type": "string"
+ },
+ "apigeeCustomEndpoint": {
+ "type": "string"
+ },
+ "apikeysCustomEndpoint": {
+ "type": "string"
+ },
+ "appEngineCustomEndpoint": {
+ "type": "string"
+ },
+ "apphubCustomEndpoint": {
+ "type": "string"
+ },
+ "artifactRegistryCustomEndpoint": {
+ "type": "string"
+ },
+ "assuredWorkloadsCustomEndpoint": {
+ "type": "string"
+ },
+ "backupDrCustomEndpoint": {
+ "type": "string"
+ },
+ "batching": {
+ "$ref": "#/types/gcp:index/ProviderBatching:ProviderBatching"
+ },
+ "beyondcorpCustomEndpoint": {
+ "type": "string"
+ },
+ "bigQueryCustomEndpoint": {
+ "type": "string"
+ },
+ "biglakeCustomEndpoint": {
+ "type": "string"
+ },
+ "bigqueryAnalyticsHubCustomEndpoint": {
+ "type": "string"
+ },
+ "bigqueryConnectionCustomEndpoint": {
+ "type": "string"
+ },
+ "bigqueryDataTransferCustomEndpoint": {
+ "type": "string"
+ },
+ "bigqueryDatapolicyCustomEndpoint": {
+ "type": "string"
+ },
+ "bigqueryReservationCustomEndpoint": {
+ "type": "string"
+ },
+ "bigtableCustomEndpoint": {
+ "type": "string"
+ },
+ "billingCustomEndpoint": {
+ "type": "string"
+ },
+ "billingProject": {
+ "type": "string"
+ },
+ "binaryAuthorizationCustomEndpoint": {
+ "type": "string"
+ },
+ "blockchainNodeEngineCustomEndpoint": {
+ "type": "string"
+ },
+ "certificateManagerCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudAssetCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudBillingCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudBuildCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudBuildWorkerPoolCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudFunctionsCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudIdentityCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudIdsCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudQuotasCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudResourceManagerCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudRunCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudRunV2CustomEndpoint": {
+ "type": "string"
+ },
+ "cloudSchedulerCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudTasksCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudbuildv2CustomEndpoint": {
+ "type": "string"
+ },
+ "clouddeployCustomEndpoint": {
+ "type": "string"
+ },
+ "clouddomainsCustomEndpoint": {
+ "type": "string"
+ },
+ "cloudfunctions2CustomEndpoint": {
+ "type": "string"
+ },
+ "composerCustomEndpoint": {
+ "type": "string"
+ },
+ "computeCustomEndpoint": {
+ "type": "string"
+ },
+ "containerAnalysisCustomEndpoint": {
+ "type": "string"
+ },
+ "containerAttachedCustomEndpoint": {
+ "type": "string"
+ },
+ "containerAwsCustomEndpoint": {
+ "type": "string"
+ },
+ "containerAzureCustomEndpoint": {
+ "type": "string"
+ },
+ "containerCustomEndpoint": {
+ "type": "string"
+ },
+ "coreBillingCustomEndpoint": {
+ "type": "string"
+ },
+ "credentials": {
+ "type": "string"
+ },
+ "dataCatalogCustomEndpoint": {
+ "type": "string"
+ },
+ "dataFusionCustomEndpoint": {
+ "type": "string"
+ },
+ "dataLossPreventionCustomEndpoint": {
+ "type": "string"
+ },
+ "dataPipelineCustomEndpoint": {
+ "type": "string"
+ },
+ "databaseMigrationServiceCustomEndpoint": {
+ "type": "string"
+ },
+ "dataflowCustomEndpoint": {
+ "type": "string"
+ },
+ "dataformCustomEndpoint": {
+ "type": "string"
+ },
+ "dataplexCustomEndpoint": {
+ "type": "string"
+ },
+ "dataprocCustomEndpoint": {
+ "type": "string"
+ },
+ "dataprocGdcCustomEndpoint": {
+ "type": "string"
+ },
+ "dataprocMetastoreCustomEndpoint": {
+ "type": "string"
+ },
+ "datastreamCustomEndpoint": {
+ "type": "string"
+ },
+ "defaultLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "deploymentManagerCustomEndpoint": {
+ "type": "string"
+ },
+ "developerConnectCustomEndpoint": {
+ "type": "string"
+ },
+ "dialogflowCustomEndpoint": {
+ "type": "string"
+ },
+ "dialogflowCxCustomEndpoint": {
+ "type": "string"
+ },
+ "disableGooglePartnerName": {
+ "type": "boolean"
+ },
+ "discoveryEngineCustomEndpoint": {
+ "type": "string"
+ },
+ "dnsCustomEndpoint": {
+ "type": "string"
+ },
+ "documentAiCustomEndpoint": {
+ "type": "string"
+ },
+ "documentAiWarehouseCustomEndpoint": {
+ "type": "string"
+ },
+ "edgecontainerCustomEndpoint": {
+ "type": "string"
+ },
+ "edgenetworkCustomEndpoint": {
+ "type": "string"
+ },
+ "essentialContactsCustomEndpoint": {
+ "type": "string"
+ },
+ "eventarcCustomEndpoint": {
+ "type": "string"
+ },
+ "filestoreCustomEndpoint": {
+ "type": "string"
+ },
+ "firebaseAppCheckCustomEndpoint": {
+ "type": "string"
+ },
+ "firebaseCustomEndpoint": {
+ "type": "string"
+ },
+ "firebaseDatabaseCustomEndpoint": {
+ "type": "string"
+ },
+ "firebaseExtensionsCustomEndpoint": {
+ "type": "string"
+ },
+ "firebaseHostingCustomEndpoint": {
+ "type": "string"
+ },
+ "firebaseStorageCustomEndpoint": {
+ "type": "string"
+ },
+ "firebaserulesCustomEndpoint": {
+ "type": "string"
+ },
+ "firestoreCustomEndpoint": {
+ "type": "string"
+ },
+ "geminiCustomEndpoint": {
"type": "string"
},
"gkeBackupCustomEndpoint": {
@@ -127595,6 +128542,10 @@
"type": "string",
"description": "Description of the ServicePerimeter and its use. Does not affect\nbehavior.\n"
},
+ "etag": {
+ "type": "string",
+ "description": "An opaque identifier for the current version of the ServicePerimeter. This\nidentifier does not follow any specific format. If an etag is not provided, the\noperation will be performed as if a valid etag is provided.\n"
+ },
"name": {
"type": "string",
"description": "Resource name for the ServicePerimeter. The short_name component must\nbegin with a letter and only include alphanumeric and '_'.\nFormat: accessPolicies/{policy_id}/servicePerimeters/{short_name}\n\n\n- - -\n"
@@ -127630,6 +128581,7 @@
},
"required": [
"createTime",
+ "etag",
"name",
"parent",
"title",
@@ -127687,6 +128639,10 @@
"type": "string",
"description": "Description of the ServicePerimeter and its use. Does not affect\nbehavior.\n"
},
+ "etag": {
+ "type": "string",
+ "description": "An opaque identifier for the current version of the ServicePerimeter. This\nidentifier does not follow any specific format. If an etag is not provided, the\noperation will be performed as if a valid etag is provided.\n"
+ },
"name": {
"type": "string",
"description": "Resource name for the ServicePerimeter. The short_name component must\nbegin with a letter and only include alphanumeric and '_'.\nFormat: accessPolicies/{policy_id}/servicePerimeters/{short_name}\n\n\n- - -\n",
@@ -127727,7 +128683,7 @@
}
},
"gcp:accesscontextmanager/servicePerimeterDryRunEgressPolicy:ServicePerimeterDryRunEgressPolicy": {
- "description": "Manage a single EgressPolicy in the spec (dry-run) configuration for a service perimeter.\nEgressPolicies match requests based on egressFrom and egressTo stanzas.\nFor an EgressPolicy to match, both egressFrom and egressTo stanzas must be matched.\nIf an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter\nboundary. For example, an EgressPolicy can be used to allow VMs on networks\nwithin the ServicePerimeter to access a defined set of projects outside the\nperimeter in certain contexts (e.g. to read data from a Cloud Storage bucket\nor query against a BigQuery dataset).\n\n\u003e **Note:** By default, updates to this resource will remove the EgressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new EgressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\n\nTo get more information about ServicePerimeterDryRunEgressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#egresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n",
+ "description": "Manage a single EgressPolicy in the spec (dry-run) configuration for a service perimeter.\nEgressPolicies match requests based on egressFrom and egressTo stanzas.\nFor an EgressPolicy to match, both egressFrom and egressTo stanzas must be matched.\nIf an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter\nboundary. For example, an EgressPolicy can be used to allow VMs on networks\nwithin the ServicePerimeter to access a defined set of projects outside the\nperimeter in certain contexts (e.g. to read data from a Cloud Storage bucket\nor query against a BigQuery dataset).\n\n\u003e **Note:** By default, updates to this resource will remove the EgressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new EgressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,\nthe service perimeter resource must have a `lifecycle` block with `ignore_changes = [spec[0].egress_policies]` so\nthey don't fight over which egress rules should be in the policy.\n\n\nTo get more information about ServicePerimeterDryRunEgressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#egresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n",
"properties": {
"egressFrom": {
"$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressFrom:ServicePerimeterDryRunEgressPolicyEgressFrom",
@@ -127788,7 +128744,7 @@
}
},
"gcp:accesscontextmanager/servicePerimeterDryRunIngressPolicy:ServicePerimeterDryRunIngressPolicy": {
- "description": "Manage a single IngressPolicy in the spec (dry-run) configuration for a service perimeter.\nIngressPolicies match requests based on ingressFrom and ingressTo stanzas. For an ingress policy to match,\nboth the ingressFrom and ingressTo stanzas must be matched. If an IngressPolicy matches a request,\nthe request is allowed through the perimeter boundary from outside the perimeter.\nFor example, access from the internet can be allowed either based on an AccessLevel or,\nfor traffic hosted on Google Cloud, the project of the source network.\nFor access from private networks, using the project of the hosting network is required.\nIndividual ingress policies can be limited by restricting which services and/\nor actions they match using the ingressTo field.\n\n\u003e **Note:** By default, updates to this resource will remove the IngressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new IngressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\n\nTo get more information about ServicePerimeterDryRunIngressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#ingresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n",
+ "description": "Manage a single IngressPolicy in the spec (dry-run) configuration for a service perimeter.\nIngressPolicies match requests based on ingressFrom and ingressTo stanzas. For an ingress policy to match,\nboth the ingressFrom and ingressTo stanzas must be matched. If an IngressPolicy matches a request,\nthe request is allowed through the perimeter boundary from outside the perimeter.\nFor example, access from the internet can be allowed either based on an AccessLevel or,\nfor traffic hosted on Google Cloud, the project of the source network.\nFor access from private networks, using the project of the hosting network is required.\nIndividual ingress policies can be limited by restricting which services and/\nor actions they match using the ingressTo field.\n\n\u003e **Note:** By default, updates to this resource will remove the IngressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new IngressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,\nthe service perimeter resource must have a `lifecycle` block with `ignore_changes = [spec[0].ingress_policies]` so\nthey don't fight over which ingress rules should be in the policy.\n\n\nTo get more information about ServicePerimeterDryRunIngressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#ingresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n",
"properties": {
"ingressFrom": {
"$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressFrom:ServicePerimeterDryRunIngressPolicyIngressFrom",
@@ -127898,7 +128854,7 @@
}
},
"gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy": {
- "description": "Manage a single EgressPolicy in the status (enforced) configuration for a service perimeter.\nEgressPolicies match requests based on egressFrom and egressTo stanzas.\nFor an EgressPolicy to match, both egressFrom and egressTo stanzas must be matched.\nIf an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter\nboundary. For example, an EgressPolicy can be used to allow VMs on networks\nwithin the ServicePerimeter to access a defined set of projects outside the\nperimeter in certain contexts (e.g. to read data from a Cloud Storage bucket\nor query against a BigQuery dataset).\n\n\u003e **Note:** By default, updates to this resource will remove the EgressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new EgressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\n\nTo get more information about ServicePerimeterEgressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#egresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n",
+ "description": "Manage a single EgressPolicy in the status (enforced) configuration for a service perimeter.\nEgressPolicies match requests based on egressFrom and egressTo stanzas.\nFor an EgressPolicy to match, both egressFrom and egressTo stanzas must be matched.\nIf an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter\nboundary. For example, an EgressPolicy can be used to allow VMs on networks\nwithin the ServicePerimeter to access a defined set of projects outside the\nperimeter in certain contexts (e.g. to read data from a Cloud Storage bucket\nor query against a BigQuery dataset).\n\n\u003e **Note:** By default, updates to this resource will remove the EgressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new EgressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,\nthe service perimeter resource must have a `lifecycle` block with `ignore_changes = [status[0].egress_policies]` so\nthey don't fight over which egress rules should be in the policy.\n\n\nTo get more information about ServicePerimeterEgressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#egresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n",
"properties": {
"egressFrom": {
"$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterEgressPolicyEgressFrom:ServicePerimeterEgressPolicyEgressFrom",
@@ -127959,7 +128915,7 @@
}
},
"gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy": {
- "description": "Manage a single IngressPolicy in the status (enforced) configuration for a service perimeter.\nIngressPolicies match requests based on ingressFrom and ingressTo stanzas. For an ingress policy to match,\nboth the ingressFrom and ingressTo stanzas must be matched. If an IngressPolicy matches a request,\nthe request is allowed through the perimeter boundary from outside the perimeter.\nFor example, access from the internet can be allowed either based on an AccessLevel or,\nfor traffic hosted on Google Cloud, the project of the source network.\nFor access from private networks, using the project of the hosting network is required.\nIndividual ingress policies can be limited by restricting which services and/\nor actions they match using the ingressTo field.\n\n\u003e **Note:** By default, updates to this resource will remove the IngressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new IngressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\n\nTo get more information about ServicePerimeterIngressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#ingresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n",
+ "description": "Manage a single IngressPolicy in the status (enforced) configuration for a service perimeter.\nIngressPolicies match requests based on ingressFrom and ingressTo stanzas. For an ingress policy to match,\nboth the ingressFrom and ingressTo stanzas must be matched. If an IngressPolicy matches a request,\nthe request is allowed through the perimeter boundary from outside the perimeter.\nFor example, access from the internet can be allowed either based on an AccessLevel or,\nfor traffic hosted on Google Cloud, the project of the source network.\nFor access from private networks, using the project of the hosting network is required.\nIndividual ingress policies can be limited by restricting which services and/\nor actions they match using the ingressTo field.\n\n\u003e **Note:** By default, updates to this resource will remove the IngressPolicy from the\nfrom the perimeter and add it back in a non-atomic manner. To ensure that the new IngressPolicy\nis added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.\n\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,\nthe service perimeter resource must have a `lifecycle` block with `ignore_changes = [status[0].ingress_policies]` so\nthey don't fight over which ingress rules should be in the policy.\n\n\nTo get more information about ServicePerimeterIngressPolicy, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#ingresspolicy)\n* How-to Guides\n * [Guide to Ingress and Egress Rules](https://cloud.google.com/vpc-service-controls/docs/ingress-egress-rules)\n\n## Example Usage\n\n",
"properties": {
"ingressFrom": {
"$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterIngressPolicyIngressFrom:ServicePerimeterIngressPolicyIngressFrom",
@@ -131612,7 +132568,7 @@
},
"channelId": {
"type": "string",
- "description": "Channel identifier identifies the owner maintaing this grouping.\n"
+ "description": "Channel identifier identifies the owner maintaining this grouping.\n"
},
"channelUri": {
"type": "string",
@@ -131665,7 +132621,7 @@
},
"channelId": {
"type": "string",
- "description": "Channel identifier identifies the owner maintaing this grouping.\n"
+ "description": "Channel identifier identifies the owner maintaining this grouping.\n"
},
"channelUri": {
"type": "string",
@@ -131709,7 +132665,7 @@
},
"channelId": {
"type": "string",
- "description": "Channel identifier identifies the owner maintaing this grouping.\n"
+ "description": "Channel identifier identifies the owner maintaining this grouping.\n"
},
"channelUri": {
"type": "string",
@@ -136571,7 +137527,7 @@
}
},
"gcp:applicationintegration/client:Client": {
- "description": "Application Integration Client.\n\n\nTo get more information about Client, see:\n\n* [API documentation](https://cloud.google.com/application-integration/docs/reference/rest/v1/projects.locations.clients)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/application-integration/docs/overview)\n * [Set up Application Integration](https://cloud.google.com/application-integration/docs/setup-application-integration)\n\n## Example Usage\n\n### Integrations Client Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.applicationintegration.Client(\"example\", {location: \"us-central1\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.applicationintegration.Client(\"example\", location=\"us-central1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.ApplicationIntegration.Client(\"example\", new()\n {\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := applicationintegration.NewClient(ctx, \"example\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Client(\"example\", ClientArgs.builder()\n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:applicationintegration:Client\n properties:\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Integrations Client Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst testProject = gcp.organizations.getProject({});\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {\n name: \"my-keyring\",\n location: \"us-east1\",\n});\nconst cryptokey = new gcp.kms.CryptoKey(\"cryptokey\", {\n name: \"crypto-key-example\",\n keyRing: keyring.id,\n rotationPeriod: \"7776000s\",\n});\nconst testKey = new gcp.kms.CryptoKeyVersion(\"test_key\", {cryptoKey: cryptokey.id});\nconst serviceAccount = new gcp.serviceaccount.Account(\"service_account\", {\n accountId: \"service-acc\",\n displayName: \"Service Account\",\n});\nconst example = new gcp.applicationintegration.Client(\"example\", {\n location: \"us-east1\",\n createSampleIntegrations: true,\n runAsServiceAccount: serviceAccount.email,\n cloudKmsConfig: {\n kmsLocation: \"us-east1\",\n kmsRing: keyring.id,\n key: cryptokey.id,\n keyVersion: testKey.id,\n kmsProjectId: testProject.then(testProject =\u003e testProject.projectId),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_project = gcp.organizations.get_project()\nkeyring = gcp.kms.KeyRing(\"keyring\",\n name=\"my-keyring\",\n location=\"us-east1\")\ncryptokey = gcp.kms.CryptoKey(\"cryptokey\",\n name=\"crypto-key-example\",\n key_ring=keyring.id,\n rotation_period=\"7776000s\")\ntest_key = gcp.kms.CryptoKeyVersion(\"test_key\", crypto_key=cryptokey.id)\nservice_account = gcp.serviceaccount.Account(\"service_account\",\n account_id=\"service-acc\",\n display_name=\"Service Account\")\nexample = gcp.applicationintegration.Client(\"example\",\n location=\"us-east1\",\n create_sample_integrations=True,\n run_as_service_account=service_account.email,\n cloud_kms_config={\n \"kms_location\": \"us-east1\",\n \"kms_ring\": keyring.id,\n \"key\": cryptokey.id,\n \"key_version\": test_key.id,\n \"kms_project_id\": test_project.project_id,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Name = \"my-keyring\",\n Location = \"us-east1\",\n });\n\n var cryptokey = new Gcp.Kms.CryptoKey(\"cryptokey\", new()\n {\n Name = \"crypto-key-example\",\n KeyRing = keyring.Id,\n RotationPeriod = \"7776000s\",\n });\n\n var testKey = new Gcp.Kms.CryptoKeyVersion(\"test_key\", new()\n {\n CryptoKey = cryptokey.Id,\n });\n\n var serviceAccount = new Gcp.ServiceAccount.Account(\"service_account\", new()\n {\n AccountId = \"service-acc\",\n DisplayName = \"Service Account\",\n });\n\n var example = new Gcp.ApplicationIntegration.Client(\"example\", new()\n {\n Location = \"us-east1\",\n CreateSampleIntegrations = true,\n RunAsServiceAccount = serviceAccount.Email,\n CloudKmsConfig = new Gcp.ApplicationIntegration.Inputs.ClientCloudKmsConfigArgs\n {\n KmsLocation = \"us-east1\",\n KmsRing = keyring.Id,\n Key = cryptokey.Id,\n KeyVersion = testKey.Id,\n KmsProjectId = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"my-keyring\"),\n\t\t\tLocation: pulumi.String(\"us-east1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptokey, err := kms.NewCryptoKey(ctx, \"cryptokey\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"crypto-key-example\"),\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"7776000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestKey, err := kms.NewCryptoKeyVersion(ctx, \"test_key\", \u0026kms.CryptoKeyVersionArgs{\n\t\t\tCryptoKey: cryptokey.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tserviceAccount, err := serviceaccount.NewAccount(ctx, \"service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-acc\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = applicationintegration.NewClient(ctx, \"example\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-east1\"),\n\t\t\tCreateSampleIntegrations: pulumi.Bool(true),\n\t\t\tRunAsServiceAccount: serviceAccount.Email,\n\t\t\tCloudKmsConfig: \u0026applicationintegration.ClientCloudKmsConfigArgs{\n\t\t\t\tKmsLocation: pulumi.String(\"us-east1\"),\n\t\t\t\tKmsRing: keyring.ID(),\n\t\t\t\tKey: cryptokey.ID(),\n\t\t\t\tKeyVersion: testKey.ID(),\n\t\t\t\tKmsProjectId: pulumi.String(testProject.ProjectId),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyVersion;\nimport com.pulumi.gcp.kms.CryptoKeyVersionArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.ClientCloudKmsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder()\n .name(\"my-keyring\")\n .location(\"us-east1\")\n .build());\n\n var cryptokey = new CryptoKey(\"cryptokey\", CryptoKeyArgs.builder()\n .name(\"crypto-key-example\")\n .keyRing(keyring.id())\n .rotationPeriod(\"7776000s\")\n .build());\n\n var testKey = new CryptoKeyVersion(\"testKey\", CryptoKeyVersionArgs.builder()\n .cryptoKey(cryptokey.id())\n .build());\n\n var serviceAccount = new Account(\"serviceAccount\", AccountArgs.builder()\n .accountId(\"service-acc\")\n .displayName(\"Service Account\")\n .build());\n\n var example = new Client(\"example\", ClientArgs.builder()\n .location(\"us-east1\")\n .createSampleIntegrations(true)\n .runAsServiceAccount(serviceAccount.email())\n .cloudKmsConfig(ClientCloudKmsConfigArgs.builder()\n .kmsLocation(\"us-east1\")\n .kmsRing(keyring.id())\n .key(cryptokey.id())\n .keyVersion(testKey.id())\n .kmsProjectId(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n name: my-keyring\n location: us-east1\n cryptokey:\n type: gcp:kms:CryptoKey\n properties:\n name: crypto-key-example\n keyRing: ${keyring.id}\n rotationPeriod: 7776000s\n testKey:\n type: gcp:kms:CryptoKeyVersion\n name: test_key\n properties:\n cryptoKey: ${cryptokey.id}\n serviceAccount:\n type: gcp:serviceaccount:Account\n name: service_account\n properties:\n accountId: service-acc\n displayName: Service Account\n example:\n type: gcp:applicationintegration:Client\n properties:\n location: us-east1\n createSampleIntegrations: true\n runAsServiceAccount: ${serviceAccount.email}\n cloudKmsConfig:\n kmsLocation: us-east1\n kmsRing: ${keyring.id}\n key: ${cryptokey.id}\n keyVersion: ${testKey.id}\n kmsProjectId: ${testProject.projectId}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nClient can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/clients`\n\n* `{{project}}/{{location}}`\n\n* `{{location}}`\n\nWhen using the `pulumi import` command, Client can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default projects/{{project}}/locations/{{location}}/clients\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default {{project}}/{{location}}\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default {{location}}\n```\n\n",
+ "description": "Application Integration Client.\n\n\nTo get more information about Client, see:\n\n* [API documentation](https://cloud.google.com/application-integration/docs/reference/rest/v1/projects.locations.clients)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/application-integration/docs/overview)\n * [Set up Application Integration](https://cloud.google.com/application-integration/docs/setup-application-integration)\n\n## Example Usage\n\n### Integrations Client Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.applicationintegration.Client(\"example\", {location: \"us-central1\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.applicationintegration.Client(\"example\", location=\"us-central1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.ApplicationIntegration.Client(\"example\", new()\n {\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := applicationintegration.NewClient(ctx, \"example\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Client(\"example\", ClientArgs.builder()\n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:applicationintegration:Client\n properties:\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Integrations Client Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst testProject = gcp.organizations.getProject({});\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {\n name: \"my-keyring\",\n location: \"us-east1\",\n});\nconst cryptokey = new gcp.kms.CryptoKey(\"cryptokey\", {\n name: \"crypto-key-example\",\n keyRing: keyring.id,\n rotationPeriod: \"7776000s\",\n});\nconst testKey = new gcp.kms.CryptoKeyVersion(\"test_key\", {cryptoKey: cryptokey.id});\nconst serviceAccount = new gcp.serviceaccount.Account(\"service_account\", {\n accountId: \"service-acc\",\n displayName: \"Service Account\",\n});\nconst example = new gcp.applicationintegration.Client(\"example\", {\n location: \"us-east1\",\n createSampleIntegrations: true,\n runAsServiceAccount: serviceAccount.email,\n cloudKmsConfig: {\n kmsLocation: \"us-east1\",\n kmsRing: std.basenameOutput({\n input: keyring.id,\n }).apply(invoke =\u003e invoke.result),\n key: std.basenameOutput({\n input: cryptokey.id,\n }).apply(invoke =\u003e invoke.result),\n keyVersion: std.basenameOutput({\n input: testKey.id,\n }).apply(invoke =\u003e invoke.result),\n kmsProjectId: testProject.then(testProject =\u003e testProject.projectId),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\ntest_project = gcp.organizations.get_project()\nkeyring = gcp.kms.KeyRing(\"keyring\",\n name=\"my-keyring\",\n location=\"us-east1\")\ncryptokey = gcp.kms.CryptoKey(\"cryptokey\",\n name=\"crypto-key-example\",\n key_ring=keyring.id,\n rotation_period=\"7776000s\")\ntest_key = gcp.kms.CryptoKeyVersion(\"test_key\", crypto_key=cryptokey.id)\nservice_account = gcp.serviceaccount.Account(\"service_account\",\n account_id=\"service-acc\",\n display_name=\"Service Account\")\nexample = gcp.applicationintegration.Client(\"example\",\n location=\"us-east1\",\n create_sample_integrations=True,\n run_as_service_account=service_account.email,\n cloud_kms_config={\n \"kms_location\": \"us-east1\",\n \"kms_ring\": std.basename_output(input=keyring.id).apply(lambda invoke: invoke.result),\n \"key\": std.basename_output(input=cryptokey.id).apply(lambda invoke: invoke.result),\n \"key_version\": std.basename_output(input=test_key.id).apply(lambda invoke: invoke.result),\n \"kms_project_id\": test_project.project_id,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Name = \"my-keyring\",\n Location = \"us-east1\",\n });\n\n var cryptokey = new Gcp.Kms.CryptoKey(\"cryptokey\", new()\n {\n Name = \"crypto-key-example\",\n KeyRing = keyring.Id,\n RotationPeriod = \"7776000s\",\n });\n\n var testKey = new Gcp.Kms.CryptoKeyVersion(\"test_key\", new()\n {\n CryptoKey = cryptokey.Id,\n });\n\n var serviceAccount = new Gcp.ServiceAccount.Account(\"service_account\", new()\n {\n AccountId = \"service-acc\",\n DisplayName = \"Service Account\",\n });\n\n var example = new Gcp.ApplicationIntegration.Client(\"example\", new()\n {\n Location = \"us-east1\",\n CreateSampleIntegrations = true,\n RunAsServiceAccount = serviceAccount.Email,\n CloudKmsConfig = new Gcp.ApplicationIntegration.Inputs.ClientCloudKmsConfigArgs\n {\n KmsLocation = \"us-east1\",\n KmsRing = Std.Basename.Invoke(new()\n {\n Input = keyring.Id,\n }).Apply(invoke =\u003e invoke.Result),\n Key = Std.Basename.Invoke(new()\n {\n Input = cryptokey.Id,\n }).Apply(invoke =\u003e invoke.Result),\n KeyVersion = Std.Basename.Invoke(new()\n {\n Input = testKey.Id,\n }).Apply(invoke =\u003e invoke.Result),\n KmsProjectId = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"my-keyring\"),\n\t\t\tLocation: pulumi.String(\"us-east1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptokey, err := kms.NewCryptoKey(ctx, \"cryptokey\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"crypto-key-example\"),\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"7776000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestKey, err := kms.NewCryptoKeyVersion(ctx, \"test_key\", \u0026kms.CryptoKeyVersionArgs{\n\t\t\tCryptoKey: cryptokey.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tserviceAccount, err := serviceaccount.NewAccount(ctx, \"service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-acc\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = applicationintegration.NewClient(ctx, \"example\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-east1\"),\n\t\t\tCreateSampleIntegrations: pulumi.Bool(true),\n\t\t\tRunAsServiceAccount: serviceAccount.Email,\n\t\t\tCloudKmsConfig: \u0026applicationintegration.ClientCloudKmsConfigArgs{\n\t\t\t\tKmsLocation: pulumi.String(\"us-east1\"),\n\t\t\t\tKmsRing: std.BasenameOutput(ctx, std.BasenameOutputArgs{\n\t\t\t\t\tInput: keyring.ID(),\n\t\t\t\t}, nil).ApplyT(func(invoke std.BasenameResult) (*string, error) {\n\t\t\t\t\treturn invoke.Result, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tKey: std.BasenameOutput(ctx, std.BasenameOutputArgs{\n\t\t\t\t\tInput: cryptokey.ID(),\n\t\t\t\t}, nil).ApplyT(func(invoke std.BasenameResult) (*string, error) {\n\t\t\t\t\treturn invoke.Result, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tKeyVersion: std.BasenameOutput(ctx, std.BasenameOutputArgs{\n\t\t\t\t\tInput: testKey.ID(),\n\t\t\t\t}, nil).ApplyT(func(invoke std.BasenameResult) (*string, error) {\n\t\t\t\t\treturn invoke.Result, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tKmsProjectId: pulumi.String(testProject.ProjectId),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyVersion;\nimport com.pulumi.gcp.kms.CryptoKeyVersionArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.ClientCloudKmsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder()\n .name(\"my-keyring\")\n .location(\"us-east1\")\n .build());\n\n var cryptokey = new CryptoKey(\"cryptokey\", CryptoKeyArgs.builder()\n .name(\"crypto-key-example\")\n .keyRing(keyring.id())\n .rotationPeriod(\"7776000s\")\n .build());\n\n var testKey = new CryptoKeyVersion(\"testKey\", CryptoKeyVersionArgs.builder()\n .cryptoKey(cryptokey.id())\n .build());\n\n var serviceAccount = new Account(\"serviceAccount\", AccountArgs.builder()\n .accountId(\"service-acc\")\n .displayName(\"Service Account\")\n .build());\n\n var example = new Client(\"example\", ClientArgs.builder()\n .location(\"us-east1\")\n .createSampleIntegrations(true)\n .runAsServiceAccount(serviceAccount.email())\n .cloudKmsConfig(ClientCloudKmsConfigArgs.builder()\n .kmsLocation(\"us-east1\")\n .kmsRing(StdFunctions.basename().applyValue(invoke -\u003e invoke.result()))\n .key(StdFunctions.basename().applyValue(invoke -\u003e invoke.result()))\n .keyVersion(StdFunctions.basename().applyValue(invoke -\u003e invoke.result()))\n .kmsProjectId(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n name: my-keyring\n location: us-east1\n cryptokey:\n type: gcp:kms:CryptoKey\n properties:\n name: crypto-key-example\n keyRing: ${keyring.id}\n rotationPeriod: 7776000s\n testKey:\n type: gcp:kms:CryptoKeyVersion\n name: test_key\n properties:\n cryptoKey: ${cryptokey.id}\n serviceAccount:\n type: gcp:serviceaccount:Account\n name: service_account\n properties:\n accountId: service-acc\n displayName: Service Account\n example:\n type: gcp:applicationintegration:Client\n properties:\n location: us-east1\n createSampleIntegrations: true\n runAsServiceAccount: ${serviceAccount.email}\n cloudKmsConfig:\n kmsLocation: us-east1\n kmsRing:\n fn::invoke:\n function: std:basename\n arguments:\n input: ${keyring.id}\n return: result\n key:\n fn::invoke:\n function: std:basename\n arguments:\n input: ${cryptokey.id}\n return: result\n keyVersion:\n fn::invoke:\n function: std:basename\n arguments:\n input: ${testKey.id}\n return: result\n kmsProjectId: ${testProject.projectId}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nClient can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/clients`\n\n* `{{project}}/{{location}}`\n\n* `{{location}}`\n\nWhen using the `pulumi import` command, Client can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default projects/{{project}}/locations/{{location}}/clients\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default {{project}}/{{location}}\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/client:Client default {{location}}\n```\n\n",
"properties": {
"cloudKmsConfig": {
"$ref": "#/types/gcp:applicationintegration/ClientCloudKmsConfig:ClientCloudKmsConfig",
@@ -136661,7 +137617,7 @@
}
},
"gcp:artifactregistry/repository:Repository": {
- "description": "A repository for storing artifacts\n\n\nTo get more information about Repository, see:\n\n* [API documentation](https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/artifact-registry/docs/overview)\n\n## Example Usage\n\n### Artifact Registry Repository Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n format: \"DOCKER\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n format=\"DOCKER\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Format = \"DOCKER\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .format(\"DOCKER\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository\n format: DOCKER\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Docker\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n format: \"DOCKER\",\n dockerConfig: {\n immutableTags: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n format=\"DOCKER\",\n docker_config={\n \"immutable_tags\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Format = \"DOCKER\",\n DockerConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryDockerConfigArgs\n {\n ImmutableTags = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tDockerConfig: \u0026artifactregistry.RepositoryDockerConfigArgs{\n\t\t\t\tImmutableTags: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryDockerConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .format(\"DOCKER\")\n .dockerConfig(RepositoryDockerConfigArgs.builder()\n .immutableTags(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository\n format: DOCKER\n dockerConfig:\n immutableTags: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-key\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with cmek\",\n format: \"DOCKER\",\n kmsKeyName: \"kms-key\",\n}, {\n dependsOn: [cryptoKey],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-key\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with cmek\",\n format=\"DOCKER\",\n kms_key_name=\"kms-key\",\n opts = pulumi.ResourceOptions(depends_on=[crypto_key]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-key\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with cmek\",\n Format = \"DOCKER\",\n KmsKeyName = \"kms-key\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cryptoKey,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with cmek\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tKmsKeyName: pulumi.String(\"kms-key\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-key\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with cmek\")\n .format(\"DOCKER\")\n .kmsKeyName(\"kms-key\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKey)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with cmek\n format: DOCKER\n kmsKeyName: kms-key\n options:\n dependsOn:\n - ${cryptoKey}\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-key\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Virtual\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo_upstream_1 = new gcp.artifactregistry.Repository(\"my-repo-upstream-1\", {\n location: \"us-central1\",\n repositoryId: \"my-repository-upstream-1\",\n description: \"example docker repository (upstream source) 1\",\n format: \"DOCKER\",\n});\nconst my_repo_upstream_2 = new gcp.artifactregistry.Repository(\"my-repo-upstream-2\", {\n location: \"us-central1\",\n repositoryId: \"my-repository-upstream-2\",\n description: \"example docker repository (upstream source) 2\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example virtual docker repository\",\n format: \"DOCKER\",\n mode: \"VIRTUAL_REPOSITORY\",\n virtualRepositoryConfig: {\n upstreamPolicies: [\n {\n id: \"my-repository-upstream-1\",\n repository: my_repo_upstream_1.id,\n priority: 20,\n },\n {\n id: \"my-repository-upstream-2\",\n repository: my_repo_upstream_2.id,\n priority: 10,\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo_upstream_1 = gcp.artifactregistry.Repository(\"my-repo-upstream-1\",\n location=\"us-central1\",\n repository_id=\"my-repository-upstream-1\",\n description=\"example docker repository (upstream source) 1\",\n format=\"DOCKER\")\nmy_repo_upstream_2 = gcp.artifactregistry.Repository(\"my-repo-upstream-2\",\n location=\"us-central1\",\n repository_id=\"my-repository-upstream-2\",\n description=\"example docker repository (upstream source) 2\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example virtual docker repository\",\n format=\"DOCKER\",\n mode=\"VIRTUAL_REPOSITORY\",\n virtual_repository_config={\n \"upstream_policies\": [\n {\n \"id\": \"my-repository-upstream-1\",\n \"repository\": my_repo_upstream_1.id,\n \"priority\": 20,\n },\n {\n \"id\": \"my-repository-upstream-2\",\n \"repository\": my_repo_upstream_2.id,\n \"priority\": 10,\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo_upstream_1 = new Gcp.ArtifactRegistry.Repository(\"my-repo-upstream-1\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository-upstream-1\",\n Description = \"example docker repository (upstream source) 1\",\n Format = \"DOCKER\",\n });\n\n var my_repo_upstream_2 = new Gcp.ArtifactRegistry.Repository(\"my-repo-upstream-2\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository-upstream-2\",\n Description = \"example docker repository (upstream source) 2\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example virtual docker repository\",\n Format = \"DOCKER\",\n Mode = \"VIRTUAL_REPOSITORY\",\n VirtualRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigArgs\n {\n UpstreamPolicies = new[]\n {\n new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs\n {\n Id = \"my-repository-upstream-1\",\n Repository = my_repo_upstream_1.Id,\n Priority = 20,\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs\n {\n Id = \"my-repository-upstream-2\",\n Repository = my_repo_upstream_2.Id,\n Priority = 10,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo-upstream-1\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository-upstream-1\"),\n\t\t\tDescription: pulumi.String(\"example docker repository (upstream source) 1\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo-upstream-2\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository-upstream-2\"),\n\t\t\tDescription: pulumi.String(\"example docker repository (upstream source) 2\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example virtual docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"VIRTUAL_REPOSITORY\"),\n\t\t\tVirtualRepositoryConfig: \u0026artifactregistry.RepositoryVirtualRepositoryConfigArgs{\n\t\t\t\tUpstreamPolicies: artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArray{\n\t\t\t\t\t\u0026artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs{\n\t\t\t\t\t\tId: pulumi.String(\"my-repository-upstream-1\"),\n\t\t\t\t\t\tRepository: my_repo_upstream_1.ID(),\n\t\t\t\t\t\tPriority: pulumi.Int(20),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs{\n\t\t\t\t\t\tId: pulumi.String(\"my-repository-upstream-2\"),\n\t\t\t\t\t\tRepository: my_repo_upstream_2.ID(),\n\t\t\t\t\t\tPriority: pulumi.Int(10),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryVirtualRepositoryConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo_upstream_1 = new Repository(\"my-repo-upstream-1\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository-upstream-1\")\n .description(\"example docker repository (upstream source) 1\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo_upstream_2 = new Repository(\"my-repo-upstream-2\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository-upstream-2\")\n .description(\"example docker repository (upstream source) 2\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example virtual docker repository\")\n .format(\"DOCKER\")\n .mode(\"VIRTUAL_REPOSITORY\")\n .virtualRepositoryConfig(RepositoryVirtualRepositoryConfigArgs.builder()\n .upstreamPolicies( \n RepositoryVirtualRepositoryConfigUpstreamPolicyArgs.builder()\n .id(\"my-repository-upstream-1\")\n .repository(my_repo_upstream_1.id())\n .priority(20)\n .build(),\n RepositoryVirtualRepositoryConfigUpstreamPolicyArgs.builder()\n .id(\"my-repository-upstream-2\")\n .repository(my_repo_upstream_2.id())\n .priority(10)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo-upstream-1:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository-upstream-1\n description: example docker repository (upstream source) 1\n format: DOCKER\n my-repo-upstream-2:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository-upstream-2\n description: example docker repository (upstream source) 2\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example virtual docker repository\n format: DOCKER\n mode: VIRTUAL_REPOSITORY\n virtualRepositoryConfig:\n upstreamPolicies:\n - id: my-repository-upstream-1\n repository: ${[\"my-repo-upstream-1\"].id}\n priority: 20\n - id: my-repository-upstream-2\n repository: ${[\"my-repo-upstream-2\"].id}\n priority: 10\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example remote docker repository\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"docker hub\",\n dockerRepository: {\n publicRepository: \"DOCKER_HUB\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example remote docker repository\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"docker hub\",\n \"docker_repository\": {\n \"public_repository\": \"DOCKER_HUB\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example remote docker repository\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"docker hub\",\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n PublicRepository = \"DOCKER_HUB\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example remote docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"docker hub\"),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tPublicRepository: pulumi.String(\"DOCKER_HUB\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example remote docker repository\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"docker hub\")\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .publicRepository(\"DOCKER_HUB\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example remote docker repository\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: docker hub\n dockerRepository:\n publicRepository: DOCKER_HUB\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Apt\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"debian-buster\",\n description: \"example remote apt repository\",\n format: \"APT\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"Debian buster remote repository\",\n aptRepository: {\n publicRepository: {\n repositoryBase: \"DEBIAN\",\n repositoryPath: \"debian/dists/buster\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"debian-buster\",\n description=\"example remote apt repository\",\n format=\"APT\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"Debian buster remote repository\",\n \"apt_repository\": {\n \"public_repository\": {\n \"repository_base\": \"DEBIAN\",\n \"repository_path\": \"debian/dists/buster\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"debian-buster\",\n Description = \"example remote apt repository\",\n Format = \"APT\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"Debian buster remote repository\",\n AptRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigAptRepositoryArgs\n {\n PublicRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs\n {\n RepositoryBase = \"DEBIAN\",\n RepositoryPath = \"debian/dists/buster\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"debian-buster\"),\n\t\t\tDescription: pulumi.String(\"example remote apt repository\"),\n\t\t\tFormat: pulumi.String(\"APT\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"Debian buster remote repository\"),\n\t\t\t\tAptRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigAptRepositoryArgs{\n\t\t\t\t\tPublicRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs{\n\t\t\t\t\t\tRepositoryBase: pulumi.String(\"DEBIAN\"),\n\t\t\t\t\t\tRepositoryPath: pulumi.String(\"debian/dists/buster\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigAptRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"debian-buster\")\n .description(\"example remote apt repository\")\n .format(\"APT\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"Debian buster remote repository\")\n .aptRepository(RepositoryRemoteRepositoryConfigAptRepositoryArgs.builder()\n .publicRepository(RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs.builder()\n .repositoryBase(\"DEBIAN\")\n .repositoryPath(\"debian/dists/buster\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: debian-buster\n description: example remote apt repository\n format: APT\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: Debian buster remote repository\n aptRepository:\n publicRepository:\n repositoryBase: DEBIAN\n repositoryPath: debian/dists/buster\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Yum\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"rocky-9\",\n description: \"example remote yum repository\",\n format: \"YUM\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"Rocky 9 remote repository\",\n yumRepository: {\n publicRepository: {\n repositoryBase: \"ROCKY\",\n repositoryPath: \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"rocky-9\",\n description=\"example remote yum repository\",\n format=\"YUM\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"Rocky 9 remote repository\",\n \"yum_repository\": {\n \"public_repository\": {\n \"repository_base\": \"ROCKY\",\n \"repository_path\": \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"rocky-9\",\n Description = \"example remote yum repository\",\n Format = \"YUM\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"Rocky 9 remote repository\",\n YumRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigYumRepositoryArgs\n {\n PublicRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs\n {\n RepositoryBase = \"ROCKY\",\n RepositoryPath = \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"rocky-9\"),\n\t\t\tDescription: pulumi.String(\"example remote yum repository\"),\n\t\t\tFormat: pulumi.String(\"YUM\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"Rocky 9 remote repository\"),\n\t\t\t\tYumRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigYumRepositoryArgs{\n\t\t\t\t\tPublicRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs{\n\t\t\t\t\t\tRepositoryBase: pulumi.String(\"ROCKY\"),\n\t\t\t\t\t\tRepositoryPath: pulumi.String(\"pub/rocky/9/BaseOS/x86_64/os\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigYumRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"rocky-9\")\n .description(\"example remote yum repository\")\n .format(\"YUM\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"Rocky 9 remote repository\")\n .yumRepository(RepositoryRemoteRepositoryConfigYumRepositoryArgs.builder()\n .publicRepository(RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs.builder()\n .repositoryBase(\"ROCKY\")\n .repositoryPath(\"pub/rocky/9/BaseOS/x86_64/os\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: rocky-9\n description: example remote yum repository\n format: YUM\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: Rocky 9 remote repository\n yumRepository:\n publicRepository:\n repositoryBase: ROCKY\n repositoryPath: pub/rocky/9/BaseOS/x86_64/os\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Cleanup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with cleanup policies\",\n format: \"DOCKER\",\n cleanupPolicyDryRun: false,\n cleanupPolicies: [\n {\n id: \"delete-prerelease\",\n action: \"DELETE\",\n condition: {\n tagState: \"TAGGED\",\n tagPrefixes: [\n \"alpha\",\n \"v0\",\n ],\n olderThan: \"2592000s\",\n },\n },\n {\n id: \"keep-tagged-release\",\n action: \"KEEP\",\n condition: {\n tagState: \"TAGGED\",\n tagPrefixes: [\"release\"],\n packageNamePrefixes: [\n \"webapp\",\n \"mobile\",\n ],\n },\n },\n {\n id: \"keep-minimum-versions\",\n action: \"KEEP\",\n mostRecentVersions: {\n packageNamePrefixes: [\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n ],\n keepCount: 5,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with cleanup policies\",\n format=\"DOCKER\",\n cleanup_policy_dry_run=False,\n cleanup_policies=[\n {\n \"id\": \"delete-prerelease\",\n \"action\": \"DELETE\",\n \"condition\": {\n \"tag_state\": \"TAGGED\",\n \"tag_prefixes\": [\n \"alpha\",\n \"v0\",\n ],\n \"older_than\": \"2592000s\",\n },\n },\n {\n \"id\": \"keep-tagged-release\",\n \"action\": \"KEEP\",\n \"condition\": {\n \"tag_state\": \"TAGGED\",\n \"tag_prefixes\": [\"release\"],\n \"package_name_prefixes\": [\n \"webapp\",\n \"mobile\",\n ],\n },\n },\n {\n \"id\": \"keep-minimum-versions\",\n \"action\": \"KEEP\",\n \"most_recent_versions\": {\n \"package_name_prefixes\": [\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n ],\n \"keep_count\": 5,\n },\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with cleanup policies\",\n Format = \"DOCKER\",\n CleanupPolicyDryRun = false,\n CleanupPolicies = new[]\n {\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"delete-prerelease\",\n Action = \"DELETE\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"TAGGED\",\n TagPrefixes = new[]\n {\n \"alpha\",\n \"v0\",\n },\n OlderThan = \"2592000s\",\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"keep-tagged-release\",\n Action = \"KEEP\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"TAGGED\",\n TagPrefixes = new[]\n {\n \"release\",\n },\n PackageNamePrefixes = new[]\n {\n \"webapp\",\n \"mobile\",\n },\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"keep-minimum-versions\",\n Action = \"KEEP\",\n MostRecentVersions = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyMostRecentVersionsArgs\n {\n PackageNamePrefixes = new[]\n {\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n },\n KeepCount = 5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with cleanup policies\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tCleanupPolicyDryRun: pulumi.Bool(false),\n\t\t\tCleanupPolicies: artifactregistry.RepositoryCleanupPolicyArray{\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"delete-prerelease\"),\n\t\t\t\t\tAction: pulumi.String(\"DELETE\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"TAGGED\"),\n\t\t\t\t\t\tTagPrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"alpha\"),\n\t\t\t\t\t\t\tpulumi.String(\"v0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOlderThan: pulumi.String(\"2592000s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"keep-tagged-release\"),\n\t\t\t\t\tAction: pulumi.String(\"KEEP\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"TAGGED\"),\n\t\t\t\t\t\tTagPrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"release\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPackageNamePrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"webapp\"),\n\t\t\t\t\t\t\tpulumi.String(\"mobile\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"keep-minimum-versions\"),\n\t\t\t\t\tAction: pulumi.String(\"KEEP\"),\n\t\t\t\t\tMostRecentVersions: \u0026artifactregistry.RepositoryCleanupPolicyMostRecentVersionsArgs{\n\t\t\t\t\t\tPackageNamePrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"webapp\"),\n\t\t\t\t\t\t\tpulumi.String(\"mobile\"),\n\t\t\t\t\t\t\tpulumi.String(\"sandbox\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKeepCount: pulumi.Int(5),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyConditionArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyMostRecentVersionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with cleanup policies\")\n .format(\"DOCKER\")\n .cleanupPolicyDryRun(false)\n .cleanupPolicies( \n RepositoryCleanupPolicyArgs.builder()\n .id(\"delete-prerelease\")\n .action(\"DELETE\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"TAGGED\")\n .tagPrefixes( \n \"alpha\",\n \"v0\")\n .olderThan(\"2592000s\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"keep-tagged-release\")\n .action(\"KEEP\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"TAGGED\")\n .tagPrefixes(\"release\")\n .packageNamePrefixes( \n \"webapp\",\n \"mobile\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"keep-minimum-versions\")\n .action(\"KEEP\")\n .mostRecentVersions(RepositoryCleanupPolicyMostRecentVersionsArgs.builder()\n .packageNamePrefixes( \n \"webapp\",\n \"mobile\",\n \"sandbox\")\n .keepCount(5)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with cleanup policies\n format: DOCKER\n cleanupPolicyDryRun: false\n cleanupPolicies:\n - id: delete-prerelease\n action: DELETE\n condition:\n tagState: TAGGED\n tagPrefixes:\n - alpha\n - v0\n olderThan: 2592000s\n - id: keep-tagged-release\n action: KEEP\n condition:\n tagState: TAGGED\n tagPrefixes:\n - release\n packageNamePrefixes:\n - webapp\n - mobile\n - id: keep-minimum-versions\n action: KEEP\n mostRecentVersions:\n packageNamePrefixes:\n - webapp\n - mobile\n - sandbox\n keepCount: 5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Dockerhub Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-dockerhub-remote\",\n description: \"example remote dockerhub repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"docker hub with custom credentials\",\n disableUpstreamValidation: true,\n dockerRepository: {\n publicRepository: \"DOCKER_HUB\",\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-dockerhub-remote\",\n description=\"example remote dockerhub repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"docker hub with custom credentials\",\n \"disable_upstream_validation\": True,\n \"docker_repository\": {\n \"public_repository\": \"DOCKER_HUB\",\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-dockerhub-remote\",\n Description = \"example remote dockerhub repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"docker hub with custom credentials\",\n DisableUpstreamValidation = true,\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n PublicRepository = \"DOCKER_HUB\",\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-dockerhub-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote dockerhub repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"docker hub with custom credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tPublicRepository: pulumi.String(\"DOCKER_HUB\"),\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-dockerhub-remote\")\n .description(\"example remote dockerhub repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"docker hub with custom credentials\")\n .disableUpstreamValidation(true)\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .publicRepository(\"DOCKER_HUB\")\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-dockerhub-remote\n description: example remote dockerhub repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: docker hub with custom credentials\n disableUpstreamValidation: true\n dockerRepository:\n publicRepository: DOCKER_HUB\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Docker Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-docker-custom-remote\",\n description: \"example remote custom docker repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom docker remote with credentials\",\n disableUpstreamValidation: true,\n dockerRepository: {\n customRepository: {\n uri: \"https://registry-1.docker.io\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-docker-custom-remote\",\n description=\"example remote custom docker repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom docker remote with credentials\",\n \"disable_upstream_validation\": True,\n \"docker_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://registry-1.docker.io\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-docker-custom-remote\",\n Description = \"example remote custom docker repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom docker remote with credentials\",\n DisableUpstreamValidation = true,\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs\n {\n Uri = \"https://registry-1.docker.io\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-docker-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom docker repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom docker remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://registry-1.docker.io\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-docker-custom-remote\")\n .description(\"example remote custom docker repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom docker remote with credentials\")\n .disableUpstreamValidation(true)\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://registry-1.docker.io\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-docker-custom-remote\n description: example remote custom docker repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom docker remote with credentials\n disableUpstreamValidation: true\n dockerRepository:\n customRepository:\n uri: https://registry-1.docker.io\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Maven Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-maven-custom-remote\",\n description: \"example remote custom maven repository with credentials\",\n format: \"MAVEN\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom maven remote with credentials\",\n disableUpstreamValidation: true,\n mavenRepository: {\n customRepository: {\n uri: \"https://my.maven.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-maven-custom-remote\",\n description=\"example remote custom maven repository with credentials\",\n format=\"MAVEN\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom maven remote with credentials\",\n \"disable_upstream_validation\": True,\n \"maven_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.maven.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-maven-custom-remote\",\n Description = \"example remote custom maven repository with credentials\",\n Format = \"MAVEN\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom maven remote with credentials\",\n DisableUpstreamValidation = true,\n MavenRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigMavenRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.maven.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-maven-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom maven repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"MAVEN\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom maven remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tMavenRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigMavenRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.maven.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigMavenRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-maven-custom-remote\")\n .description(\"example remote custom maven repository with credentials\")\n .format(\"MAVEN\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom maven remote with credentials\")\n .disableUpstreamValidation(true)\n .mavenRepository(RepositoryRemoteRepositoryConfigMavenRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.maven.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-maven-custom-remote\n description: example remote custom maven repository with credentials\n format: MAVEN\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom maven remote with credentials\n disableUpstreamValidation: true\n mavenRepository:\n customRepository:\n uri: https://my.maven.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Npm Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-npm-custom-remote\",\n description: \"example remote custom npm repository with credentials\",\n format: \"NPM\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom npm with credentials\",\n disableUpstreamValidation: true,\n npmRepository: {\n customRepository: {\n uri: \"https://my.npm.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-npm-custom-remote\",\n description=\"example remote custom npm repository with credentials\",\n format=\"NPM\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom npm with credentials\",\n \"disable_upstream_validation\": True,\n \"npm_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.npm.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-npm-custom-remote\",\n Description = \"example remote custom npm repository with credentials\",\n Format = \"NPM\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom npm with credentials\",\n DisableUpstreamValidation = true,\n NpmRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigNpmRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.npm.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-npm-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom npm repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"NPM\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom npm with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tNpmRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigNpmRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.npm.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigNpmRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-npm-custom-remote\")\n .description(\"example remote custom npm repository with credentials\")\n .format(\"NPM\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom npm with credentials\")\n .disableUpstreamValidation(true)\n .npmRepository(RepositoryRemoteRepositoryConfigNpmRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.npm.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-npm-custom-remote\n description: example remote custom npm repository with credentials\n format: NPM\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom npm with credentials\n disableUpstreamValidation: true\n npmRepository:\n customRepository:\n uri: https://my.npm.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Python Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-python-custom-remote\",\n description: \"example remote custom python repository with credentials\",\n format: \"PYTHON\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom npm with credentials\",\n disableUpstreamValidation: true,\n pythonRepository: {\n customRepository: {\n uri: \"https://my.python.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-python-custom-remote\",\n description=\"example remote custom python repository with credentials\",\n format=\"PYTHON\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom npm with credentials\",\n \"disable_upstream_validation\": True,\n \"python_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.python.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-python-custom-remote\",\n Description = \"example remote custom python repository with credentials\",\n Format = \"PYTHON\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom npm with credentials\",\n DisableUpstreamValidation = true,\n PythonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigPythonRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.python.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-python-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom python repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"PYTHON\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom npm with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tPythonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigPythonRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.python.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigPythonRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-python-custom-remote\")\n .description(\"example remote custom python repository with credentials\")\n .format(\"PYTHON\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom npm with credentials\")\n .disableUpstreamValidation(true)\n .pythonRepository(RepositoryRemoteRepositoryConfigPythonRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.python.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-python-custom-remote\n description: example remote custom python repository with credentials\n format: PYTHON\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom npm with credentials\n disableUpstreamValidation: true\n pythonRepository:\n customRepository:\n uri: https://my.python.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Docker\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst upstreamRepo = new gcp.artifactregistry.Repository(\"upstream_repo\", {\n location: \"us-central1\",\n repositoryId: \"example-upstream-repo\",\n description: \"example upstream repository\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-common-remote\",\n description: \"example remote common repository with docker upstream\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"pull-through cache of another Artifact Registry repository\",\n commonRepository: {\n uri: upstreamRepo.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nupstream_repo = gcp.artifactregistry.Repository(\"upstream_repo\",\n location=\"us-central1\",\n repository_id=\"example-upstream-repo\",\n description=\"example upstream repository\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-common-remote\",\n description=\"example remote common repository with docker upstream\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"pull-through cache of another Artifact Registry repository\",\n \"common_repository\": {\n \"uri\": upstream_repo.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var upstreamRepo = new Gcp.ArtifactRegistry.Repository(\"upstream_repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-upstream-repo\",\n Description = \"example upstream repository\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-common-remote\",\n Description = \"example remote common repository with docker upstream\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"pull-through cache of another Artifact Registry repository\",\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = upstreamRepo.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tupstreamRepo, err := artifactregistry.NewRepository(ctx, \"upstream_repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-upstream-repo\"),\n\t\t\tDescription: pulumi.String(\"example upstream repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-common-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote common repository with docker upstream\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"pull-through cache of another Artifact Registry repository\"),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: upstreamRepo.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var upstreamRepo = new Repository(\"upstreamRepo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-upstream-repo\")\n .description(\"example upstream repository\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-common-remote\")\n .description(\"example remote common repository with docker upstream\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"pull-through cache of another Artifact Registry repository\")\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(upstreamRepo.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n upstreamRepo:\n type: gcp:artifactregistry:Repository\n name: upstream_repo\n properties:\n location: us-central1\n repositoryId: example-upstream-repo\n description: example upstream repository\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-common-remote\n description: example remote common repository with docker upstream\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: pull-through cache of another Artifact Registry repository\n commonRepository:\n uri: ${upstreamRepo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRepository can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}`\n\n* `{{project}}/{{location}}/{{repository_id}}`\n\n* `{{location}}/{{repository_id}}`\n\n* `{{repository_id}}`\n\nWhen using the `pulumi import` command, Repository can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{project}}/{{location}}/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{location}}/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{repository_id}}\n```\n\n",
+ "description": "A repository for storing artifacts\n\n\nTo get more information about Repository, see:\n\n* [API documentation](https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/artifact-registry/docs/overview)\n\n## Example Usage\n\n### Artifact Registry Repository Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n format: \"DOCKER\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n format=\"DOCKER\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Format = \"DOCKER\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .format(\"DOCKER\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository\n format: DOCKER\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Docker\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository\",\n format: \"DOCKER\",\n dockerConfig: {\n immutableTags: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository\",\n format=\"DOCKER\",\n docker_config={\n \"immutable_tags\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository\",\n Format = \"DOCKER\",\n DockerConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryDockerConfigArgs\n {\n ImmutableTags = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tDockerConfig: \u0026artifactregistry.RepositoryDockerConfigArgs{\n\t\t\t\tImmutableTags: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryDockerConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository\")\n .format(\"DOCKER\")\n .dockerConfig(RepositoryDockerConfigArgs.builder()\n .immutableTags(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository\n format: DOCKER\n dockerConfig:\n immutableTags: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-key\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with cmek\",\n format: \"DOCKER\",\n kmsKeyName: \"kms-key\",\n}, {\n dependsOn: [cryptoKey],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-key\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with cmek\",\n format=\"DOCKER\",\n kms_key_name=\"kms-key\",\n opts = pulumi.ResourceOptions(depends_on=[crypto_key]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-key\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with cmek\",\n Format = \"DOCKER\",\n KmsKeyName = \"kms-key\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cryptoKey,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with cmek\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tKmsKeyName: pulumi.String(\"kms-key\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKey,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-key\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with cmek\")\n .format(\"DOCKER\")\n .kmsKeyName(\"kms-key\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKey)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with cmek\n format: DOCKER\n kmsKeyName: kms-key\n options:\n dependsOn:\n - ${cryptoKey}\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-key\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Virtual\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo_upstream_1 = new gcp.artifactregistry.Repository(\"my-repo-upstream-1\", {\n location: \"us-central1\",\n repositoryId: \"my-repository-upstream-1\",\n description: \"example docker repository (upstream source) 1\",\n format: \"DOCKER\",\n});\nconst my_repo_upstream_2 = new gcp.artifactregistry.Repository(\"my-repo-upstream-2\", {\n location: \"us-central1\",\n repositoryId: \"my-repository-upstream-2\",\n description: \"example docker repository (upstream source) 2\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example virtual docker repository\",\n format: \"DOCKER\",\n mode: \"VIRTUAL_REPOSITORY\",\n virtualRepositoryConfig: {\n upstreamPolicies: [\n {\n id: \"my-repository-upstream-1\",\n repository: my_repo_upstream_1.id,\n priority: 20,\n },\n {\n id: \"my-repository-upstream-2\",\n repository: my_repo_upstream_2.id,\n priority: 10,\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo_upstream_1 = gcp.artifactregistry.Repository(\"my-repo-upstream-1\",\n location=\"us-central1\",\n repository_id=\"my-repository-upstream-1\",\n description=\"example docker repository (upstream source) 1\",\n format=\"DOCKER\")\nmy_repo_upstream_2 = gcp.artifactregistry.Repository(\"my-repo-upstream-2\",\n location=\"us-central1\",\n repository_id=\"my-repository-upstream-2\",\n description=\"example docker repository (upstream source) 2\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example virtual docker repository\",\n format=\"DOCKER\",\n mode=\"VIRTUAL_REPOSITORY\",\n virtual_repository_config={\n \"upstream_policies\": [\n {\n \"id\": \"my-repository-upstream-1\",\n \"repository\": my_repo_upstream_1.id,\n \"priority\": 20,\n },\n {\n \"id\": \"my-repository-upstream-2\",\n \"repository\": my_repo_upstream_2.id,\n \"priority\": 10,\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo_upstream_1 = new Gcp.ArtifactRegistry.Repository(\"my-repo-upstream-1\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository-upstream-1\",\n Description = \"example docker repository (upstream source) 1\",\n Format = \"DOCKER\",\n });\n\n var my_repo_upstream_2 = new Gcp.ArtifactRegistry.Repository(\"my-repo-upstream-2\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository-upstream-2\",\n Description = \"example docker repository (upstream source) 2\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example virtual docker repository\",\n Format = \"DOCKER\",\n Mode = \"VIRTUAL_REPOSITORY\",\n VirtualRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigArgs\n {\n UpstreamPolicies = new[]\n {\n new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs\n {\n Id = \"my-repository-upstream-1\",\n Repository = my_repo_upstream_1.Id,\n Priority = 20,\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs\n {\n Id = \"my-repository-upstream-2\",\n Repository = my_repo_upstream_2.Id,\n Priority = 10,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo-upstream-1\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository-upstream-1\"),\n\t\t\tDescription: pulumi.String(\"example docker repository (upstream source) 1\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo-upstream-2\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository-upstream-2\"),\n\t\t\tDescription: pulumi.String(\"example docker repository (upstream source) 2\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example virtual docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"VIRTUAL_REPOSITORY\"),\n\t\t\tVirtualRepositoryConfig: \u0026artifactregistry.RepositoryVirtualRepositoryConfigArgs{\n\t\t\t\tUpstreamPolicies: artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArray{\n\t\t\t\t\t\u0026artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs{\n\t\t\t\t\t\tId: pulumi.String(\"my-repository-upstream-1\"),\n\t\t\t\t\t\tRepository: my_repo_upstream_1.ID(),\n\t\t\t\t\t\tPriority: pulumi.Int(20),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026artifactregistry.RepositoryVirtualRepositoryConfigUpstreamPolicyArgs{\n\t\t\t\t\t\tId: pulumi.String(\"my-repository-upstream-2\"),\n\t\t\t\t\t\tRepository: my_repo_upstream_2.ID(),\n\t\t\t\t\t\tPriority: pulumi.Int(10),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryVirtualRepositoryConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo_upstream_1 = new Repository(\"my-repo-upstream-1\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository-upstream-1\")\n .description(\"example docker repository (upstream source) 1\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo_upstream_2 = new Repository(\"my-repo-upstream-2\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository-upstream-2\")\n .description(\"example docker repository (upstream source) 2\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example virtual docker repository\")\n .format(\"DOCKER\")\n .mode(\"VIRTUAL_REPOSITORY\")\n .virtualRepositoryConfig(RepositoryVirtualRepositoryConfigArgs.builder()\n .upstreamPolicies( \n RepositoryVirtualRepositoryConfigUpstreamPolicyArgs.builder()\n .id(\"my-repository-upstream-1\")\n .repository(my_repo_upstream_1.id())\n .priority(20)\n .build(),\n RepositoryVirtualRepositoryConfigUpstreamPolicyArgs.builder()\n .id(\"my-repository-upstream-2\")\n .repository(my_repo_upstream_2.id())\n .priority(10)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo-upstream-1:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository-upstream-1\n description: example docker repository (upstream source) 1\n format: DOCKER\n my-repo-upstream-2:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository-upstream-2\n description: example docker repository (upstream source) 2\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example virtual docker repository\n format: DOCKER\n mode: VIRTUAL_REPOSITORY\n virtualRepositoryConfig:\n upstreamPolicies:\n - id: my-repository-upstream-1\n repository: ${[\"my-repo-upstream-1\"].id}\n priority: 20\n - id: my-repository-upstream-2\n repository: ${[\"my-repo-upstream-2\"].id}\n priority: 10\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example remote docker repository\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"docker hub\",\n dockerRepository: {\n publicRepository: \"DOCKER_HUB\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example remote docker repository\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"docker hub\",\n \"docker_repository\": {\n \"public_repository\": \"DOCKER_HUB\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example remote docker repository\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"docker hub\",\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n PublicRepository = \"DOCKER_HUB\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example remote docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"docker hub\"),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tPublicRepository: pulumi.String(\"DOCKER_HUB\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example remote docker repository\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"docker hub\")\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .publicRepository(\"DOCKER_HUB\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example remote docker repository\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: docker hub\n dockerRepository:\n publicRepository: DOCKER_HUB\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Apt\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"debian-buster\",\n description: \"example remote apt repository\",\n format: \"APT\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"Debian buster remote repository\",\n aptRepository: {\n publicRepository: {\n repositoryBase: \"DEBIAN\",\n repositoryPath: \"debian/dists/buster\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"debian-buster\",\n description=\"example remote apt repository\",\n format=\"APT\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"Debian buster remote repository\",\n \"apt_repository\": {\n \"public_repository\": {\n \"repository_base\": \"DEBIAN\",\n \"repository_path\": \"debian/dists/buster\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"debian-buster\",\n Description = \"example remote apt repository\",\n Format = \"APT\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"Debian buster remote repository\",\n AptRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigAptRepositoryArgs\n {\n PublicRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs\n {\n RepositoryBase = \"DEBIAN\",\n RepositoryPath = \"debian/dists/buster\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"debian-buster\"),\n\t\t\tDescription: pulumi.String(\"example remote apt repository\"),\n\t\t\tFormat: pulumi.String(\"APT\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"Debian buster remote repository\"),\n\t\t\t\tAptRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigAptRepositoryArgs{\n\t\t\t\t\tPublicRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs{\n\t\t\t\t\t\tRepositoryBase: pulumi.String(\"DEBIAN\"),\n\t\t\t\t\t\tRepositoryPath: pulumi.String(\"debian/dists/buster\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigAptRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"debian-buster\")\n .description(\"example remote apt repository\")\n .format(\"APT\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"Debian buster remote repository\")\n .aptRepository(RepositoryRemoteRepositoryConfigAptRepositoryArgs.builder()\n .publicRepository(RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArgs.builder()\n .repositoryBase(\"DEBIAN\")\n .repositoryPath(\"debian/dists/buster\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: debian-buster\n description: example remote apt repository\n format: APT\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: Debian buster remote repository\n aptRepository:\n publicRepository:\n repositoryBase: DEBIAN\n repositoryPath: debian/dists/buster\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Yum\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"rocky-9\",\n description: \"example remote yum repository\",\n format: \"YUM\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"Rocky 9 remote repository\",\n yumRepository: {\n publicRepository: {\n repositoryBase: \"ROCKY\",\n repositoryPath: \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"rocky-9\",\n description=\"example remote yum repository\",\n format=\"YUM\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"Rocky 9 remote repository\",\n \"yum_repository\": {\n \"public_repository\": {\n \"repository_base\": \"ROCKY\",\n \"repository_path\": \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"rocky-9\",\n Description = \"example remote yum repository\",\n Format = \"YUM\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"Rocky 9 remote repository\",\n YumRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigYumRepositoryArgs\n {\n PublicRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs\n {\n RepositoryBase = \"ROCKY\",\n RepositoryPath = \"pub/rocky/9/BaseOS/x86_64/os\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"rocky-9\"),\n\t\t\tDescription: pulumi.String(\"example remote yum repository\"),\n\t\t\tFormat: pulumi.String(\"YUM\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"Rocky 9 remote repository\"),\n\t\t\t\tYumRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigYumRepositoryArgs{\n\t\t\t\t\tPublicRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs{\n\t\t\t\t\t\tRepositoryBase: pulumi.String(\"ROCKY\"),\n\t\t\t\t\t\tRepositoryPath: pulumi.String(\"pub/rocky/9/BaseOS/x86_64/os\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigYumRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"rocky-9\")\n .description(\"example remote yum repository\")\n .format(\"YUM\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"Rocky 9 remote repository\")\n .yumRepository(RepositoryRemoteRepositoryConfigYumRepositoryArgs.builder()\n .publicRepository(RepositoryRemoteRepositoryConfigYumRepositoryPublicRepositoryArgs.builder()\n .repositoryBase(\"ROCKY\")\n .repositoryPath(\"pub/rocky/9/BaseOS/x86_64/os\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: rocky-9\n description: example remote yum repository\n format: YUM\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: Rocky 9 remote repository\n yumRepository:\n publicRepository:\n repositoryBase: ROCKY\n repositoryPath: pub/rocky/9/BaseOS/x86_64/os\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Cleanup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n description: \"example docker repository with cleanup policies\",\n format: \"DOCKER\",\n cleanupPolicyDryRun: false,\n cleanupPolicies: [\n {\n id: \"delete-prerelease\",\n action: \"DELETE\",\n condition: {\n tagState: \"TAGGED\",\n tagPrefixes: [\n \"alpha\",\n \"v0\",\n ],\n olderThan: \"2592000s\",\n },\n },\n {\n id: \"keep-tagged-release\",\n action: \"KEEP\",\n condition: {\n tagState: \"TAGGED\",\n tagPrefixes: [\"release\"],\n packageNamePrefixes: [\n \"webapp\",\n \"mobile\",\n ],\n },\n },\n {\n id: \"keep-minimum-versions\",\n action: \"KEEP\",\n mostRecentVersions: {\n packageNamePrefixes: [\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n ],\n keepCount: 5,\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"my-repository\",\n description=\"example docker repository with cleanup policies\",\n format=\"DOCKER\",\n cleanup_policy_dry_run=False,\n cleanup_policies=[\n {\n \"id\": \"delete-prerelease\",\n \"action\": \"DELETE\",\n \"condition\": {\n \"tag_state\": \"TAGGED\",\n \"tag_prefixes\": [\n \"alpha\",\n \"v0\",\n ],\n \"older_than\": \"2592000s\",\n },\n },\n {\n \"id\": \"keep-tagged-release\",\n \"action\": \"KEEP\",\n \"condition\": {\n \"tag_state\": \"TAGGED\",\n \"tag_prefixes\": [\"release\"],\n \"package_name_prefixes\": [\n \"webapp\",\n \"mobile\",\n ],\n },\n },\n {\n \"id\": \"keep-minimum-versions\",\n \"action\": \"KEEP\",\n \"most_recent_versions\": {\n \"package_name_prefixes\": [\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n ],\n \"keep_count\": 5,\n },\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n Description = \"example docker repository with cleanup policies\",\n Format = \"DOCKER\",\n CleanupPolicyDryRun = false,\n CleanupPolicies = new[]\n {\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"delete-prerelease\",\n Action = \"DELETE\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"TAGGED\",\n TagPrefixes = new[]\n {\n \"alpha\",\n \"v0\",\n },\n OlderThan = \"2592000s\",\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"keep-tagged-release\",\n Action = \"KEEP\",\n Condition = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyConditionArgs\n {\n TagState = \"TAGGED\",\n TagPrefixes = new[]\n {\n \"release\",\n },\n PackageNamePrefixes = new[]\n {\n \"webapp\",\n \"mobile\",\n },\n },\n },\n new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyArgs\n {\n Id = \"keep-minimum-versions\",\n Action = \"KEEP\",\n MostRecentVersions = new Gcp.ArtifactRegistry.Inputs.RepositoryCleanupPolicyMostRecentVersionsArgs\n {\n PackageNamePrefixes = new[]\n {\n \"webapp\",\n \"mobile\",\n \"sandbox\",\n },\n KeepCount = 5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t\tDescription: pulumi.String(\"example docker repository with cleanup policies\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tCleanupPolicyDryRun: pulumi.Bool(false),\n\t\t\tCleanupPolicies: artifactregistry.RepositoryCleanupPolicyArray{\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"delete-prerelease\"),\n\t\t\t\t\tAction: pulumi.String(\"DELETE\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"TAGGED\"),\n\t\t\t\t\t\tTagPrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"alpha\"),\n\t\t\t\t\t\t\tpulumi.String(\"v0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tOlderThan: pulumi.String(\"2592000s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"keep-tagged-release\"),\n\t\t\t\t\tAction: pulumi.String(\"KEEP\"),\n\t\t\t\t\tCondition: \u0026artifactregistry.RepositoryCleanupPolicyConditionArgs{\n\t\t\t\t\t\tTagState: pulumi.String(\"TAGGED\"),\n\t\t\t\t\t\tTagPrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"release\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPackageNamePrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"webapp\"),\n\t\t\t\t\t\t\tpulumi.String(\"mobile\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026artifactregistry.RepositoryCleanupPolicyArgs{\n\t\t\t\t\tId: pulumi.String(\"keep-minimum-versions\"),\n\t\t\t\t\tAction: pulumi.String(\"KEEP\"),\n\t\t\t\t\tMostRecentVersions: \u0026artifactregistry.RepositoryCleanupPolicyMostRecentVersionsArgs{\n\t\t\t\t\t\tPackageNamePrefixes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"webapp\"),\n\t\t\t\t\t\t\tpulumi.String(\"mobile\"),\n\t\t\t\t\t\t\tpulumi.String(\"sandbox\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tKeepCount: pulumi.Int(5),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyConditionArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryCleanupPolicyMostRecentVersionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .description(\"example docker repository with cleanup policies\")\n .format(\"DOCKER\")\n .cleanupPolicyDryRun(false)\n .cleanupPolicies( \n RepositoryCleanupPolicyArgs.builder()\n .id(\"delete-prerelease\")\n .action(\"DELETE\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"TAGGED\")\n .tagPrefixes( \n \"alpha\",\n \"v0\")\n .olderThan(\"2592000s\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"keep-tagged-release\")\n .action(\"KEEP\")\n .condition(RepositoryCleanupPolicyConditionArgs.builder()\n .tagState(\"TAGGED\")\n .tagPrefixes(\"release\")\n .packageNamePrefixes( \n \"webapp\",\n \"mobile\")\n .build())\n .build(),\n RepositoryCleanupPolicyArgs.builder()\n .id(\"keep-minimum-versions\")\n .action(\"KEEP\")\n .mostRecentVersions(RepositoryCleanupPolicyMostRecentVersionsArgs.builder()\n .packageNamePrefixes( \n \"webapp\",\n \"mobile\",\n \"sandbox\")\n .keepCount(5)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: my-repository\n description: example docker repository with cleanup policies\n format: DOCKER\n cleanupPolicyDryRun: false\n cleanupPolicies:\n - id: delete-prerelease\n action: DELETE\n condition:\n tagState: TAGGED\n tagPrefixes:\n - alpha\n - v0\n olderThan: 2592000s\n - id: keep-tagged-release\n action: KEEP\n condition:\n tagState: TAGGED\n tagPrefixes:\n - release\n packageNamePrefixes:\n - webapp\n - mobile\n - id: keep-minimum-versions\n action: KEEP\n mostRecentVersions:\n packageNamePrefixes:\n - webapp\n - mobile\n - sandbox\n keepCount: 5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Dockerhub Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-dockerhub-remote\",\n description: \"example remote dockerhub repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"docker hub with custom credentials\",\n disableUpstreamValidation: true,\n dockerRepository: {\n publicRepository: \"DOCKER_HUB\",\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-dockerhub-remote\",\n description=\"example remote dockerhub repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"docker hub with custom credentials\",\n \"disable_upstream_validation\": True,\n \"docker_repository\": {\n \"public_repository\": \"DOCKER_HUB\",\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-dockerhub-remote\",\n Description = \"example remote dockerhub repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"docker hub with custom credentials\",\n DisableUpstreamValidation = true,\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n PublicRepository = \"DOCKER_HUB\",\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-dockerhub-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote dockerhub repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"docker hub with custom credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tPublicRepository: pulumi.String(\"DOCKER_HUB\"),\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-dockerhub-remote\")\n .description(\"example remote dockerhub repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"docker hub with custom credentials\")\n .disableUpstreamValidation(true)\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .publicRepository(\"DOCKER_HUB\")\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-dockerhub-remote\n description: example remote dockerhub repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: docker hub with custom credentials\n disableUpstreamValidation: true\n dockerRepository:\n publicRepository: DOCKER_HUB\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Docker Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-docker-custom-remote\",\n description: \"example remote custom docker repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom docker remote with credentials\",\n disableUpstreamValidation: true,\n dockerRepository: {\n customRepository: {\n uri: \"https://registry-1.docker.io\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-docker-custom-remote\",\n description=\"example remote custom docker repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom docker remote with credentials\",\n \"disable_upstream_validation\": True,\n \"docker_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://registry-1.docker.io\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-docker-custom-remote\",\n Description = \"example remote custom docker repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom docker remote with credentials\",\n DisableUpstreamValidation = true,\n DockerRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs\n {\n Uri = \"https://registry-1.docker.io\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-docker-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom docker repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom docker remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tDockerRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://registry-1.docker.io\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-docker-custom-remote\")\n .description(\"example remote custom docker repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom docker remote with credentials\")\n .disableUpstreamValidation(true)\n .dockerRepository(RepositoryRemoteRepositoryConfigDockerRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://registry-1.docker.io\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-docker-custom-remote\n description: example remote custom docker repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom docker remote with credentials\n disableUpstreamValidation: true\n dockerRepository:\n customRepository:\n uri: https://registry-1.docker.io\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Maven Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-maven-custom-remote\",\n description: \"example remote custom maven repository with credentials\",\n format: \"MAVEN\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom maven remote with credentials\",\n disableUpstreamValidation: true,\n mavenRepository: {\n customRepository: {\n uri: \"https://my.maven.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-maven-custom-remote\",\n description=\"example remote custom maven repository with credentials\",\n format=\"MAVEN\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom maven remote with credentials\",\n \"disable_upstream_validation\": True,\n \"maven_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.maven.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-maven-custom-remote\",\n Description = \"example remote custom maven repository with credentials\",\n Format = \"MAVEN\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom maven remote with credentials\",\n DisableUpstreamValidation = true,\n MavenRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigMavenRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.maven.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-maven-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom maven repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"MAVEN\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom maven remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tMavenRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigMavenRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.maven.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigMavenRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-maven-custom-remote\")\n .description(\"example remote custom maven repository with credentials\")\n .format(\"MAVEN\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom maven remote with credentials\")\n .disableUpstreamValidation(true)\n .mavenRepository(RepositoryRemoteRepositoryConfigMavenRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.maven.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-maven-custom-remote\n description: example remote custom maven repository with credentials\n format: MAVEN\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom maven remote with credentials\n disableUpstreamValidation: true\n mavenRepository:\n customRepository:\n uri: https://my.maven.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Npm Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-npm-custom-remote\",\n description: \"example remote custom npm repository with credentials\",\n format: \"NPM\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom npm with credentials\",\n disableUpstreamValidation: true,\n npmRepository: {\n customRepository: {\n uri: \"https://my.npm.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-npm-custom-remote\",\n description=\"example remote custom npm repository with credentials\",\n format=\"NPM\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom npm with credentials\",\n \"disable_upstream_validation\": True,\n \"npm_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.npm.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-npm-custom-remote\",\n Description = \"example remote custom npm repository with credentials\",\n Format = \"NPM\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom npm with credentials\",\n DisableUpstreamValidation = true,\n NpmRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigNpmRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.npm.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-npm-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom npm repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"NPM\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom npm with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tNpmRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigNpmRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.npm.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigNpmRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-npm-custom-remote\")\n .description(\"example remote custom npm repository with credentials\")\n .format(\"NPM\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom npm with credentials\")\n .disableUpstreamValidation(true)\n .npmRepository(RepositoryRemoteRepositoryConfigNpmRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.npm.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-npm-custom-remote\n description: example remote custom npm repository with credentials\n format: NPM\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom npm with credentials\n disableUpstreamValidation: true\n npmRepository:\n customRepository:\n uri: https://my.npm.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Python Custom With Auth\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-python-custom-remote\",\n description: \"example remote custom python repository with credentials\",\n format: \"PYTHON\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom npm with credentials\",\n disableUpstreamValidation: true,\n pythonRepository: {\n customRepository: {\n uri: \"https://my.python.registry\",\n },\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-python-custom-remote\",\n description=\"example remote custom python repository with credentials\",\n format=\"PYTHON\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom npm with credentials\",\n \"disable_upstream_validation\": True,\n \"python_repository\": {\n \"custom_repository\": {\n \"uri\": \"https://my.python.registry\",\n },\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-python-custom-remote\",\n Description = \"example remote custom python repository with credentials\",\n Format = \"PYTHON\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom npm with credentials\",\n DisableUpstreamValidation = true,\n PythonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigPythonRepositoryArgs\n {\n CustomRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs\n {\n Uri = \"https://my.python.registry\",\n },\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-python-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom python repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"PYTHON\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom npm with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tPythonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigPythonRepositoryArgs{\n\t\t\t\t\tCustomRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://my.python.registry\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigPythonRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-python-custom-remote\")\n .description(\"example remote custom python repository with credentials\")\n .format(\"PYTHON\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom npm with credentials\")\n .disableUpstreamValidation(true)\n .pythonRepository(RepositoryRemoteRepositoryConfigPythonRepositoryArgs.builder()\n .customRepository(RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs.builder()\n .uri(\"https://my.python.registry\")\n .build())\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-python-custom-remote\n description: example remote custom python repository with credentials\n format: PYTHON\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom npm with credentials\n disableUpstreamValidation: true\n pythonRepository:\n customRepository:\n uri: https://my.python.registry\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Docker\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst upstreamRepo = new gcp.artifactregistry.Repository(\"upstream_repo\", {\n location: \"us-central1\",\n repositoryId: \"example-upstream-repo\",\n description: \"example upstream repository\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-common-remote\",\n description: \"example remote common repository with docker upstream\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"pull-through cache of another Artifact Registry repository\",\n commonRepository: {\n uri: upstreamRepo.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nupstream_repo = gcp.artifactregistry.Repository(\"upstream_repo\",\n location=\"us-central1\",\n repository_id=\"example-upstream-repo\",\n description=\"example upstream repository\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-common-remote\",\n description=\"example remote common repository with docker upstream\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"pull-through cache of another Artifact Registry repository\",\n \"common_repository\": {\n \"uri\": upstream_repo.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var upstreamRepo = new Gcp.ArtifactRegistry.Repository(\"upstream_repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-upstream-repo\",\n Description = \"example upstream repository\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-common-remote\",\n Description = \"example remote common repository with docker upstream\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"pull-through cache of another Artifact Registry repository\",\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = upstreamRepo.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tupstreamRepo, err := artifactregistry.NewRepository(ctx, \"upstream_repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-upstream-repo\"),\n\t\t\tDescription: pulumi.String(\"example upstream repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-common-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote common repository with docker upstream\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"pull-through cache of another Artifact Registry repository\"),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: upstreamRepo.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var upstreamRepo = new Repository(\"upstreamRepo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-upstream-repo\")\n .description(\"example upstream repository\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-common-remote\")\n .description(\"example remote common repository with docker upstream\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"pull-through cache of another Artifact Registry repository\")\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(upstreamRepo.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n upstreamRepo:\n type: gcp:artifactregistry:Repository\n name: upstream_repo\n properties:\n location: us-central1\n repositoryId: example-upstream-repo\n description: example upstream repository\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-common-remote\n description: example remote common repository with docker upstream\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: pull-through cache of another Artifact Registry repository\n commonRepository:\n uri: ${upstreamRepo.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Artifact Registry Uri\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst upstreamRepo = new gcp.artifactregistry.Repository(\"upstream_repo\", {\n location: \"us-central1\",\n repositoryId: \"example-upstream-repo\",\n description: \"example upstream repository\",\n format: \"DOCKER\",\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-common-remote\",\n description: \"example remote common repository with docker upstream\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"pull-through cache of another Artifact Registry repository by URL\",\n commonRepository: {\n uri: \"https://us-central1-docker.pkg.dev//example-upstream-repo\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nupstream_repo = gcp.artifactregistry.Repository(\"upstream_repo\",\n location=\"us-central1\",\n repository_id=\"example-upstream-repo\",\n description=\"example upstream repository\",\n format=\"DOCKER\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-common-remote\",\n description=\"example remote common repository with docker upstream\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"pull-through cache of another Artifact Registry repository by URL\",\n \"common_repository\": {\n \"uri\": \"https://us-central1-docker.pkg.dev//example-upstream-repo\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var upstreamRepo = new Gcp.ArtifactRegistry.Repository(\"upstream_repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-upstream-repo\",\n Description = \"example upstream repository\",\n Format = \"DOCKER\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-common-remote\",\n Description = \"example remote common repository with docker upstream\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"pull-through cache of another Artifact Registry repository by URL\",\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = \"https://us-central1-docker.pkg.dev//example-upstream-repo\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"upstream_repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-upstream-repo\"),\n\t\t\tDescription: pulumi.String(\"example upstream repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-common-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote common repository with docker upstream\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"pull-through cache of another Artifact Registry repository by URL\"),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: pulumi.String(\"https://us-central1-docker.pkg.dev//example-upstream-repo\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var upstreamRepo = new Repository(\"upstreamRepo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-upstream-repo\")\n .description(\"example upstream repository\")\n .format(\"DOCKER\")\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-common-remote\")\n .description(\"example remote common repository with docker upstream\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"pull-through cache of another Artifact Registry repository by URL\")\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(\"https://us-central1-docker.pkg.dev//example-upstream-repo\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n upstreamRepo:\n type: gcp:artifactregistry:Repository\n name: upstream_repo\n properties:\n location: us-central1\n repositoryId: example-upstream-repo\n description: example upstream repository\n format: DOCKER\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-common-remote\n description: example remote common repository with docker upstream\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: pull-through cache of another Artifact Registry repository by URL\n commonRepository:\n uri: https://us-central1-docker.pkg.dev//example-upstream-repo\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Artifact Registry Repository Remote Common Repository With Custom Upstream\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst example_remote_secret = new gcp.secretmanager.Secret(\"example-remote-secret\", {\n secretId: \"example-secret\",\n replication: {\n auto: {},\n },\n});\nconst example_remote_secretVersion = new gcp.secretmanager.SecretVersion(\"example-remote-secret_version\", {\n secret: example_remote_secret.id,\n secretData: \"remote-password\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: example_remote_secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`),\n});\nconst my_repo = new gcp.artifactregistry.Repository(\"my-repo\", {\n location: \"us-central1\",\n repositoryId: \"example-docker-custom-remote\",\n description: \"example remote custom docker repository with credentials\",\n format: \"DOCKER\",\n mode: \"REMOTE_REPOSITORY\",\n remoteRepositoryConfig: {\n description: \"custom common docker remote with credentials\",\n disableUpstreamValidation: true,\n commonRepository: {\n uri: \"https://registry-1.docker.io\",\n },\n upstreamCredentials: {\n usernamePasswordCredentials: {\n username: \"remote-username\",\n passwordSecretVersion: example_remote_secretVersion.name,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_remote_secret = gcp.secretmanager.Secret(\"example-remote-secret\",\n secret_id=\"example-secret\",\n replication={\n \"auto\": {},\n })\nexample_remote_secret_version = gcp.secretmanager.SecretVersion(\"example-remote-secret_version\",\n secret=example_remote_secret.id,\n secret_data=\"remote-password\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=example_remote_secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\")\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n location=\"us-central1\",\n repository_id=\"example-docker-custom-remote\",\n description=\"example remote custom docker repository with credentials\",\n format=\"DOCKER\",\n mode=\"REMOTE_REPOSITORY\",\n remote_repository_config={\n \"description\": \"custom common docker remote with credentials\",\n \"disable_upstream_validation\": True,\n \"common_repository\": {\n \"uri\": \"https://registry-1.docker.io\",\n },\n \"upstream_credentials\": {\n \"username_password_credentials\": {\n \"username\": \"remote-username\",\n \"password_secret_version\": example_remote_secret_version.name,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var example_remote_secret = new Gcp.SecretManager.Secret(\"example-remote-secret\", new()\n {\n SecretId = \"example-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion(\"example-remote-secret_version\", new()\n {\n Secret = example_remote_secret.Id,\n SecretData = \"remote-password\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = example_remote_secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com\",\n });\n\n var my_repo = new Gcp.ArtifactRegistry.Repository(\"my-repo\", new()\n {\n Location = \"us-central1\",\n RepositoryId = \"example-docker-custom-remote\",\n Description = \"example remote custom docker repository with credentials\",\n Format = \"DOCKER\",\n Mode = \"REMOTE_REPOSITORY\",\n RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs\n {\n Description = \"custom common docker remote with credentials\",\n DisableUpstreamValidation = true,\n CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs\n {\n Uri = \"https://registry-1.docker.io\",\n },\n UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs\n {\n UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs\n {\n Username = \"remote-username\",\n PasswordSecretVersion = example_remote_secretVersion.Name,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecret(ctx, \"example-remote-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"example-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"example-remote-secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: example_remote_secret.ID(),\n\t\t\tSecretData: pulumi.String(\"remote-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: example_remote_secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = artifactregistry.NewRepository(ctx, \"my-repo\", \u0026artifactregistry.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"example-docker-custom-remote\"),\n\t\t\tDescription: pulumi.String(\"example remote custom docker repository with credentials\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tMode: pulumi.String(\"REMOTE_REPOSITORY\"),\n\t\t\tRemoteRepositoryConfig: \u0026artifactregistry.RepositoryRemoteRepositoryConfigArgs{\n\t\t\t\tDescription: pulumi.String(\"custom common docker remote with credentials\"),\n\t\t\t\tDisableUpstreamValidation: pulumi.Bool(true),\n\t\t\t\tCommonRepository: \u0026artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{\n\t\t\t\t\tUri: pulumi.String(\"https://registry-1.docker.io\"),\n\t\t\t\t},\n\t\t\t\tUpstreamCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{\n\t\t\t\t\tUsernamePasswordCredentials: \u0026artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{\n\t\t\t\t\t\tUsername: pulumi.String(\"remote-username\"),\n\t\t\t\t\t\tPasswordSecretVersion: example_remote_secretVersion.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.artifactregistry.Repository;\nimport com.pulumi.gcp.artifactregistry.RepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;\nimport com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var example_remote_secret = new Secret(\"example-remote-secret\", SecretArgs.builder()\n .secretId(\"example-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var example_remote_secretVersion = new SecretVersion(\"example-remote-secretVersion\", SecretVersionArgs.builder()\n .secret(example_remote_secret.id())\n .secretData(\"remote-password\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(example_remote_secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-artifactregistry.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var my_repo = new Repository(\"my-repo\", RepositoryArgs.builder()\n .location(\"us-central1\")\n .repositoryId(\"example-docker-custom-remote\")\n .description(\"example remote custom docker repository with credentials\")\n .format(\"DOCKER\")\n .mode(\"REMOTE_REPOSITORY\")\n .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()\n .description(\"custom common docker remote with credentials\")\n .disableUpstreamValidation(true)\n .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()\n .uri(\"https://registry-1.docker.io\")\n .build())\n .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()\n .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()\n .username(\"remote-username\")\n .passwordSecretVersion(example_remote_secretVersion.name())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-remote-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: example-secret\n replication:\n auto: {}\n example-remote-secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: example-remote-secret_version\n properties:\n secret: ${[\"example-remote-secret\"].id}\n secretData: remote-password\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${[\"example-remote-secret\"].id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n location: us-central1\n repositoryId: example-docker-custom-remote\n description: example remote custom docker repository with credentials\n format: DOCKER\n mode: REMOTE_REPOSITORY\n remoteRepositoryConfig:\n description: custom common docker remote with credentials\n disableUpstreamValidation: true\n commonRepository:\n uri: https://registry-1.docker.io\n upstreamCredentials:\n usernamePasswordCredentials:\n username: remote-username\n passwordSecretVersion: ${[\"example-remote-secretVersion\"].name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRepository can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}`\n\n* `{{project}}/{{location}}/{{repository_id}}`\n\n* `{{location}}/{{repository_id}}`\n\n* `{{repository_id}}`\n\nWhen using the `pulumi import` command, Repository can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{project}}/{{location}}/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{location}}/{{repository_id}}\n```\n\n```sh\n$ pulumi import gcp:artifactregistry/repository:Repository default {{repository_id}}\n```\n\n",
"properties": {
"cleanupPolicies": {
"type": "array",
@@ -137342,7 +138298,7 @@
},
"complianceRegime": {
"type": "string",
- "description": "Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT\n"
+ "description": "Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT, IRS_1075\n"
},
"complianceStatuses": {
"type": "array",
@@ -137492,7 +138448,7 @@
},
"complianceRegime": {
"type": "string",
- "description": "Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT\n",
+ "description": "Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT, IRS_1075\n",
"willReplaceOnChanges": true
},
"displayName": {
@@ -137581,7 +138537,7 @@
},
"complianceRegime": {
"type": "string",
- "description": "Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT\n",
+ "description": "Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT, IRS_1075\n",
"willReplaceOnChanges": true
},
"complianceStatuses": {
@@ -137721,7 +138677,7 @@
}
},
"gcp:backupdisasterrecovery/backupPlan:BackupPlan": {
- "description": "## Example Usage\n\n### Backup Dr Backup Plan Simple\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myBackupVault = new gcp.backupdisasterrecovery.BackupVault(\"my_backup_vault\", {\n location: \"us-central1\",\n backupVaultId: \"bv-bp-test\",\n backupMinimumEnforcedRetentionDuration: \"100000s\",\n});\nconst my_backup_plan_1 = new gcp.backupdisasterrecovery.BackupPlan(\"my-backup-plan-1\", {\n location: \"us-central1\",\n backupPlanId: \"backup-plan-simple-test\",\n resourceType: \"compute.googleapis.com/Instance\",\n backupVault: myBackupVault.id,\n backupRules: [{\n ruleId: \"rule-1\",\n backupRetentionDays: 5,\n standardSchedule: {\n recurrenceType: \"HOURLY\",\n hourlyFrequency: 6,\n timeZone: \"UTC\",\n backupWindow: {\n startHourOfDay: 0,\n endHourOfDay: 24,\n },\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_backup_vault = gcp.backupdisasterrecovery.BackupVault(\"my_backup_vault\",\n location=\"us-central1\",\n backup_vault_id=\"bv-bp-test\",\n backup_minimum_enforced_retention_duration=\"100000s\")\nmy_backup_plan_1 = gcp.backupdisasterrecovery.BackupPlan(\"my-backup-plan-1\",\n location=\"us-central1\",\n backup_plan_id=\"backup-plan-simple-test\",\n resource_type=\"compute.googleapis.com/Instance\",\n backup_vault=my_backup_vault.id,\n backup_rules=[{\n \"rule_id\": \"rule-1\",\n \"backup_retention_days\": 5,\n \"standard_schedule\": {\n \"recurrence_type\": \"HOURLY\",\n \"hourly_frequency\": 6,\n \"time_zone\": \"UTC\",\n \"backup_window\": {\n \"start_hour_of_day\": 0,\n \"end_hour_of_day\": 24,\n },\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myBackupVault = new Gcp.BackupDisasterRecovery.BackupVault(\"my_backup_vault\", new()\n {\n Location = \"us-central1\",\n BackupVaultId = \"bv-bp-test\",\n BackupMinimumEnforcedRetentionDuration = \"100000s\",\n });\n\n var my_backup_plan_1 = new Gcp.BackupDisasterRecovery.BackupPlan(\"my-backup-plan-1\", new()\n {\n Location = \"us-central1\",\n BackupPlanId = \"backup-plan-simple-test\",\n ResourceType = \"compute.googleapis.com/Instance\",\n BackupVault = myBackupVault.Id,\n BackupRules = new[]\n {\n new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleArgs\n {\n RuleId = \"rule-1\",\n BackupRetentionDays = 5,\n StandardSchedule = new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleStandardScheduleArgs\n {\n RecurrenceType = \"HOURLY\",\n HourlyFrequency = 6,\n TimeZone = \"UTC\",\n BackupWindow = new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleStandardScheduleBackupWindowArgs\n {\n StartHourOfDay = 0,\n EndHourOfDay = 24,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyBackupVault, err := backupdisasterrecovery.NewBackupVault(ctx, \"my_backup_vault\", \u0026backupdisasterrecovery.BackupVaultArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupVaultId: pulumi.String(\"bv-bp-test\"),\n\t\t\tBackupMinimumEnforcedRetentionDuration: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = backupdisasterrecovery.NewBackupPlan(ctx, \"my-backup-plan-1\", \u0026backupdisasterrecovery.BackupPlanArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlanId: pulumi.String(\"backup-plan-simple-test\"),\n\t\t\tResourceType: pulumi.String(\"compute.googleapis.com/Instance\"),\n\t\t\tBackupVault: myBackupVault.ID(),\n\t\t\tBackupRules: backupdisasterrecovery.BackupPlanBackupRuleArray{\n\t\t\t\t\u0026backupdisasterrecovery.BackupPlanBackupRuleArgs{\n\t\t\t\t\tRuleId: pulumi.String(\"rule-1\"),\n\t\t\t\t\tBackupRetentionDays: pulumi.Int(5),\n\t\t\t\t\tStandardSchedule: \u0026backupdisasterrecovery.BackupPlanBackupRuleStandardScheduleArgs{\n\t\t\t\t\t\tRecurrenceType: pulumi.String(\"HOURLY\"),\n\t\t\t\t\t\tHourlyFrequency: pulumi.Int(6),\n\t\t\t\t\t\tTimeZone: pulumi.String(\"UTC\"),\n\t\t\t\t\t\tBackupWindow: \u0026backupdisasterrecovery.BackupPlanBackupRuleStandardScheduleBackupWindowArgs{\n\t\t\t\t\t\t\tStartHourOfDay: pulumi.Int(0),\n\t\t\t\t\t\t\tEndHourOfDay: pulumi.Int(24),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVault;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVaultArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlan;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlanArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleStandardScheduleArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleStandardScheduleBackupWindowArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myBackupVault = new BackupVault(\"myBackupVault\", BackupVaultArgs.builder()\n .location(\"us-central1\")\n .backupVaultId(\"bv-bp-test\")\n .backupMinimumEnforcedRetentionDuration(\"100000s\")\n .build());\n\n var my_backup_plan_1 = new BackupPlan(\"my-backup-plan-1\", BackupPlanArgs.builder()\n .location(\"us-central1\")\n .backupPlanId(\"backup-plan-simple-test\")\n .resourceType(\"compute.googleapis.com/Instance\")\n .backupVault(myBackupVault.id())\n .backupRules(BackupPlanBackupRuleArgs.builder()\n .ruleId(\"rule-1\")\n .backupRetentionDays(5)\n .standardSchedule(BackupPlanBackupRuleStandardScheduleArgs.builder()\n .recurrenceType(\"HOURLY\")\n .hourlyFrequency(6)\n .timeZone(\"UTC\")\n .backupWindow(BackupPlanBackupRuleStandardScheduleBackupWindowArgs.builder()\n .startHourOfDay(0)\n .endHourOfDay(24)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myBackupVault:\n type: gcp:backupdisasterrecovery:BackupVault\n name: my_backup_vault\n properties:\n location: us-central1\n backupVaultId: bv-bp-test\n backupMinimumEnforcedRetentionDuration: 100000s\n my-backup-plan-1:\n type: gcp:backupdisasterrecovery:BackupPlan\n properties:\n location: us-central1\n backupPlanId: backup-plan-simple-test\n resourceType: compute.googleapis.com/Instance\n backupVault: ${myBackupVault.id}\n backupRules:\n - ruleId: rule-1\n backupRetentionDays: 5\n standardSchedule:\n recurrenceType: HOURLY\n hourlyFrequency: 6\n timeZone: UTC\n backupWindow:\n startHourOfDay: 0\n endHourOfDay: 24\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupPlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan_id}}`\n\n* `{{project}}/{{location}}/{{backup_plan_id}}`\n\n* `{{location}}/{{backup_plan_id}}`\n\nWhen using the `pulumi import` command, BackupPlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlan:BackupPlan default projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlan:BackupPlan default {{project}}/{{location}}/{{backup_plan_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlan:BackupPlan default {{location}}/{{backup_plan_id}}\n```\n\n",
+ "description": "## Example Usage\n\n### Backup Dr Backup Plan Simple\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myBackupVault = new gcp.backupdisasterrecovery.BackupVault(\"my_backup_vault\", {\n location: \"us-central1\",\n backupVaultId: \"backup-vault-simple-test\",\n backupMinimumEnforcedRetentionDuration: \"100000s\",\n});\nconst my_backup_plan_1 = new gcp.backupdisasterrecovery.BackupPlan(\"my-backup-plan-1\", {\n location: \"us-central1\",\n backupPlanId: \"backup-plan-simple-test\",\n resourceType: \"compute.googleapis.com/Instance\",\n backupVault: myBackupVault.id,\n backupRules: [{\n ruleId: \"rule-1\",\n backupRetentionDays: 5,\n standardSchedule: {\n recurrenceType: \"HOURLY\",\n hourlyFrequency: 6,\n timeZone: \"UTC\",\n backupWindow: {\n startHourOfDay: 0,\n endHourOfDay: 24,\n },\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_backup_vault = gcp.backupdisasterrecovery.BackupVault(\"my_backup_vault\",\n location=\"us-central1\",\n backup_vault_id=\"backup-vault-simple-test\",\n backup_minimum_enforced_retention_duration=\"100000s\")\nmy_backup_plan_1 = gcp.backupdisasterrecovery.BackupPlan(\"my-backup-plan-1\",\n location=\"us-central1\",\n backup_plan_id=\"backup-plan-simple-test\",\n resource_type=\"compute.googleapis.com/Instance\",\n backup_vault=my_backup_vault.id,\n backup_rules=[{\n \"rule_id\": \"rule-1\",\n \"backup_retention_days\": 5,\n \"standard_schedule\": {\n \"recurrence_type\": \"HOURLY\",\n \"hourly_frequency\": 6,\n \"time_zone\": \"UTC\",\n \"backup_window\": {\n \"start_hour_of_day\": 0,\n \"end_hour_of_day\": 24,\n },\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myBackupVault = new Gcp.BackupDisasterRecovery.BackupVault(\"my_backup_vault\", new()\n {\n Location = \"us-central1\",\n BackupVaultId = \"backup-vault-simple-test\",\n BackupMinimumEnforcedRetentionDuration = \"100000s\",\n });\n\n var my_backup_plan_1 = new Gcp.BackupDisasterRecovery.BackupPlan(\"my-backup-plan-1\", new()\n {\n Location = \"us-central1\",\n BackupPlanId = \"backup-plan-simple-test\",\n ResourceType = \"compute.googleapis.com/Instance\",\n BackupVault = myBackupVault.Id,\n BackupRules = new[]\n {\n new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleArgs\n {\n RuleId = \"rule-1\",\n BackupRetentionDays = 5,\n StandardSchedule = new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleStandardScheduleArgs\n {\n RecurrenceType = \"HOURLY\",\n HourlyFrequency = 6,\n TimeZone = \"UTC\",\n BackupWindow = new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleStandardScheduleBackupWindowArgs\n {\n StartHourOfDay = 0,\n EndHourOfDay = 24,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyBackupVault, err := backupdisasterrecovery.NewBackupVault(ctx, \"my_backup_vault\", \u0026backupdisasterrecovery.BackupVaultArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupVaultId: pulumi.String(\"backup-vault-simple-test\"),\n\t\t\tBackupMinimumEnforcedRetentionDuration: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = backupdisasterrecovery.NewBackupPlan(ctx, \"my-backup-plan-1\", \u0026backupdisasterrecovery.BackupPlanArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlanId: pulumi.String(\"backup-plan-simple-test\"),\n\t\t\tResourceType: pulumi.String(\"compute.googleapis.com/Instance\"),\n\t\t\tBackupVault: myBackupVault.ID(),\n\t\t\tBackupRules: backupdisasterrecovery.BackupPlanBackupRuleArray{\n\t\t\t\t\u0026backupdisasterrecovery.BackupPlanBackupRuleArgs{\n\t\t\t\t\tRuleId: pulumi.String(\"rule-1\"),\n\t\t\t\t\tBackupRetentionDays: pulumi.Int(5),\n\t\t\t\t\tStandardSchedule: \u0026backupdisasterrecovery.BackupPlanBackupRuleStandardScheduleArgs{\n\t\t\t\t\t\tRecurrenceType: pulumi.String(\"HOURLY\"),\n\t\t\t\t\t\tHourlyFrequency: pulumi.Int(6),\n\t\t\t\t\t\tTimeZone: pulumi.String(\"UTC\"),\n\t\t\t\t\t\tBackupWindow: \u0026backupdisasterrecovery.BackupPlanBackupRuleStandardScheduleBackupWindowArgs{\n\t\t\t\t\t\t\tStartHourOfDay: pulumi.Int(0),\n\t\t\t\t\t\t\tEndHourOfDay: pulumi.Int(24),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVault;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVaultArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlan;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlanArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleStandardScheduleArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleStandardScheduleBackupWindowArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myBackupVault = new BackupVault(\"myBackupVault\", BackupVaultArgs.builder()\n .location(\"us-central1\")\n .backupVaultId(\"backup-vault-simple-test\")\n .backupMinimumEnforcedRetentionDuration(\"100000s\")\n .build());\n\n var my_backup_plan_1 = new BackupPlan(\"my-backup-plan-1\", BackupPlanArgs.builder()\n .location(\"us-central1\")\n .backupPlanId(\"backup-plan-simple-test\")\n .resourceType(\"compute.googleapis.com/Instance\")\n .backupVault(myBackupVault.id())\n .backupRules(BackupPlanBackupRuleArgs.builder()\n .ruleId(\"rule-1\")\n .backupRetentionDays(5)\n .standardSchedule(BackupPlanBackupRuleStandardScheduleArgs.builder()\n .recurrenceType(\"HOURLY\")\n .hourlyFrequency(6)\n .timeZone(\"UTC\")\n .backupWindow(BackupPlanBackupRuleStandardScheduleBackupWindowArgs.builder()\n .startHourOfDay(0)\n .endHourOfDay(24)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myBackupVault:\n type: gcp:backupdisasterrecovery:BackupVault\n name: my_backup_vault\n properties:\n location: us-central1\n backupVaultId: backup-vault-simple-test\n backupMinimumEnforcedRetentionDuration: 100000s\n my-backup-plan-1:\n type: gcp:backupdisasterrecovery:BackupPlan\n properties:\n location: us-central1\n backupPlanId: backup-plan-simple-test\n resourceType: compute.googleapis.com/Instance\n backupVault: ${myBackupVault.id}\n backupRules:\n - ruleId: rule-1\n backupRetentionDays: 5\n standardSchedule:\n recurrenceType: HOURLY\n hourlyFrequency: 6\n timeZone: UTC\n backupWindow:\n startHourOfDay: 0\n endHourOfDay: 24\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupPlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan_id}}`\n\n* `{{project}}/{{location}}/{{backup_plan_id}}`\n\n* `{{location}}/{{backup_plan_id}}`\n\nWhen using the `pulumi import` command, BackupPlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlan:BackupPlan default projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlan:BackupPlan default {{project}}/{{location}}/{{backup_plan_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlan:BackupPlan default {{location}}/{{backup_plan_id}}\n```\n\n",
"properties": {
"backupPlanId": {
"type": "string",
@@ -138061,7 +139017,7 @@
}
},
"gcp:backupdisasterrecovery/backupVault:BackupVault": {
- "description": "## Example Usage\n\n### Backup Dr Backup Vault Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst backup_vault_test = new gcp.backupdisasterrecovery.BackupVault(\"backup-vault-test\", {\n location: \"us-central1\",\n backupVaultId: \"backup-vault-test\",\n description: \"This is a second backup vault built by Terraform.\",\n backupMinimumEnforcedRetentionDuration: \"100000s\",\n labels: {\n foo: \"bar1\",\n bar: \"baz1\",\n },\n annotations: {\n annotations1: \"bar1\",\n annotations2: \"baz1\",\n },\n forceUpdate: true,\n accessRestriction: \"WITHIN_ORGANIZATION\",\n ignoreInactiveDatasources: true,\n ignoreBackupPlanReferences: true,\n allowMissing: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbackup_vault_test = gcp.backupdisasterrecovery.BackupVault(\"backup-vault-test\",\n location=\"us-central1\",\n backup_vault_id=\"backup-vault-test\",\n description=\"This is a second backup vault built by Terraform.\",\n backup_minimum_enforced_retention_duration=\"100000s\",\n labels={\n \"foo\": \"bar1\",\n \"bar\": \"baz1\",\n },\n annotations={\n \"annotations1\": \"bar1\",\n \"annotations2\": \"baz1\",\n },\n force_update=True,\n access_restriction=\"WITHIN_ORGANIZATION\",\n ignore_inactive_datasources=True,\n ignore_backup_plan_references=True,\n allow_missing=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var backup_vault_test = new Gcp.BackupDisasterRecovery.BackupVault(\"backup-vault-test\", new()\n {\n Location = \"us-central1\",\n BackupVaultId = \"backup-vault-test\",\n Description = \"This is a second backup vault built by Terraform.\",\n BackupMinimumEnforcedRetentionDuration = \"100000s\",\n Labels = \n {\n { \"foo\", \"bar1\" },\n { \"bar\", \"baz1\" },\n },\n Annotations = \n {\n { \"annotations1\", \"bar1\" },\n { \"annotations2\", \"baz1\" },\n },\n ForceUpdate = true,\n AccessRestriction = \"WITHIN_ORGANIZATION\",\n IgnoreInactiveDatasources = true,\n IgnoreBackupPlanReferences = true,\n AllowMissing = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := backupdisasterrecovery.NewBackupVault(ctx, \"backup-vault-test\", \u0026backupdisasterrecovery.BackupVaultArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupVaultId: pulumi.String(\"backup-vault-test\"),\n\t\t\tDescription: pulumi.String(\"This is a second backup vault built by Terraform.\"),\n\t\t\tBackupMinimumEnforcedRetentionDuration: pulumi.String(\"100000s\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar1\"),\n\t\t\t\t\"bar\": pulumi.String(\"baz1\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"annotations1\": pulumi.String(\"bar1\"),\n\t\t\t\t\"annotations2\": pulumi.String(\"baz1\"),\n\t\t\t},\n\t\t\tForceUpdate: pulumi.Bool(true),\n\t\t\tAccessRestriction: pulumi.String(\"WITHIN_ORGANIZATION\"),\n\t\t\tIgnoreInactiveDatasources: pulumi.Bool(true),\n\t\t\tIgnoreBackupPlanReferences: pulumi.Bool(true),\n\t\t\tAllowMissing: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVault;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVaultArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var backup_vault_test = new BackupVault(\"backup-vault-test\", BackupVaultArgs.builder()\n .location(\"us-central1\")\n .backupVaultId(\"backup-vault-test\")\n .description(\"This is a second backup vault built by Terraform.\")\n .backupMinimumEnforcedRetentionDuration(\"100000s\")\n .labels(Map.ofEntries(\n Map.entry(\"foo\", \"bar1\"),\n Map.entry(\"bar\", \"baz1\")\n ))\n .annotations(Map.ofEntries(\n Map.entry(\"annotations1\", \"bar1\"),\n Map.entry(\"annotations2\", \"baz1\")\n ))\n .forceUpdate(\"true\")\n .accessRestriction(\"WITHIN_ORGANIZATION\")\n .ignoreInactiveDatasources(\"true\")\n .ignoreBackupPlanReferences(\"true\")\n .allowMissing(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n backup-vault-test:\n type: gcp:backupdisasterrecovery:BackupVault\n properties:\n location: us-central1\n backupVaultId: backup-vault-test\n description: This is a second backup vault built by Terraform.\n backupMinimumEnforcedRetentionDuration: 100000s\n labels:\n foo: bar1\n bar: baz1\n annotations:\n annotations1: bar1\n annotations2: baz1\n forceUpdate: 'true'\n accessRestriction: WITHIN_ORGANIZATION\n ignoreInactiveDatasources: 'true'\n ignoreBackupPlanReferences: 'true'\n allowMissing: 'true'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupVault can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}`\n\n* `{{project}}/{{location}}/{{backup_vault_id}}`\n\n* `{{location}}/{{backup_vault_id}}`\n\nWhen using the `pulumi import` command, BackupVault can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{project}}/{{location}}/{{backup_vault_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{location}}/{{backup_vault_id}}\n```\n\n",
+ "description": "Container to store and organize immutable and indelible backups.\n\n\n\n## Example Usage\n\n### Backup Dr Backup Vault Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst backup_vault_test = new gcp.backupdisasterrecovery.BackupVault(\"backup-vault-test\", {\n location: \"us-central1\",\n backupVaultId: \"backup-vault-test\",\n description: \"This is a second backup vault built by Terraform.\",\n backupMinimumEnforcedRetentionDuration: \"100000s\",\n annotations: {\n annotations1: \"bar1\",\n annotations2: \"baz1\",\n },\n labels: {\n foo: \"bar1\",\n bar: \"baz1\",\n },\n forceUpdate: true,\n accessRestriction: \"WITHIN_ORGANIZATION\",\n ignoreInactiveDatasources: true,\n ignoreBackupPlanReferences: true,\n allowMissing: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbackup_vault_test = gcp.backupdisasterrecovery.BackupVault(\"backup-vault-test\",\n location=\"us-central1\",\n backup_vault_id=\"backup-vault-test\",\n description=\"This is a second backup vault built by Terraform.\",\n backup_minimum_enforced_retention_duration=\"100000s\",\n annotations={\n \"annotations1\": \"bar1\",\n \"annotations2\": \"baz1\",\n },\n labels={\n \"foo\": \"bar1\",\n \"bar\": \"baz1\",\n },\n force_update=True,\n access_restriction=\"WITHIN_ORGANIZATION\",\n ignore_inactive_datasources=True,\n ignore_backup_plan_references=True,\n allow_missing=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var backup_vault_test = new Gcp.BackupDisasterRecovery.BackupVault(\"backup-vault-test\", new()\n {\n Location = \"us-central1\",\n BackupVaultId = \"backup-vault-test\",\n Description = \"This is a second backup vault built by Terraform.\",\n BackupMinimumEnforcedRetentionDuration = \"100000s\",\n Annotations = \n {\n { \"annotations1\", \"bar1\" },\n { \"annotations2\", \"baz1\" },\n },\n Labels = \n {\n { \"foo\", \"bar1\" },\n { \"bar\", \"baz1\" },\n },\n ForceUpdate = true,\n AccessRestriction = \"WITHIN_ORGANIZATION\",\n IgnoreInactiveDatasources = true,\n IgnoreBackupPlanReferences = true,\n AllowMissing = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := backupdisasterrecovery.NewBackupVault(ctx, \"backup-vault-test\", \u0026backupdisasterrecovery.BackupVaultArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupVaultId: pulumi.String(\"backup-vault-test\"),\n\t\t\tDescription: pulumi.String(\"This is a second backup vault built by Terraform.\"),\n\t\t\tBackupMinimumEnforcedRetentionDuration: pulumi.String(\"100000s\"),\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"annotations1\": pulumi.String(\"bar1\"),\n\t\t\t\t\"annotations2\": pulumi.String(\"baz1\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar1\"),\n\t\t\t\t\"bar\": pulumi.String(\"baz1\"),\n\t\t\t},\n\t\t\tForceUpdate: pulumi.Bool(true),\n\t\t\tAccessRestriction: pulumi.String(\"WITHIN_ORGANIZATION\"),\n\t\t\tIgnoreInactiveDatasources: pulumi.Bool(true),\n\t\t\tIgnoreBackupPlanReferences: pulumi.Bool(true),\n\t\t\tAllowMissing: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVault;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVaultArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var backup_vault_test = new BackupVault(\"backup-vault-test\", BackupVaultArgs.builder()\n .location(\"us-central1\")\n .backupVaultId(\"backup-vault-test\")\n .description(\"This is a second backup vault built by Terraform.\")\n .backupMinimumEnforcedRetentionDuration(\"100000s\")\n .annotations(Map.ofEntries(\n Map.entry(\"annotations1\", \"bar1\"),\n Map.entry(\"annotations2\", \"baz1\")\n ))\n .labels(Map.ofEntries(\n Map.entry(\"foo\", \"bar1\"),\n Map.entry(\"bar\", \"baz1\")\n ))\n .forceUpdate(\"true\")\n .accessRestriction(\"WITHIN_ORGANIZATION\")\n .ignoreInactiveDatasources(\"true\")\n .ignoreBackupPlanReferences(\"true\")\n .allowMissing(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n backup-vault-test:\n type: gcp:backupdisasterrecovery:BackupVault\n properties:\n location: us-central1\n backupVaultId: backup-vault-test\n description: This is a second backup vault built by Terraform.\n backupMinimumEnforcedRetentionDuration: 100000s\n annotations:\n annotations1: bar1\n annotations2: baz1\n labels:\n foo: bar1\n bar: baz1\n forceUpdate: 'true'\n accessRestriction: WITHIN_ORGANIZATION\n ignoreInactiveDatasources: 'true'\n ignoreBackupPlanReferences: 'true'\n allowMissing: 'true'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupVault can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}`\n\n* `{{project}}/{{location}}/{{backup_vault_id}}`\n\n* `{{location}}/{{backup_vault_id}}`\n\nWhen using the `pulumi import` command, BackupVault can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{project}}/{{location}}/{{backup_vault_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{location}}/{{backup_vault_id}}\n```\n\n",
"properties": {
"accessRestriction": {
"type": "string",
@@ -139433,6 +140389,10 @@
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
},
+ "rowAffinity": {
+ "type": "boolean",
+ "description": "Must be used with multi-cluster routing. If true, then this app profile will use row affinity sticky routing. With row\naffinity, Bigtable will route single row key requests based on the row key, rather than randomly. Instead, each row key\nwill be assigned to a cluster by Cloud Bigtable, and will stick to that cluster. Choosing this option improves\nread-your-writes consistency for most requests under most circumstances, without sacrificing availability. Consistency\nis not guaranteed, as requests may still fail over between clusters in the event of errors or latency.\n"
+ },
"singleClusterRouting": {
"$ref": "#/types/gcp:bigquery/AppProfileSingleClusterRouting:AppProfileSingleClusterRouting",
"description": "Use a single-cluster routing policy.\nStructure is documented below.\n"
@@ -139487,6 +140447,10 @@
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
},
+ "rowAffinity": {
+ "type": "boolean",
+ "description": "Must be used with multi-cluster routing. If true, then this app profile will use row affinity sticky routing. With row\naffinity, Bigtable will route single row key requests based on the row key, rather than randomly. Instead, each row key\nwill be assigned to a cluster by Cloud Bigtable, and will stick to that cluster. Choosing this option improves\nread-your-writes consistency for most requests under most circumstances, without sacrificing availability. Consistency\nis not guaranteed, as requests may still fail over between clusters in the event of errors or latency.\n"
+ },
"singleClusterRouting": {
"$ref": "#/types/gcp:bigquery/AppProfileSingleClusterRouting:AppProfileSingleClusterRouting",
"description": "Use a single-cluster routing policy.\nStructure is documented below.\n"
@@ -139544,6 +140508,10 @@
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
},
+ "rowAffinity": {
+ "type": "boolean",
+ "description": "Must be used with multi-cluster routing. If true, then this app profile will use row affinity sticky routing. With row\naffinity, Bigtable will route single row key requests based on the row key, rather than randomly. Instead, each row key\nwill be assigned to a cluster by Cloud Bigtable, and will stick to that cluster. Choosing this option improves\nread-your-writes consistency for most requests under most circumstances, without sacrificing availability. Consistency\nis not guaranteed, as requests may still fail over between clusters in the event of errors or latency.\n"
+ },
"singleClusterRouting": {
"$ref": "#/types/gcp:bigquery/AppProfileSingleClusterRouting:AppProfileSingleClusterRouting",
"description": "Use a single-cluster routing policy.\nStructure is documented below.\n"
@@ -150440,6 +151408,10 @@
"$ref": "#/types/gcp:cloudbuild/WorkerPoolNetworkConfig:WorkerPoolNetworkConfig",
"description": "Network configuration for the `WorkerPool`. Structure is documented below.\n"
},
+ "privateServiceConnect": {
+ "$ref": "#/types/gcp:cloudbuild/WorkerPoolPrivateServiceConnect:WorkerPoolPrivateServiceConnect",
+ "description": "Private Service Connect configuration for the pool.\n"
+ },
"project": {
"type": "string",
"description": "The project for the resource\n"
@@ -150500,6 +151472,11 @@
"description": "Network configuration for the `WorkerPool`. Structure is documented below.\n",
"willReplaceOnChanges": true
},
+ "privateServiceConnect": {
+ "$ref": "#/types/gcp:cloudbuild/WorkerPoolPrivateServiceConnect:WorkerPoolPrivateServiceConnect",
+ "description": "Private Service Connect configuration for the pool.\n",
+ "willReplaceOnChanges": true
+ },
"project": {
"type": "string",
"description": "The project for the resource\n",
@@ -150556,6 +151533,11 @@
"description": "Network configuration for the `WorkerPool`. Structure is documented below.\n",
"willReplaceOnChanges": true
},
+ "privateServiceConnect": {
+ "$ref": "#/types/gcp:cloudbuild/WorkerPoolPrivateServiceConnect:WorkerPoolPrivateServiceConnect",
+ "description": "Private Service Connect configuration for the pool.\n",
+ "willReplaceOnChanges": true
+ },
"project": {
"type": "string",
"description": "The project for the resource\n",
@@ -152567,6 +153549,13 @@
"$ref": "#/types/gcp:clouddeploy/TargetAnthosCluster:TargetAnthosCluster",
"description": "Information specifying an Anthos Cluster.\n"
},
+ "associatedEntities": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:clouddeploy/TargetAssociatedEntity:TargetAssociatedEntity"
+ },
+ "description": "Optional. Map of entity IDs to their associated entities. Associated entities allows specifying places other than the deployment target for specific features. For example, the Gateway API canary can be configured to deploy the HTTPRoute to a different cluster(s) than the deployment cluster using associated entities. An entity ID must consist of lower-case letters, numbers, and hyphens, start with a letter and end with a letter or a number, and have a max length of 63 characters. In other words, it must match the following regex: `^a-z?$`.\n"
+ },
"createTime": {
"type": "string",
"description": "Output only. Time at which the `Target` was created.\n"
@@ -152693,6 +153682,13 @@
"$ref": "#/types/gcp:clouddeploy/TargetAnthosCluster:TargetAnthosCluster",
"description": "Information specifying an Anthos Cluster.\n"
},
+ "associatedEntities": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:clouddeploy/TargetAssociatedEntity:TargetAssociatedEntity"
+ },
+ "description": "Optional. Map of entity IDs to their associated entities. Associated entities allows specifying places other than the deployment target for specific features. For example, the Gateway API canary can be configured to deploy the HTTPRoute to a different cluster(s) than the deployment cluster using associated entities. An entity ID must consist of lower-case letters, numbers, and hyphens, start with a letter and end with a letter or a number, and have a max length of 63 characters. In other words, it must match the following regex: `^a-z?$`.\n"
+ },
"customTarget": {
"$ref": "#/types/gcp:clouddeploy/TargetCustomTarget:TargetCustomTarget",
"description": "Optional. Information specifying a Custom Target.\n"
@@ -152771,6 +153767,13 @@
"$ref": "#/types/gcp:clouddeploy/TargetAnthosCluster:TargetAnthosCluster",
"description": "Information specifying an Anthos Cluster.\n"
},
+ "associatedEntities": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:clouddeploy/TargetAssociatedEntity:TargetAssociatedEntity"
+ },
+ "description": "Optional. Map of entity IDs to their associated entities. Associated entities allows specifying places other than the deployment target for specific features. For example, the Gateway API canary can be configured to deploy the HTTPRoute to a different cluster(s) than the deployment cluster using associated entities. An entity ID must consist of lower-case letters, numbers, and hyphens, start with a letter and end with a letter or a number, and have a max length of 63 characters. In other words, it must match the following regex: `^a-z?$`.\n"
+ },
"createTime": {
"type": "string",
"description": "Output only. Time at which the `Target` was created.\n"
@@ -156066,7 +157069,7 @@
},
"expireTime": {
"type": "string",
- "description": "For a deleted resource, the time after which it will be permamently deleted.\n"
+ "description": "For a deleted resource, the time after which it will be permanently deleted.\n"
},
"generation": {
"type": "string",
@@ -156307,7 +157310,7 @@
},
"expireTime": {
"type": "string",
- "description": "For a deleted resource, the time after which it will be permamently deleted.\n"
+ "description": "For a deleted resource, the time after which it will be permanently deleted.\n"
},
"generation": {
"type": "string",
@@ -156795,7 +157798,7 @@
},
"expireTime": {
"type": "string",
- "description": "For a deleted resource, the time after which it will be permamently deleted.\n"
+ "description": "For a deleted resource, the time after which it will be permanently deleted.\n"
},
"generation": {
"type": "string",
@@ -157108,7 +158111,7 @@
},
"expireTime": {
"type": "string",
- "description": "For a deleted resource, the time after which it will be permamently deleted.\n"
+ "description": "For a deleted resource, the time after which it will be permanently deleted.\n"
},
"generation": {
"type": "string",
@@ -158310,7 +159313,7 @@
}
},
"gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap": {
- "description": "## Example Usage\n\n### Composer User Workloads Config Map Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst environment = new gcp.composer.Environment(\"environment\", {\n name: \"test-environment\",\n region: \"us-central1\",\n config: {\n softwareConfig: {\n imageVersion: \"composer-3-airflow-2\",\n },\n },\n});\nconst configMap = new gcp.composer.UserWorkloadsConfigMap(\"config_map\", {\n name: \"test-config-map\",\n region: \"us-central1\",\n environment: environment.name,\n data: {\n api_host: \"apihost:443\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenvironment = gcp.composer.Environment(\"environment\",\n name=\"test-environment\",\n region=\"us-central1\",\n config={\n \"software_config\": {\n \"image_version\": \"composer-3-airflow-2\",\n },\n })\nconfig_map = gcp.composer.UserWorkloadsConfigMap(\"config_map\",\n name=\"test-config-map\",\n region=\"us-central1\",\n environment=environment.name,\n data={\n \"api_host\": \"apihost:443\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var environment = new Gcp.Composer.Environment(\"environment\", new()\n {\n Name = \"test-environment\",\n Region = \"us-central1\",\n Config = new Gcp.Composer.Inputs.EnvironmentConfigArgs\n {\n SoftwareConfig = new Gcp.Composer.Inputs.EnvironmentConfigSoftwareConfigArgs\n {\n ImageVersion = \"composer-3-airflow-2\",\n },\n },\n });\n\n var configMap = new Gcp.Composer.UserWorkloadsConfigMap(\"config_map\", new()\n {\n Name = \"test-config-map\",\n Region = \"us-central1\",\n Environment = environment.Name,\n Data = \n {\n { \"api_host\", \"apihost:443\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/composer\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tenvironment, err := composer.NewEnvironment(ctx, \"environment\", \u0026composer.EnvironmentArgs{\n\t\t\tName: pulumi.String(\"test-environment\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026composer.EnvironmentConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026composer.EnvironmentConfigSoftwareConfigArgs{\n\t\t\t\t\tImageVersion: pulumi.String(\"composer-3-airflow-2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = composer.NewUserWorkloadsConfigMap(ctx, \"config_map\", \u0026composer.UserWorkloadsConfigMapArgs{\n\t\t\tName: pulumi.String(\"test-config-map\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tEnvironment: environment.Name,\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"api_host\": pulumi.String(\"apihost:443\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.composer.Environment;\nimport com.pulumi.gcp.composer.EnvironmentArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.composer.UserWorkloadsConfigMap;\nimport com.pulumi.gcp.composer.UserWorkloadsConfigMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var environment = new Environment(\"environment\", EnvironmentArgs.builder()\n .name(\"test-environment\")\n .region(\"us-central1\")\n .config(EnvironmentConfigArgs.builder()\n .softwareConfig(EnvironmentConfigSoftwareConfigArgs.builder()\n .imageVersion(\"composer-3-airflow-2\")\n .build())\n .build())\n .build());\n\n var configMap = new UserWorkloadsConfigMap(\"configMap\", UserWorkloadsConfigMapArgs.builder()\n .name(\"test-config-map\")\n .region(\"us-central1\")\n .environment(environment.name())\n .data(Map.of(\"api_host\", \"apihost:443\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n environment:\n type: gcp:composer:Environment\n properties:\n name: test-environment\n region: us-central1\n config:\n softwareConfig:\n imageVersion: composer-3-airflow-2\n configMap:\n type: gcp:composer:UserWorkloadsConfigMap\n name: config_map\n properties:\n name: test-config-map\n region: us-central1\n environment: ${environment.name}\n data:\n api_host: apihost:443\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUserWorkloadsConfigMap can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsConfigMaps/{{name}}`\n\n* `{{project}}/{{region}}/{{environment}}/{{name}}`\n\n* `{{region}}/{{environment}}/{{name}}`\n\n* `{{environment}}/{{name}}`\n\nWhen using the `pulumi import` command, UserWorkloadsConfigMap can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap default projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsConfigMaps/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap default {{project}}/{{region}}/{{environment}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap default {{region}}/{{environment}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap default {{environment}}/{{name}}\n```\n\n",
+ "description": "User workloads ConfigMap used by Airflow tasks that run with Kubernetes Executor or KubernetesPodOperator.\nIntended for Composer 3 Environments.\n\n\nTo get more information about UserWorkloadsConfigMap, see:\n\n* [API documentation](https://cloud.google.com/composer/docs/reference/rest/v1/projects.locations.environments.userWorkloadsConfigMaps)\n\n## Example Usage\n\n### Composer User Workloads Config Map Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst environment = new gcp.composer.Environment(\"environment\", {\n name: \"test-environment\",\n region: \"us-central1\",\n config: {\n softwareConfig: {\n imageVersion: \"composer-3-airflow-2\",\n },\n },\n});\nconst configMap = new gcp.composer.UserWorkloadsConfigMap(\"config_map\", {\n name: \"test-config-map\",\n region: \"us-central1\",\n environment: environment.name,\n data: {\n api_host: \"apihost:443\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenvironment = gcp.composer.Environment(\"environment\",\n name=\"test-environment\",\n region=\"us-central1\",\n config={\n \"software_config\": {\n \"image_version\": \"composer-3-airflow-2\",\n },\n })\nconfig_map = gcp.composer.UserWorkloadsConfigMap(\"config_map\",\n name=\"test-config-map\",\n region=\"us-central1\",\n environment=environment.name,\n data={\n \"api_host\": \"apihost:443\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var environment = new Gcp.Composer.Environment(\"environment\", new()\n {\n Name = \"test-environment\",\n Region = \"us-central1\",\n Config = new Gcp.Composer.Inputs.EnvironmentConfigArgs\n {\n SoftwareConfig = new Gcp.Composer.Inputs.EnvironmentConfigSoftwareConfigArgs\n {\n ImageVersion = \"composer-3-airflow-2\",\n },\n },\n });\n\n var configMap = new Gcp.Composer.UserWorkloadsConfigMap(\"config_map\", new()\n {\n Name = \"test-config-map\",\n Region = \"us-central1\",\n Environment = environment.Name,\n Data = \n {\n { \"api_host\", \"apihost:443\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/composer\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tenvironment, err := composer.NewEnvironment(ctx, \"environment\", \u0026composer.EnvironmentArgs{\n\t\t\tName: pulumi.String(\"test-environment\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026composer.EnvironmentConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026composer.EnvironmentConfigSoftwareConfigArgs{\n\t\t\t\t\tImageVersion: pulumi.String(\"composer-3-airflow-2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = composer.NewUserWorkloadsConfigMap(ctx, \"config_map\", \u0026composer.UserWorkloadsConfigMapArgs{\n\t\t\tName: pulumi.String(\"test-config-map\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tEnvironment: environment.Name,\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"api_host\": pulumi.String(\"apihost:443\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.composer.Environment;\nimport com.pulumi.gcp.composer.EnvironmentArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.composer.UserWorkloadsConfigMap;\nimport com.pulumi.gcp.composer.UserWorkloadsConfigMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var environment = new Environment(\"environment\", EnvironmentArgs.builder()\n .name(\"test-environment\")\n .region(\"us-central1\")\n .config(EnvironmentConfigArgs.builder()\n .softwareConfig(EnvironmentConfigSoftwareConfigArgs.builder()\n .imageVersion(\"composer-3-airflow-2\")\n .build())\n .build())\n .build());\n\n var configMap = new UserWorkloadsConfigMap(\"configMap\", UserWorkloadsConfigMapArgs.builder()\n .name(\"test-config-map\")\n .region(\"us-central1\")\n .environment(environment.name())\n .data(Map.of(\"api_host\", \"apihost:443\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n environment:\n type: gcp:composer:Environment\n properties:\n name: test-environment\n region: us-central1\n config:\n softwareConfig:\n imageVersion: composer-3-airflow-2\n configMap:\n type: gcp:composer:UserWorkloadsConfigMap\n name: config_map\n properties:\n name: test-config-map\n region: us-central1\n environment: ${environment.name}\n data:\n api_host: apihost:443\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUserWorkloadsConfigMap can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsConfigMaps/{{name}}`\n\n* `{{project}}/{{region}}/{{environment}}/{{name}}`\n\n* `{{region}}/{{environment}}/{{name}}`\n\n* `{{environment}}/{{name}}`\n\nWhen using the `pulumi import` command, UserWorkloadsConfigMap can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap default projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsConfigMaps/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap default {{project}}/{{region}}/{{environment}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap default {{region}}/{{environment}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsConfigMap:UserWorkloadsConfigMap default {{environment}}/{{name}}\n```\n\n",
"properties": {
"data": {
"type": "object",
@@ -158409,7 +159412,7 @@
}
},
"gcp:composer/userWorkloadsSecret:UserWorkloadsSecret": {
- "description": "## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst example = new gcp.composer.Environment(\"example\", {\n name: \"example-environment\",\n project: \"example-project\",\n region: \"us-central1\",\n config: {\n softwareConfig: {\n imageVersion: \"example-image-version\",\n },\n },\n});\nconst exampleUserWorkloadsSecret = new gcp.composer.UserWorkloadsSecret(\"example\", {\n name: \"example-secret\",\n project: \"example-project\",\n region: \"us-central1\",\n environment: example.name,\n data: {\n email: std.base64encode({\n input: \"example-email\",\n }).then(invoke =\u003e invoke.result),\n password: std.base64encode({\n input: \"example-password\",\n }).then(invoke =\u003e invoke.result),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\nexample = gcp.composer.Environment(\"example\",\n name=\"example-environment\",\n project=\"example-project\",\n region=\"us-central1\",\n config={\n \"software_config\": {\n \"image_version\": \"example-image-version\",\n },\n })\nexample_user_workloads_secret = gcp.composer.UserWorkloadsSecret(\"example\",\n name=\"example-secret\",\n project=\"example-project\",\n region=\"us-central1\",\n environment=example.name,\n data={\n \"email\": std.base64encode(input=\"example-email\").result,\n \"password\": std.base64encode(input=\"example-password\").result,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Composer.Environment(\"example\", new()\n {\n Name = \"example-environment\",\n Project = \"example-project\",\n Region = \"us-central1\",\n Config = new Gcp.Composer.Inputs.EnvironmentConfigArgs\n {\n SoftwareConfig = new Gcp.Composer.Inputs.EnvironmentConfigSoftwareConfigArgs\n {\n ImageVersion = \"example-image-version\",\n },\n },\n });\n\n var exampleUserWorkloadsSecret = new Gcp.Composer.UserWorkloadsSecret(\"example\", new()\n {\n Name = \"example-secret\",\n Project = \"example-project\",\n Region = \"us-central1\",\n Environment = example.Name,\n Data = \n {\n { \"email\", Std.Base64encode.Invoke(new()\n {\n Input = \"example-email\",\n }).Apply(invoke =\u003e invoke.Result) },\n { \"password\", Std.Base64encode.Invoke(new()\n {\n Input = \"example-password\",\n }).Apply(invoke =\u003e invoke.Result) },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/composer\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := composer.NewEnvironment(ctx, \"example\", \u0026composer.EnvironmentArgs{\n\t\t\tName: pulumi.String(\"example-environment\"),\n\t\t\tProject: pulumi.String(\"example-project\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026composer.EnvironmentConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026composer.EnvironmentConfigSoftwareConfigArgs{\n\t\t\t\t\tImageVersion: pulumi.String(\"example-image-version\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeBase64encode, err := std.Base64encode(ctx, \u0026std.Base64encodeArgs{\n\t\t\tInput: \"example-email\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeBase64encode1, err := std.Base64encode(ctx, \u0026std.Base64encodeArgs{\n\t\t\tInput: \"example-password\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = composer.NewUserWorkloadsSecret(ctx, \"example\", \u0026composer.UserWorkloadsSecretArgs{\n\t\t\tName: pulumi.String(\"example-secret\"),\n\t\t\tProject: pulumi.String(\"example-project\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tEnvironment: example.Name,\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"email\": pulumi.String(invokeBase64encode.Result),\n\t\t\t\t\"password\": pulumi.String(invokeBase64encode1.Result),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.composer.Environment;\nimport com.pulumi.gcp.composer.EnvironmentArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.composer.UserWorkloadsSecret;\nimport com.pulumi.gcp.composer.UserWorkloadsSecretArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Environment(\"example\", EnvironmentArgs.builder()\n .name(\"example-environment\")\n .project(\"example-project\")\n .region(\"us-central1\")\n .config(EnvironmentConfigArgs.builder()\n .softwareConfig(EnvironmentConfigSoftwareConfigArgs.builder()\n .imageVersion(\"example-image-version\")\n .build())\n .build())\n .build());\n\n var exampleUserWorkloadsSecret = new UserWorkloadsSecret(\"exampleUserWorkloadsSecret\", UserWorkloadsSecretArgs.builder()\n .name(\"example-secret\")\n .project(\"example-project\")\n .region(\"us-central1\")\n .environment(example.name())\n .data(Map.ofEntries(\n Map.entry(\"email\", StdFunctions.base64encode(Base64encodeArgs.builder()\n .input(\"example-email\")\n .build()).result()),\n Map.entry(\"password\", StdFunctions.base64encode(Base64encodeArgs.builder()\n .input(\"example-password\")\n .build()).result())\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:composer:Environment\n properties:\n name: example-environment\n project: example-project\n region: us-central1\n config:\n softwareConfig:\n imageVersion: example-image-version\n exampleUserWorkloadsSecret:\n type: gcp:composer:UserWorkloadsSecret\n name: example\n properties:\n name: example-secret\n project: example-project\n region: us-central1\n environment: ${example.name}\n data:\n email:\n fn::invoke:\n function: std:base64encode\n arguments:\n input: example-email\n return: result\n password:\n fn::invoke:\n function: std:base64encode\n arguments:\n input: example-password\n return: result\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSecret can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsSecrets/{{name}}`\n\n* `{{project}}/{{region}}/{{environment}}/{{name}}`\n\n* `{{environment}}/{{name}}`\n\nWhen using the `pulumi import` command, Environment can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsSecret:UserWorkloadsSecret example projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsSecrets/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsSecret:UserWorkloadsSecret example {{project}}/{{region}}/{{environment}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsSecret:UserWorkloadsSecret example {{environment}}/{{name}}\n```\n\n",
+ "description": "User workloads Secret used by Airflow tasks that run with Kubernetes Executor or KubernetesPodOperator. \nIntended for Composer 3 Environments.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst example = new gcp.composer.Environment(\"example\", {\n name: \"example-environment\",\n project: \"example-project\",\n region: \"us-central1\",\n config: {\n softwareConfig: {\n imageVersion: \"example-image-version\",\n },\n },\n});\nconst exampleUserWorkloadsSecret = new gcp.composer.UserWorkloadsSecret(\"example\", {\n name: \"example-secret\",\n project: \"example-project\",\n region: \"us-central1\",\n environment: example.name,\n data: {\n email: std.base64encode({\n input: \"example-email\",\n }).then(invoke =\u003e invoke.result),\n password: std.base64encode({\n input: \"example-password\",\n }).then(invoke =\u003e invoke.result),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\nexample = gcp.composer.Environment(\"example\",\n name=\"example-environment\",\n project=\"example-project\",\n region=\"us-central1\",\n config={\n \"software_config\": {\n \"image_version\": \"example-image-version\",\n },\n })\nexample_user_workloads_secret = gcp.composer.UserWorkloadsSecret(\"example\",\n name=\"example-secret\",\n project=\"example-project\",\n region=\"us-central1\",\n environment=example.name,\n data={\n \"email\": std.base64encode(input=\"example-email\").result,\n \"password\": std.base64encode(input=\"example-password\").result,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Composer.Environment(\"example\", new()\n {\n Name = \"example-environment\",\n Project = \"example-project\",\n Region = \"us-central1\",\n Config = new Gcp.Composer.Inputs.EnvironmentConfigArgs\n {\n SoftwareConfig = new Gcp.Composer.Inputs.EnvironmentConfigSoftwareConfigArgs\n {\n ImageVersion = \"example-image-version\",\n },\n },\n });\n\n var exampleUserWorkloadsSecret = new Gcp.Composer.UserWorkloadsSecret(\"example\", new()\n {\n Name = \"example-secret\",\n Project = \"example-project\",\n Region = \"us-central1\",\n Environment = example.Name,\n Data = \n {\n { \"email\", Std.Base64encode.Invoke(new()\n {\n Input = \"example-email\",\n }).Apply(invoke =\u003e invoke.Result) },\n { \"password\", Std.Base64encode.Invoke(new()\n {\n Input = \"example-password\",\n }).Apply(invoke =\u003e invoke.Result) },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/composer\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := composer.NewEnvironment(ctx, \"example\", \u0026composer.EnvironmentArgs{\n\t\t\tName: pulumi.String(\"example-environment\"),\n\t\t\tProject: pulumi.String(\"example-project\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026composer.EnvironmentConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026composer.EnvironmentConfigSoftwareConfigArgs{\n\t\t\t\t\tImageVersion: pulumi.String(\"example-image-version\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeBase64encode, err := std.Base64encode(ctx, \u0026std.Base64encodeArgs{\n\t\t\tInput: \"example-email\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeBase64encode1, err := std.Base64encode(ctx, \u0026std.Base64encodeArgs{\n\t\t\tInput: \"example-password\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = composer.NewUserWorkloadsSecret(ctx, \"example\", \u0026composer.UserWorkloadsSecretArgs{\n\t\t\tName: pulumi.String(\"example-secret\"),\n\t\t\tProject: pulumi.String(\"example-project\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tEnvironment: example.Name,\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"email\": pulumi.String(invokeBase64encode.Result),\n\t\t\t\t\"password\": pulumi.String(invokeBase64encode1.Result),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.composer.Environment;\nimport com.pulumi.gcp.composer.EnvironmentArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.composer.UserWorkloadsSecret;\nimport com.pulumi.gcp.composer.UserWorkloadsSecretArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Environment(\"example\", EnvironmentArgs.builder()\n .name(\"example-environment\")\n .project(\"example-project\")\n .region(\"us-central1\")\n .config(EnvironmentConfigArgs.builder()\n .softwareConfig(EnvironmentConfigSoftwareConfigArgs.builder()\n .imageVersion(\"example-image-version\")\n .build())\n .build())\n .build());\n\n var exampleUserWorkloadsSecret = new UserWorkloadsSecret(\"exampleUserWorkloadsSecret\", UserWorkloadsSecretArgs.builder()\n .name(\"example-secret\")\n .project(\"example-project\")\n .region(\"us-central1\")\n .environment(example.name())\n .data(Map.ofEntries(\n Map.entry(\"email\", StdFunctions.base64encode(Base64encodeArgs.builder()\n .input(\"example-email\")\n .build()).result()),\n Map.entry(\"password\", StdFunctions.base64encode(Base64encodeArgs.builder()\n .input(\"example-password\")\n .build()).result())\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:composer:Environment\n properties:\n name: example-environment\n project: example-project\n region: us-central1\n config:\n softwareConfig:\n imageVersion: example-image-version\n exampleUserWorkloadsSecret:\n type: gcp:composer:UserWorkloadsSecret\n name: example\n properties:\n name: example-secret\n project: example-project\n region: us-central1\n environment: ${example.name}\n data:\n email:\n fn::invoke:\n function: std:base64encode\n arguments:\n input: example-email\n return: result\n password:\n fn::invoke:\n function: std:base64encode\n arguments:\n input: example-password\n return: result\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSecret can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsSecrets/{{name}}`\n\n* `{{project}}/{{region}}/{{environment}}/{{name}}`\n\n* `{{environment}}/{{name}}`\n\nWhen using the `pulumi import` command, Environment can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsSecret:UserWorkloadsSecret example projects/{{project}}/locations/{{region}}/environments/{{environment}}/userWorkloadsSecrets/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsSecret:UserWorkloadsSecret example {{project}}/{{region}}/{{environment}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:composer/userWorkloadsSecret:UserWorkloadsSecret example {{environment}}/{{name}}\n```\n\n",
"properties": {
"data": {
"type": "object",
@@ -160647,7 +161650,7 @@
},
"storagePool": {
"type": "string",
- "description": "The URL of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n"
+ "description": "The URL or the name of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /zones/{zone}/storagePools/{storagePool}\n* /{storagePool}\n"
},
"type": {
"type": "string",
@@ -160812,7 +161815,7 @@
},
"storagePool": {
"type": "string",
- "description": "The URL of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n",
+ "description": "The URL or the name of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /zones/{zone}/storagePools/{storagePool}\n* /{storagePool}\n",
"willReplaceOnChanges": true
},
"type": {
@@ -161001,7 +162004,7 @@
},
"storagePool": {
"type": "string",
- "description": "The URL of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n",
+ "description": "The URL or the name of the storage pool in which the new disk is created.\nFor example:\n* https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /projects/{project}/zones/{zone}/storagePools/{storagePool}\n* /zones/{zone}/storagePools/{storagePool}\n* /{storagePool}\n",
"willReplaceOnChanges": true
},
"type": {
@@ -162166,7 +163169,7 @@
}
},
"gcp:compute/firewallPolicyRule:FirewallPolicyRule": {
- "description": "## Example Usage\n\n### Firewall Policy Rule\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicGlobalNetworksecurityAddressGroup = new gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\", {\n name: \"address\",\n parent: \"organizations/123456789\",\n description: \"Sample global networksecurity_address_group\",\n location: \"global\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst folder = new gcp.organizations.Folder(\"folder\", {\n displayName: \"folder\",\n parent: \"organizations/123456789\",\n deletionProtection: false,\n});\nconst _default = new gcp.compute.FirewallPolicy(\"default\", {\n parent: folder.id,\n shortName: \"policy\",\n description: \"Resource created for Terraform acceptance testing\",\n});\nconst policyRule = new gcp.compute.FirewallPolicyRule(\"policy_rule\", {\n firewallPolicy: _default.name,\n description: \"Resource created for Terraform acceptance testing\",\n priority: 9000,\n enableLogging: true,\n action: \"allow\",\n direction: \"EGRESS\",\n disabled: false,\n match: {\n layer4Configs: [\n {\n ipProtocol: \"tcp\",\n ports: [\"8080\"],\n },\n {\n ipProtocol: \"udp\",\n ports: [\"22\"],\n },\n ],\n destIpRanges: [\"11.100.0.1/32\"],\n destFqdns: [],\n destRegionCodes: [\"US\"],\n destThreatIntelligences: [\"iplist-known-malicious-ips\"],\n srcAddressGroups: [],\n destAddressGroups: [basicGlobalNetworksecurityAddressGroup.id],\n },\n targetServiceAccounts: [\"my@service-account.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_global_networksecurity_address_group = gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\",\n name=\"address\",\n parent=\"organizations/123456789\",\n description=\"Sample global networksecurity_address_group\",\n location=\"global\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nfolder = gcp.organizations.Folder(\"folder\",\n display_name=\"folder\",\n parent=\"organizations/123456789\",\n deletion_protection=False)\ndefault = gcp.compute.FirewallPolicy(\"default\",\n parent=folder.id,\n short_name=\"policy\",\n description=\"Resource created for Terraform acceptance testing\")\npolicy_rule = gcp.compute.FirewallPolicyRule(\"policy_rule\",\n firewall_policy=default.name,\n description=\"Resource created for Terraform acceptance testing\",\n priority=9000,\n enable_logging=True,\n action=\"allow\",\n direction=\"EGRESS\",\n disabled=False,\n match={\n \"layer4_configs\": [\n {\n \"ip_protocol\": \"tcp\",\n \"ports\": [\"8080\"],\n },\n {\n \"ip_protocol\": \"udp\",\n \"ports\": [\"22\"],\n },\n ],\n \"dest_ip_ranges\": [\"11.100.0.1/32\"],\n \"dest_fqdns\": [],\n \"dest_region_codes\": [\"US\"],\n \"dest_threat_intelligences\": [\"iplist-known-malicious-ips\"],\n \"src_address_groups\": [],\n \"dest_address_groups\": [basic_global_networksecurity_address_group.id],\n },\n target_service_accounts=[\"my@service-account.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicGlobalNetworksecurityAddressGroup = new Gcp.NetworkSecurity.AddressGroup(\"basic_global_networksecurity_address_group\", new()\n {\n Name = \"address\",\n Parent = \"organizations/123456789\",\n Description = \"Sample global networksecurity_address_group\",\n Location = \"global\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var folder = new Gcp.Organizations.Folder(\"folder\", new()\n {\n DisplayName = \"folder\",\n Parent = \"organizations/123456789\",\n DeletionProtection = false,\n });\n\n var @default = new Gcp.Compute.FirewallPolicy(\"default\", new()\n {\n Parent = folder.Id,\n ShortName = \"policy\",\n Description = \"Resource created for Terraform acceptance testing\",\n });\n\n var policyRule = new Gcp.Compute.FirewallPolicyRule(\"policy_rule\", new()\n {\n FirewallPolicy = @default.Name,\n Description = \"Resource created for Terraform acceptance testing\",\n Priority = 9000,\n EnableLogging = true,\n Action = \"allow\",\n Direction = \"EGRESS\",\n Disabled = false,\n Match = new Gcp.Compute.Inputs.FirewallPolicyRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.FirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"8080\",\n },\n },\n new Gcp.Compute.Inputs.FirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"udp\",\n Ports = new[]\n {\n \"22\",\n },\n },\n },\n DestIpRanges = new[]\n {\n \"11.100.0.1/32\",\n },\n DestFqdns = new() { },\n DestRegionCodes = new[]\n {\n \"US\",\n },\n DestThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n },\n SrcAddressGroups = new() { },\n DestAddressGroups = new[]\n {\n basicGlobalNetworksecurityAddressGroup.Id,\n },\n },\n TargetServiceAccounts = new[]\n {\n \"my@service-account.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicGlobalNetworksecurityAddressGroup, err := networksecurity.NewAddressGroup(ctx, \"basic_global_networksecurity_address_group\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"address\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDescription: pulumi.String(\"Sample global networksecurity_address_group\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfolder, err := organizations.NewFolder(ctx, \"folder\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"folder\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewFirewallPolicy(ctx, \"default\", \u0026compute.FirewallPolicyArgs{\n\t\t\tParent: folder.ID(),\n\t\t\tShortName: pulumi.String(\"policy\"),\n\t\t\tDescription: pulumi.String(\"Resource created for Terraform acceptance testing\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewFirewallPolicyRule(ctx, \"policy_rule\", \u0026compute.FirewallPolicyRuleArgs{\n\t\t\tFirewallPolicy: _default.Name,\n\t\t\tDescription: pulumi.String(\"Resource created for Terraform acceptance testing\"),\n\t\t\tPriority: pulumi.Int(9000),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDirection: pulumi.String(\"EGRESS\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tMatch: \u0026compute.FirewallPolicyRuleMatchArgs{\n\t\t\t\tLayer4Configs: compute.FirewallPolicyRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\u0026compute.FirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"8080\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026compute.FirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"udp\"),\n\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"22\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tDestIpRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"11.100.0.1/32\"),\n\t\t\t\t},\n\t\t\t\tDestFqdns: pulumi.StringArray{},\n\t\t\t\tDestRegionCodes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t},\n\t\t\t\tDestThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t},\n\t\t\t\tSrcAddressGroups: pulumi.StringArray{},\n\t\t\t\tDestAddressGroups: pulumi.StringArray{\n\t\t\t\t\tbasicGlobalNetworksecurityAddressGroup.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my@service-account.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.compute.FirewallPolicy;\nimport com.pulumi.gcp.compute.FirewallPolicyArgs;\nimport com.pulumi.gcp.compute.FirewallPolicyRule;\nimport com.pulumi.gcp.compute.FirewallPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallPolicyRuleMatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicGlobalNetworksecurityAddressGroup = new AddressGroup(\"basicGlobalNetworksecurityAddressGroup\", AddressGroupArgs.builder()\n .name(\"address\")\n .parent(\"organizations/123456789\")\n .description(\"Sample global networksecurity_address_group\")\n .location(\"global\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var folder = new Folder(\"folder\", FolderArgs.builder()\n .displayName(\"folder\")\n .parent(\"organizations/123456789\")\n .deletionProtection(false)\n .build());\n\n var default_ = new FirewallPolicy(\"default\", FirewallPolicyArgs.builder()\n .parent(folder.id())\n .shortName(\"policy\")\n .description(\"Resource created for Terraform acceptance testing\")\n .build());\n\n var policyRule = new FirewallPolicyRule(\"policyRule\", FirewallPolicyRuleArgs.builder()\n .firewallPolicy(default_.name())\n .description(\"Resource created for Terraform acceptance testing\")\n .priority(9000)\n .enableLogging(true)\n .action(\"allow\")\n .direction(\"EGRESS\")\n .disabled(false)\n .match(FirewallPolicyRuleMatchArgs.builder()\n .layer4Configs( \n FirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports(8080)\n .build(),\n FirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"udp\")\n .ports(22)\n .build())\n .destIpRanges(\"11.100.0.1/32\")\n .destFqdns()\n .destRegionCodes(\"US\")\n .destThreatIntelligences(\"iplist-known-malicious-ips\")\n .srcAddressGroups()\n .destAddressGroups(basicGlobalNetworksecurityAddressGroup.id())\n .build())\n .targetServiceAccounts(\"my@service-account.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicGlobalNetworksecurityAddressGroup:\n type: gcp:networksecurity:AddressGroup\n name: basic_global_networksecurity_address_group\n properties:\n name: address\n parent: organizations/123456789\n description: Sample global networksecurity_address_group\n location: global\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n folder:\n type: gcp:organizations:Folder\n properties:\n displayName: folder\n parent: organizations/123456789\n deletionProtection: false\n default:\n type: gcp:compute:FirewallPolicy\n properties:\n parent: ${folder.id}\n shortName: policy\n description: Resource created for Terraform acceptance testing\n policyRule:\n type: gcp:compute:FirewallPolicyRule\n name: policy_rule\n properties:\n firewallPolicy: ${default.name}\n description: Resource created for Terraform acceptance testing\n priority: 9000\n enableLogging: true\n action: allow\n direction: EGRESS\n disabled: false\n match:\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - 8080\n - ipProtocol: udp\n ports:\n - 22\n destIpRanges:\n - 11.100.0.1/32\n destFqdns: []\n destRegionCodes:\n - US\n destThreatIntelligences:\n - iplist-known-malicious-ips\n srcAddressGroups: []\n destAddressGroups:\n - ${basicGlobalNetworksecurityAddressGroup.id}\n targetServiceAccounts:\n - my@service-account.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFirewallPolicyRule can be imported using any of these accepted formats:\n\n* `locations/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}`\n\n* `{{firewall_policy}}/{{priority}}`\n\nWhen using the `pulumi import` command, FirewallPolicyRule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/firewallPolicyRule:FirewallPolicyRule default locations/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/firewallPolicyRule:FirewallPolicyRule default {{firewall_policy}}/{{priority}}\n```\n\n",
+ "description": "Represents a rule that describes one or more match conditions along with the action to be taken when traffic matches this condition (allow or deny).\n\n\nTo get more information about FirewallPolicyRule, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/firewallPolicies/addRule)\n\n## Example Usage\n\n### Firewall Policy Rule\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicGlobalNetworksecurityAddressGroup = new gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\", {\n name: \"address\",\n parent: \"organizations/123456789\",\n description: \"Sample global networksecurity_address_group\",\n location: \"global\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst folder = new gcp.organizations.Folder(\"folder\", {\n displayName: \"folder\",\n parent: \"organizations/123456789\",\n deletionProtection: false,\n});\nconst _default = new gcp.compute.FirewallPolicy(\"default\", {\n parent: folder.id,\n shortName: \"policy\",\n description: \"Resource created for Terraform acceptance testing\",\n});\nconst policyRule = new gcp.compute.FirewallPolicyRule(\"policy_rule\", {\n firewallPolicy: _default.name,\n description: \"Resource created for Terraform acceptance testing\",\n priority: 9000,\n enableLogging: true,\n action: \"allow\",\n direction: \"EGRESS\",\n disabled: false,\n match: {\n layer4Configs: [\n {\n ipProtocol: \"tcp\",\n ports: [\"8080\"],\n },\n {\n ipProtocol: \"udp\",\n ports: [\"22\"],\n },\n ],\n destIpRanges: [\"11.100.0.1/32\"],\n destFqdns: [],\n destRegionCodes: [\"US\"],\n destThreatIntelligences: [\"iplist-known-malicious-ips\"],\n srcAddressGroups: [],\n destAddressGroups: [basicGlobalNetworksecurityAddressGroup.id],\n },\n targetServiceAccounts: [\"my@service-account.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_global_networksecurity_address_group = gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\",\n name=\"address\",\n parent=\"organizations/123456789\",\n description=\"Sample global networksecurity_address_group\",\n location=\"global\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nfolder = gcp.organizations.Folder(\"folder\",\n display_name=\"folder\",\n parent=\"organizations/123456789\",\n deletion_protection=False)\ndefault = gcp.compute.FirewallPolicy(\"default\",\n parent=folder.id,\n short_name=\"policy\",\n description=\"Resource created for Terraform acceptance testing\")\npolicy_rule = gcp.compute.FirewallPolicyRule(\"policy_rule\",\n firewall_policy=default.name,\n description=\"Resource created for Terraform acceptance testing\",\n priority=9000,\n enable_logging=True,\n action=\"allow\",\n direction=\"EGRESS\",\n disabled=False,\n match={\n \"layer4_configs\": [\n {\n \"ip_protocol\": \"tcp\",\n \"ports\": [\"8080\"],\n },\n {\n \"ip_protocol\": \"udp\",\n \"ports\": [\"22\"],\n },\n ],\n \"dest_ip_ranges\": [\"11.100.0.1/32\"],\n \"dest_fqdns\": [],\n \"dest_region_codes\": [\"US\"],\n \"dest_threat_intelligences\": [\"iplist-known-malicious-ips\"],\n \"src_address_groups\": [],\n \"dest_address_groups\": [basic_global_networksecurity_address_group.id],\n },\n target_service_accounts=[\"my@service-account.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicGlobalNetworksecurityAddressGroup = new Gcp.NetworkSecurity.AddressGroup(\"basic_global_networksecurity_address_group\", new()\n {\n Name = \"address\",\n Parent = \"organizations/123456789\",\n Description = \"Sample global networksecurity_address_group\",\n Location = \"global\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var folder = new Gcp.Organizations.Folder(\"folder\", new()\n {\n DisplayName = \"folder\",\n Parent = \"organizations/123456789\",\n DeletionProtection = false,\n });\n\n var @default = new Gcp.Compute.FirewallPolicy(\"default\", new()\n {\n Parent = folder.Id,\n ShortName = \"policy\",\n Description = \"Resource created for Terraform acceptance testing\",\n });\n\n var policyRule = new Gcp.Compute.FirewallPolicyRule(\"policy_rule\", new()\n {\n FirewallPolicy = @default.Name,\n Description = \"Resource created for Terraform acceptance testing\",\n Priority = 9000,\n EnableLogging = true,\n Action = \"allow\",\n Direction = \"EGRESS\",\n Disabled = false,\n Match = new Gcp.Compute.Inputs.FirewallPolicyRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.FirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"8080\",\n },\n },\n new Gcp.Compute.Inputs.FirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"udp\",\n Ports = new[]\n {\n \"22\",\n },\n },\n },\n DestIpRanges = new[]\n {\n \"11.100.0.1/32\",\n },\n DestFqdns = new() { },\n DestRegionCodes = new[]\n {\n \"US\",\n },\n DestThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n },\n SrcAddressGroups = new() { },\n DestAddressGroups = new[]\n {\n basicGlobalNetworksecurityAddressGroup.Id,\n },\n },\n TargetServiceAccounts = new[]\n {\n \"my@service-account.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicGlobalNetworksecurityAddressGroup, err := networksecurity.NewAddressGroup(ctx, \"basic_global_networksecurity_address_group\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"address\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDescription: pulumi.String(\"Sample global networksecurity_address_group\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfolder, err := organizations.NewFolder(ctx, \"folder\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"folder\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewFirewallPolicy(ctx, \"default\", \u0026compute.FirewallPolicyArgs{\n\t\t\tParent: folder.ID(),\n\t\t\tShortName: pulumi.String(\"policy\"),\n\t\t\tDescription: pulumi.String(\"Resource created for Terraform acceptance testing\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewFirewallPolicyRule(ctx, \"policy_rule\", \u0026compute.FirewallPolicyRuleArgs{\n\t\t\tFirewallPolicy: _default.Name,\n\t\t\tDescription: pulumi.String(\"Resource created for Terraform acceptance testing\"),\n\t\t\tPriority: pulumi.Int(9000),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDirection: pulumi.String(\"EGRESS\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tMatch: \u0026compute.FirewallPolicyRuleMatchArgs{\n\t\t\t\tLayer4Configs: compute.FirewallPolicyRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\u0026compute.FirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"8080\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026compute.FirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"udp\"),\n\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"22\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tDestIpRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"11.100.0.1/32\"),\n\t\t\t\t},\n\t\t\t\tDestFqdns: pulumi.StringArray{},\n\t\t\t\tDestRegionCodes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t},\n\t\t\t\tDestThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t},\n\t\t\t\tSrcAddressGroups: pulumi.StringArray{},\n\t\t\t\tDestAddressGroups: pulumi.StringArray{\n\t\t\t\t\tbasicGlobalNetworksecurityAddressGroup.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my@service-account.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.compute.FirewallPolicy;\nimport com.pulumi.gcp.compute.FirewallPolicyArgs;\nimport com.pulumi.gcp.compute.FirewallPolicyRule;\nimport com.pulumi.gcp.compute.FirewallPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallPolicyRuleMatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicGlobalNetworksecurityAddressGroup = new AddressGroup(\"basicGlobalNetworksecurityAddressGroup\", AddressGroupArgs.builder()\n .name(\"address\")\n .parent(\"organizations/123456789\")\n .description(\"Sample global networksecurity_address_group\")\n .location(\"global\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var folder = new Folder(\"folder\", FolderArgs.builder()\n .displayName(\"folder\")\n .parent(\"organizations/123456789\")\n .deletionProtection(false)\n .build());\n\n var default_ = new FirewallPolicy(\"default\", FirewallPolicyArgs.builder()\n .parent(folder.id())\n .shortName(\"policy\")\n .description(\"Resource created for Terraform acceptance testing\")\n .build());\n\n var policyRule = new FirewallPolicyRule(\"policyRule\", FirewallPolicyRuleArgs.builder()\n .firewallPolicy(default_.name())\n .description(\"Resource created for Terraform acceptance testing\")\n .priority(9000)\n .enableLogging(true)\n .action(\"allow\")\n .direction(\"EGRESS\")\n .disabled(false)\n .match(FirewallPolicyRuleMatchArgs.builder()\n .layer4Configs( \n FirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports(8080)\n .build(),\n FirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"udp\")\n .ports(22)\n .build())\n .destIpRanges(\"11.100.0.1/32\")\n .destFqdns()\n .destRegionCodes(\"US\")\n .destThreatIntelligences(\"iplist-known-malicious-ips\")\n .srcAddressGroups()\n .destAddressGroups(basicGlobalNetworksecurityAddressGroup.id())\n .build())\n .targetServiceAccounts(\"my@service-account.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicGlobalNetworksecurityAddressGroup:\n type: gcp:networksecurity:AddressGroup\n name: basic_global_networksecurity_address_group\n properties:\n name: address\n parent: organizations/123456789\n description: Sample global networksecurity_address_group\n location: global\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n folder:\n type: gcp:organizations:Folder\n properties:\n displayName: folder\n parent: organizations/123456789\n deletionProtection: false\n default:\n type: gcp:compute:FirewallPolicy\n properties:\n parent: ${folder.id}\n shortName: policy\n description: Resource created for Terraform acceptance testing\n policyRule:\n type: gcp:compute:FirewallPolicyRule\n name: policy_rule\n properties:\n firewallPolicy: ${default.name}\n description: Resource created for Terraform acceptance testing\n priority: 9000\n enableLogging: true\n action: allow\n direction: EGRESS\n disabled: false\n match:\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - 8080\n - ipProtocol: udp\n ports:\n - 22\n destIpRanges:\n - 11.100.0.1/32\n destFqdns: []\n destRegionCodes:\n - US\n destThreatIntelligences:\n - iplist-known-malicious-ips\n srcAddressGroups: []\n destAddressGroups:\n - ${basicGlobalNetworksecurityAddressGroup.id}\n targetServiceAccounts:\n - my@service-account.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFirewallPolicyRule can be imported using any of these accepted formats:\n\n* `locations/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}`\n\n* `{{firewall_policy}}/{{priority}}`\n\nWhen using the `pulumi import` command, FirewallPolicyRule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/firewallPolicyRule:FirewallPolicyRule default locations/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/firewallPolicyRule:FirewallPolicyRule default {{firewall_policy}}/{{priority}}\n```\n\n",
"properties": {
"action": {
"type": "string",
@@ -163284,6 +164287,10 @@
"description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
"secret": true
},
+ "forwardingRuleId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"ipAddress": {
"type": "string",
"description": "IP address for which this forwarding rule accepts traffic. When a client\nsends traffic to this IP address, the forwarding rule directs the traffic\nto the referenced `target`.\nWhile creating a forwarding rule, specifying an `IPAddress` is\nrequired under the following circumstances:\n* When the `target` is set to `targetGrpcProxy` and\n`validateForProxyless` is set to `true`, the\n`IPAddress` should be set to `0.0.0.0`.\n* When the `target` is a Private Service Connect Google APIs\nbundle, you must specify an `IPAddress`.\nOtherwise, you can optionally specify an IP address that references an\nexisting static (reserved) IP address resource. When omitted, Google Cloud\nassigns an ephemeral IP address.\nUse one of the following formats to specify an IP address while creating a\nforwarding rule:\n* IP address number, as in `100.1.2.3`\n* IPv6 address range, as in `2600:1234::/96`\n* Full resource URL, as in\n`https://www.googleapis.com/compute/v1/projects/project_id/regions/region/addresses/address-name`\n* Partial URL or by name, as in:\n* `projects/project_id/regions/region/addresses/address-name`\n* `regions/region/addresses/address-name`\n* `global/addresses/address-name`\n* `address-name`\nThe forwarding rule's `target`,\nand in most cases, also the `loadBalancingScheme`, determine the\ntype of IP address that you can use. For detailed information, see\n[IP address\nspecifications](https://cloud.google.com/load-balancing/docs/forwarding-rule-concepts#ip_address_specifications).\nWhen reading an `IPAddress`, the API always returns the IP\naddress number.\n"
@@ -163381,6 +164388,7 @@
"required": [
"baseForwardingRule",
"effectiveLabels",
+ "forwardingRuleId",
"ipAddress",
"ipProtocol",
"labelFingerprint",
@@ -163517,6 +164525,10 @@
"description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
"secret": true
},
+ "forwardingRuleId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"ipAddress": {
"type": "string",
"description": "IP address for which this forwarding rule accepts traffic. When a client\nsends traffic to this IP address, the forwarding rule directs the traffic\nto the referenced `target`.\nWhile creating a forwarding rule, specifying an `IPAddress` is\nrequired under the following circumstances:\n* When the `target` is set to `targetGrpcProxy` and\n`validateForProxyless` is set to `true`, the\n`IPAddress` should be set to `0.0.0.0`.\n* When the `target` is a Private Service Connect Google APIs\nbundle, you must specify an `IPAddress`.\nOtherwise, you can optionally specify an IP address that references an\nexisting static (reserved) IP address resource. When omitted, Google Cloud\nassigns an ephemeral IP address.\nUse one of the following formats to specify an IP address while creating a\nforwarding rule:\n* IP address number, as in `100.1.2.3`\n* IPv6 address range, as in `2600:1234::/96`\n* Full resource URL, as in\n`https://www.googleapis.com/compute/v1/projects/project_id/regions/region/addresses/address-name`\n* Partial URL or by name, as in:\n* `projects/project_id/regions/region/addresses/address-name`\n* `regions/region/addresses/address-name`\n* `global/addresses/address-name`\n* `address-name`\nThe forwarding rule's `target`,\nand in most cases, also the `loadBalancingScheme`, determine the\ntype of IP address that you can use. For detailed information, see\n[IP address\nspecifications](https://cloud.google.com/load-balancing/docs/forwarding-rule-concepts#ip_address_specifications).\nWhen reading an `IPAddress`, the API always returns the IP\naddress number.\n",
@@ -167222,6 +168234,10 @@
"type": "string",
"description": "The full URL of the instance group created by the manager.\n"
},
+ "instanceGroupManagerId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"instanceLifecyclePolicy": {
"$ref": "#/types/gcp:compute/InstanceGroupManagerInstanceLifecyclePolicy:InstanceGroupManagerInstanceLifecyclePolicy",
"description": "The instance lifecycle policy for this managed instance group.\n"
@@ -167336,6 +168352,7 @@
"creationTimestamp",
"fingerprint",
"instanceGroup",
+ "instanceGroupManagerId",
"instanceLifecyclePolicy",
"name",
"operation",
@@ -167503,6 +168520,10 @@
"type": "string",
"description": "The full URL of the instance group created by the manager.\n"
},
+ "instanceGroupManagerId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"instanceLifecyclePolicy": {
"$ref": "#/types/gcp:compute/InstanceGroupManagerInstanceLifecyclePolicy:InstanceGroupManagerInstanceLifecyclePolicy",
"description": "The instance lifecycle policy for this managed instance group.\n"
@@ -170299,6 +171320,10 @@
"type": "string",
"description": "Set the order that Firewall Rules and Firewall Policies are evaluated.\nDefault value is `AFTER_CLASSIC_FIREWALL`.\nPossible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`.\n"
},
+ "networkProfile": {
+ "type": "string",
+ "description": "A full or partial URL of the network profile to apply to this network.\nThis field can be set only at resource creation time. For example, the\nfollowing are valid URLs:\n* https://www.googleapis.com/compute/beta/projects/{projectId}/global/networkProfiles/{network_profile_name}\n* projects/{projectId}/global/networkProfiles/{network_profile_name}\n"
+ },
"numericId": {
"type": "string",
"description": "The unique identifier for the resource. This identifier is defined by the server.\n"
@@ -170380,6 +171405,11 @@
"type": "string",
"description": "Set the order that Firewall Rules and Firewall Policies are evaluated.\nDefault value is `AFTER_CLASSIC_FIREWALL`.\nPossible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`.\n"
},
+ "networkProfile": {
+ "type": "string",
+ "description": "A full or partial URL of the network profile to apply to this network.\nThis field can be set only at resource creation time. For example, the\nfollowing are valid URLs:\n* https://www.googleapis.com/compute/beta/projects/{projectId}/global/networkProfiles/{network_profile_name}\n* projects/{projectId}/global/networkProfiles/{network_profile_name}\n",
+ "willReplaceOnChanges": true
+ },
"project": {
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
@@ -170447,6 +171477,11 @@
"type": "string",
"description": "Set the order that Firewall Rules and Firewall Policies are evaluated.\nDefault value is `AFTER_CLASSIC_FIREWALL`.\nPossible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`.\n"
},
+ "networkProfile": {
+ "type": "string",
+ "description": "A full or partial URL of the network profile to apply to this network.\nThis field can be set only at resource creation time. For example, the\nfollowing are valid URLs:\n* https://www.googleapis.com/compute/beta/projects/{projectId}/global/networkProfiles/{network_profile_name}\n* projects/{projectId}/global/networkProfiles/{network_profile_name}\n",
+ "willReplaceOnChanges": true
+ },
"numericId": {
"type": "string",
"description": "The unique identifier for the resource. This identifier is defined by the server.\n"
@@ -175392,6 +176427,10 @@
"$ref": "#/types/gcp:compute/RegionHealthCheckGrpcHealthCheck:RegionHealthCheckGrpcHealthCheck",
"description": "A nested object resource.\nStructure is documented below.\n"
},
+ "healthCheckId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"healthyThreshold": {
"type": "integer",
"description": "A so-far unhealthy instance will be marked healthy after this many\nconsecutive successes. The default value is 2.\n"
@@ -175451,6 +176490,7 @@
},
"required": [
"creationTimestamp",
+ "healthCheckId",
"logConfig",
"name",
"project",
@@ -175542,6 +176582,10 @@
"$ref": "#/types/gcp:compute/RegionHealthCheckGrpcHealthCheck:RegionHealthCheckGrpcHealthCheck",
"description": "A nested object resource.\nStructure is documented below.\n"
},
+ "healthCheckId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"healthyThreshold": {
"type": "integer",
"description": "A so-far unhealthy instance will be marked healthy after this many\nconsecutive successes. The default value is 2.\n"
@@ -175651,6 +176695,10 @@
"type": "string",
"description": "The full URL of the instance group created by the manager.\n"
},
+ "instanceGroupManagerId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"instanceLifecyclePolicy": {
"$ref": "#/types/gcp:compute/RegionInstanceGroupManagerInstanceLifecyclePolicy:RegionInstanceGroupManagerInstanceLifecyclePolicy",
"description": "The instance lifecycle policy for this managed instance group.\n"
@@ -175764,6 +176812,7 @@
"distributionPolicyZones",
"fingerprint",
"instanceGroup",
+ "instanceGroupManagerId",
"instanceLifecyclePolicy",
"name",
"project",
@@ -175964,6 +177013,10 @@
"type": "string",
"description": "The full URL of the instance group created by the manager.\n"
},
+ "instanceGroupManagerId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"instanceLifecyclePolicy": {
"$ref": "#/types/gcp:compute/RegionInstanceGroupManagerInstanceLifecyclePolicy:RegionInstanceGroupManagerInstanceLifecyclePolicy",
"description": "The instance lifecycle policy for this managed instance group.\n"
@@ -176656,6 +177709,10 @@
"type": "string",
"description": "IPv4 address external endpoint.\nThis can only be specified when network_endpoint_type of the NEG is INTERNET_IP_PORT.\n"
},
+ "networkEndpointId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"port": {
"type": "integer",
"description": "Port number of network endpoint.\n"
@@ -176674,6 +177731,7 @@
}
},
"required": [
+ "networkEndpointId",
"port",
"project",
"region",
@@ -176748,6 +177806,10 @@
"description": "IPv4 address external endpoint.\nThis can only be specified when network_endpoint_type of the NEG is INTERNET_IP_PORT.\n",
"willReplaceOnChanges": true
},
+ "networkEndpointId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
+ },
"port": {
"type": "integer",
"description": "Port number of network endpoint.\n",
@@ -176773,7 +177835,7 @@
}
},
"gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup": {
- "description": "A regional NEG that can support Serverless Products, proxying traffic to\nexternal backends and providing traffic to the PSC port mapping endpoints.\n\nTo get more information about RegionNetworkEndpointGroup, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups)\n* How-to Guides\n * [Internet NEGs Official Documentation](https://cloud.google.com/load-balancing/docs/negs/internet-neg-concepts)\n * [Serverless NEGs Official Documentation](https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts)\n\n## Example Usage\n\n### Region Network Endpoint Group Functions\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n name: \"cloudfunctions-function-example-bucket\",\n location: \"US\",\n});\nconst archive = new gcp.storage.BucketObject(\"archive\", {\n name: \"index.zip\",\n bucket: bucket.name,\n source: new pulumi.asset.FileAsset(\"path/to/index.zip\"),\n});\nconst functionNegFunction = new gcp.cloudfunctions.Function(\"function_neg\", {\n name: \"function-neg\",\n description: \"My function\",\n runtime: \"nodejs10\",\n availableMemoryMb: 128,\n sourceArchiveBucket: bucket.name,\n sourceArchiveObject: archive.name,\n triggerHttp: true,\n timeout: 60,\n entryPoint: \"helloGET\",\n});\n// Cloud Functions Example\nconst functionNeg = new gcp.compute.RegionNetworkEndpointGroup(\"function_neg\", {\n name: \"function-neg\",\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n cloudFunction: {\n \"function\": functionNegFunction.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\",\n name=\"cloudfunctions-function-example-bucket\",\n location=\"US\")\narchive = gcp.storage.BucketObject(\"archive\",\n name=\"index.zip\",\n bucket=bucket.name,\n source=pulumi.FileAsset(\"path/to/index.zip\"))\nfunction_neg_function = gcp.cloudfunctions.Function(\"function_neg\",\n name=\"function-neg\",\n description=\"My function\",\n runtime=\"nodejs10\",\n available_memory_mb=128,\n source_archive_bucket=bucket.name,\n source_archive_object=archive.name,\n trigger_http=True,\n timeout=60,\n entry_point=\"helloGET\")\n# Cloud Functions Example\nfunction_neg = gcp.compute.RegionNetworkEndpointGroup(\"function_neg\",\n name=\"function-neg\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n cloud_function={\n \"function\": function_neg_function.name,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Name = \"cloudfunctions-function-example-bucket\",\n Location = \"US\",\n });\n\n var archive = new Gcp.Storage.BucketObject(\"archive\", new()\n {\n Name = \"index.zip\",\n Bucket = bucket.Name,\n Source = new FileAsset(\"path/to/index.zip\"),\n });\n\n var functionNegFunction = new Gcp.CloudFunctions.Function(\"function_neg\", new()\n {\n Name = \"function-neg\",\n Description = \"My function\",\n Runtime = \"nodejs10\",\n AvailableMemoryMb = 128,\n SourceArchiveBucket = bucket.Name,\n SourceArchiveObject = archive.Name,\n TriggerHttp = true,\n Timeout = 60,\n EntryPoint = \"helloGET\",\n });\n\n // Cloud Functions Example\n var functionNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"function_neg\", new()\n {\n Name = \"function-neg\",\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n CloudFunction = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupCloudFunctionArgs\n {\n Function = functionNegFunction.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudfunctions\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"cloudfunctions-function-example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tarchive, err := storage.NewBucketObject(ctx, \"archive\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"index.zip\"),\n\t\t\tBucket: bucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"path/to/index.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfunctionNegFunction, err := cloudfunctions.NewFunction(ctx, \"function_neg\", \u0026cloudfunctions.FunctionArgs{\n\t\t\tName: pulumi.String(\"function-neg\"),\n\t\t\tDescription: pulumi.String(\"My function\"),\n\t\t\tRuntime: pulumi.String(\"nodejs10\"),\n\t\t\tAvailableMemoryMb: pulumi.Int(128),\n\t\t\tSourceArchiveBucket: bucket.Name,\n\t\t\tSourceArchiveObject: archive.Name,\n\t\t\tTriggerHttp: pulumi.Bool(true),\n\t\t\tTimeout: pulumi.Int(60),\n\t\t\tEntryPoint: pulumi.String(\"helloGET\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Cloud Functions Example\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"function_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"function-neg\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tCloudFunction: \u0026compute.RegionNetworkEndpointGroupCloudFunctionArgs{\n\t\t\t\tFunction: functionNegFunction.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.cloudfunctions.Function;\nimport com.pulumi.gcp.cloudfunctions.FunctionArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudFunctionArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bucket = new Bucket(\"bucket\", BucketArgs.builder()\n .name(\"cloudfunctions-function-example-bucket\")\n .location(\"US\")\n .build());\n\n var archive = new BucketObject(\"archive\", BucketObjectArgs.builder()\n .name(\"index.zip\")\n .bucket(bucket.name())\n .source(new FileAsset(\"path/to/index.zip\"))\n .build());\n\n var functionNegFunction = new Function(\"functionNegFunction\", FunctionArgs.builder()\n .name(\"function-neg\")\n .description(\"My function\")\n .runtime(\"nodejs10\")\n .availableMemoryMb(128)\n .sourceArchiveBucket(bucket.name())\n .sourceArchiveObject(archive.name())\n .triggerHttp(true)\n .timeout(60)\n .entryPoint(\"helloGET\")\n .build());\n\n // Cloud Functions Example\n var functionNeg = new RegionNetworkEndpointGroup(\"functionNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"function-neg\")\n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .cloudFunction(RegionNetworkEndpointGroupCloudFunctionArgs.builder()\n .function(functionNegFunction.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Cloud Functions Example\n functionNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: function_neg\n properties:\n name: function-neg\n networkEndpointType: SERVERLESS\n region: us-central1\n cloudFunction:\n function: ${functionNegFunction.name}\n functionNegFunction:\n type: gcp:cloudfunctions:Function\n name: function_neg\n properties:\n name: function-neg\n description: My function\n runtime: nodejs10\n availableMemoryMb: 128\n sourceArchiveBucket: ${bucket.name}\n sourceArchiveObject: ${archive.name}\n triggerHttp: true\n timeout: 60\n entryPoint: helloGET\n bucket:\n type: gcp:storage:Bucket\n properties:\n name: cloudfunctions-function-example-bucket\n location: US\n archive:\n type: gcp:storage:BucketObject\n properties:\n name: index.zip\n bucket: ${bucket.name}\n source:\n fn::FileAsset: path/to/index.zip\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Cloudrun\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudrunNegService = new gcp.cloudrun.Service(\"cloudrun_neg\", {\n name: \"cloudrun-neg\",\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n traffics: [{\n percent: 100,\n latestRevision: true,\n }],\n});\n// Cloud Run Example\nconst cloudrunNeg = new gcp.compute.RegionNetworkEndpointGroup(\"cloudrun_neg\", {\n name: \"cloudrun-neg\",\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n cloudRun: {\n service: cloudrunNegService.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloudrun_neg_service = gcp.cloudrun.Service(\"cloudrun_neg\",\n name=\"cloudrun-neg\",\n location=\"us-central1\",\n template={\n \"spec\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n traffics=[{\n \"percent\": 100,\n \"latest_revision\": True,\n }])\n# Cloud Run Example\ncloudrun_neg = gcp.compute.RegionNetworkEndpointGroup(\"cloudrun_neg\",\n name=\"cloudrun-neg\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n cloud_run={\n \"service\": cloudrun_neg_service.name,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudrunNegService = new Gcp.CloudRun.Service(\"cloudrun_neg\", new()\n {\n Name = \"cloudrun-neg\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTrafficArgs\n {\n Percent = 100,\n LatestRevision = true,\n },\n },\n });\n\n // Cloud Run Example\n var cloudrunNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"cloudrun_neg\", new()\n {\n Name = \"cloudrun-neg\",\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n CloudRun = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupCloudRunArgs\n {\n Service = cloudrunNegService.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudrunNegService, err := cloudrun.NewService(ctx, \"cloudrun_neg\", \u0026cloudrun.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-neg\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrun.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrun.ServiceTrafficArgs{\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t\tLatestRevision: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Cloud Run Example\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"cloudrun_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"cloudrun-neg\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tCloudRun: \u0026compute.RegionNetworkEndpointGroupCloudRunArgs{\n\t\t\t\tService: cloudrunNegService.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudRunArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudrunNegService = new Service(\"cloudrunNegService\", ServiceArgs.builder()\n .name(\"cloudrun-neg\")\n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .percent(100)\n .latestRevision(true)\n .build())\n .build());\n\n // Cloud Run Example\n var cloudrunNeg = new RegionNetworkEndpointGroup(\"cloudrunNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"cloudrun-neg\")\n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .cloudRun(RegionNetworkEndpointGroupCloudRunArgs.builder()\n .service(cloudrunNegService.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Cloud Run Example\n cloudrunNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: cloudrun_neg\n properties:\n name: cloudrun-neg\n networkEndpointType: SERVERLESS\n region: us-central1\n cloudRun:\n service: ${cloudrunNegService.name}\n cloudrunNegService:\n type: gcp:cloudrun:Service\n name: cloudrun_neg\n properties:\n name: cloudrun-neg\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n traffics:\n - percent: 100\n latestRevision: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Appengine\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appengineNegBucket = new gcp.storage.Bucket(\"appengine_neg\", {\n name: \"appengine-neg\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst appengineNegBucketObject = new gcp.storage.BucketObject(\"appengine_neg\", {\n name: \"hello-world.zip\",\n bucket: appengineNegBucket.name,\n source: new pulumi.asset.FileAsset(\"./test-fixtures/hello-world.zip\"),\n});\nconst appengineNegFlexibleAppVersion = new gcp.appengine.FlexibleAppVersion(\"appengine_neg\", {\n versionId: \"v1\",\n service: \"appengine-neg\",\n runtime: \"nodejs\",\n flexibleRuntimeSettings: {\n operatingSystem: \"ubuntu22\",\n runtimeVersion: \"20\",\n },\n entrypoint: {\n shell: \"node ./app.js\",\n },\n deployment: {\n zip: {\n sourceUrl: pulumi.interpolate`https://storage.googleapis.com/${appengineNegBucket.name}/${appengineNegBucketObject.name}`,\n },\n },\n livenessCheck: {\n path: \"/\",\n },\n readinessCheck: {\n path: \"/\",\n },\n envVariables: {\n port: \"8080\",\n },\n handlers: [{\n urlRegex: \".*\\\\/my-path\\\\/*\",\n securityLevel: \"SECURE_ALWAYS\",\n login: \"LOGIN_REQUIRED\",\n authFailAction: \"AUTH_FAIL_ACTION_REDIRECT\",\n staticFiles: {\n path: \"my-other-path\",\n uploadPathRegex: \".*\\\\/my-path\\\\/*\",\n },\n }],\n automaticScaling: {\n coolDownPeriod: \"120s\",\n cpuUtilization: {\n targetUtilization: 0.5,\n },\n },\n deleteServiceOnDestroy: true,\n});\n// App Engine Example\nconst appengineNeg = new gcp.compute.RegionNetworkEndpointGroup(\"appengine_neg\", {\n name: \"appengine-neg\",\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n appEngine: {\n service: appengineNegFlexibleAppVersion.service,\n version: appengineNegFlexibleAppVersion.versionId,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappengine_neg_bucket = gcp.storage.Bucket(\"appengine_neg\",\n name=\"appengine-neg\",\n location=\"US\",\n uniform_bucket_level_access=True)\nappengine_neg_bucket_object = gcp.storage.BucketObject(\"appengine_neg\",\n name=\"hello-world.zip\",\n bucket=appengine_neg_bucket.name,\n source=pulumi.FileAsset(\"./test-fixtures/hello-world.zip\"))\nappengine_neg_flexible_app_version = gcp.appengine.FlexibleAppVersion(\"appengine_neg\",\n version_id=\"v1\",\n service=\"appengine-neg\",\n runtime=\"nodejs\",\n flexible_runtime_settings={\n \"operating_system\": \"ubuntu22\",\n \"runtime_version\": \"20\",\n },\n entrypoint={\n \"shell\": \"node ./app.js\",\n },\n deployment={\n \"zip\": {\n \"source_url\": pulumi.Output.all(\n appengineNegBucketName=appengine_neg_bucket.name,\n appengineNegBucketObjectName=appengine_neg_bucket_object.name\n).apply(lambda resolved_outputs: f\"https://storage.googleapis.com/{resolved_outputs['appengineNegBucketName']}/{resolved_outputs['appengineNegBucketObjectName']}\")\n,\n },\n },\n liveness_check={\n \"path\": \"/\",\n },\n readiness_check={\n \"path\": \"/\",\n },\n env_variables={\n \"port\": \"8080\",\n },\n handlers=[{\n \"url_regex\": \".*\\\\/my-path\\\\/*\",\n \"security_level\": \"SECURE_ALWAYS\",\n \"login\": \"LOGIN_REQUIRED\",\n \"auth_fail_action\": \"AUTH_FAIL_ACTION_REDIRECT\",\n \"static_files\": {\n \"path\": \"my-other-path\",\n \"upload_path_regex\": \".*\\\\/my-path\\\\/*\",\n },\n }],\n automatic_scaling={\n \"cool_down_period\": \"120s\",\n \"cpu_utilization\": {\n \"target_utilization\": 0.5,\n },\n },\n delete_service_on_destroy=True)\n# App Engine Example\nappengine_neg = gcp.compute.RegionNetworkEndpointGroup(\"appengine_neg\",\n name=\"appengine-neg\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n app_engine={\n \"service\": appengine_neg_flexible_app_version.service,\n \"version\": appengine_neg_flexible_app_version.version_id,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appengineNegBucket = new Gcp.Storage.Bucket(\"appengine_neg\", new()\n {\n Name = \"appengine-neg\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var appengineNegBucketObject = new Gcp.Storage.BucketObject(\"appengine_neg\", new()\n {\n Name = \"hello-world.zip\",\n Bucket = appengineNegBucket.Name,\n Source = new FileAsset(\"./test-fixtures/hello-world.zip\"),\n });\n\n var appengineNegFlexibleAppVersion = new Gcp.AppEngine.FlexibleAppVersion(\"appengine_neg\", new()\n {\n VersionId = \"v1\",\n Service = \"appengine-neg\",\n Runtime = \"nodejs\",\n FlexibleRuntimeSettings = new Gcp.AppEngine.Inputs.FlexibleAppVersionFlexibleRuntimeSettingsArgs\n {\n OperatingSystem = \"ubuntu22\",\n RuntimeVersion = \"20\",\n },\n Entrypoint = new Gcp.AppEngine.Inputs.FlexibleAppVersionEntrypointArgs\n {\n Shell = \"node ./app.js\",\n },\n Deployment = new Gcp.AppEngine.Inputs.FlexibleAppVersionDeploymentArgs\n {\n Zip = new Gcp.AppEngine.Inputs.FlexibleAppVersionDeploymentZipArgs\n {\n SourceUrl = Output.Tuple(appengineNegBucket.Name, appengineNegBucketObject.Name).Apply(values =\u003e\n {\n var appengineNegBucketName = values.Item1;\n var appengineNegBucketObjectName = values.Item2;\n return $\"https://storage.googleapis.com/{appengineNegBucketName}/{appengineNegBucketObjectName}\";\n }),\n },\n },\n LivenessCheck = new Gcp.AppEngine.Inputs.FlexibleAppVersionLivenessCheckArgs\n {\n Path = \"/\",\n },\n ReadinessCheck = new Gcp.AppEngine.Inputs.FlexibleAppVersionReadinessCheckArgs\n {\n Path = \"/\",\n },\n EnvVariables = \n {\n { \"port\", \"8080\" },\n },\n Handlers = new[]\n {\n new Gcp.AppEngine.Inputs.FlexibleAppVersionHandlerArgs\n {\n UrlRegex = \".*\\\\/my-path\\\\/*\",\n SecurityLevel = \"SECURE_ALWAYS\",\n Login = \"LOGIN_REQUIRED\",\n AuthFailAction = \"AUTH_FAIL_ACTION_REDIRECT\",\n StaticFiles = new Gcp.AppEngine.Inputs.FlexibleAppVersionHandlerStaticFilesArgs\n {\n Path = \"my-other-path\",\n UploadPathRegex = \".*\\\\/my-path\\\\/*\",\n },\n },\n },\n AutomaticScaling = new Gcp.AppEngine.Inputs.FlexibleAppVersionAutomaticScalingArgs\n {\n CoolDownPeriod = \"120s\",\n CpuUtilization = new Gcp.AppEngine.Inputs.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs\n {\n TargetUtilization = 0.5,\n },\n },\n DeleteServiceOnDestroy = true,\n });\n\n // App Engine Example\n var appengineNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"appengine_neg\", new()\n {\n Name = \"appengine-neg\",\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n AppEngine = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupAppEngineArgs\n {\n Service = appengineNegFlexibleAppVersion.Service,\n Version = appengineNegFlexibleAppVersion.VersionId,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tappengineNegBucket, err := storage.NewBucket(ctx, \"appengine_neg\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"appengine-neg\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tappengineNegBucketObject, err := storage.NewBucketObject(ctx, \"appengine_neg\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"hello-world.zip\"),\n\t\t\tBucket: appengineNegBucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/hello-world.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tappengineNegFlexibleAppVersion, err := appengine.NewFlexibleAppVersion(ctx, \"appengine_neg\", \u0026appengine.FlexibleAppVersionArgs{\n\t\t\tVersionId: pulumi.String(\"v1\"),\n\t\t\tService: pulumi.String(\"appengine-neg\"),\n\t\t\tRuntime: pulumi.String(\"nodejs\"),\n\t\t\tFlexibleRuntimeSettings: \u0026appengine.FlexibleAppVersionFlexibleRuntimeSettingsArgs{\n\t\t\t\tOperatingSystem: pulumi.String(\"ubuntu22\"),\n\t\t\t\tRuntimeVersion: pulumi.String(\"20\"),\n\t\t\t},\n\t\t\tEntrypoint: \u0026appengine.FlexibleAppVersionEntrypointArgs{\n\t\t\t\tShell: pulumi.String(\"node ./app.js\"),\n\t\t\t},\n\t\t\tDeployment: \u0026appengine.FlexibleAppVersionDeploymentArgs{\n\t\t\t\tZip: \u0026appengine.FlexibleAppVersionDeploymentZipArgs{\n\t\t\t\t\tSourceUrl: pulumi.All(appengineNegBucket.Name, appengineNegBucketObject.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tappengineNegBucketName := _args[0].(string)\n\t\t\t\t\t\tappengineNegBucketObjectName := _args[1].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"https://storage.googleapis.com/%v/%v\", appengineNegBucketName, appengineNegBucketObjectName), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLivenessCheck: \u0026appengine.FlexibleAppVersionLivenessCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t},\n\t\t\tReadinessCheck: \u0026appengine.FlexibleAppVersionReadinessCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t},\n\t\t\tEnvVariables: pulumi.StringMap{\n\t\t\t\t\"port\": pulumi.String(\"8080\"),\n\t\t\t},\n\t\t\tHandlers: appengine.FlexibleAppVersionHandlerArray{\n\t\t\t\t\u0026appengine.FlexibleAppVersionHandlerArgs{\n\t\t\t\t\tUrlRegex: pulumi.String(\".*\\\\/my-path\\\\/*\"),\n\t\t\t\t\tSecurityLevel: pulumi.String(\"SECURE_ALWAYS\"),\n\t\t\t\t\tLogin: pulumi.String(\"LOGIN_REQUIRED\"),\n\t\t\t\t\tAuthFailAction: pulumi.String(\"AUTH_FAIL_ACTION_REDIRECT\"),\n\t\t\t\t\tStaticFiles: \u0026appengine.FlexibleAppVersionHandlerStaticFilesArgs{\n\t\t\t\t\t\tPath: pulumi.String(\"my-other-path\"),\n\t\t\t\t\t\tUploadPathRegex: pulumi.String(\".*\\\\/my-path\\\\/*\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutomaticScaling: \u0026appengine.FlexibleAppVersionAutomaticScalingArgs{\n\t\t\t\tCoolDownPeriod: pulumi.String(\"120s\"),\n\t\t\t\tCpuUtilization: \u0026appengine.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs{\n\t\t\t\t\tTargetUtilization: pulumi.Float64(0.5),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeleteServiceOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// App Engine Example\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"appengine_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"appengine-neg\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tAppEngine: \u0026compute.RegionNetworkEndpointGroupAppEngineArgs{\n\t\t\t\tService: appengineNegFlexibleAppVersion.Service,\n\t\t\t\tVersion: appengineNegFlexibleAppVersion.VersionId,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.appengine.FlexibleAppVersion;\nimport com.pulumi.gcp.appengine.FlexibleAppVersionArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionFlexibleRuntimeSettingsArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionEntrypointArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentZipArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionLivenessCheckArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionReadinessCheckArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerStaticFilesArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionAutomaticScalingArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupAppEngineArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var appengineNegBucket = new Bucket(\"appengineNegBucket\", BucketArgs.builder()\n .name(\"appengine-neg\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var appengineNegBucketObject = new BucketObject(\"appengineNegBucketObject\", BucketObjectArgs.builder()\n .name(\"hello-world.zip\")\n .bucket(appengineNegBucket.name())\n .source(new FileAsset(\"./test-fixtures/hello-world.zip\"))\n .build());\n\n var appengineNegFlexibleAppVersion = new FlexibleAppVersion(\"appengineNegFlexibleAppVersion\", FlexibleAppVersionArgs.builder()\n .versionId(\"v1\")\n .service(\"appengine-neg\")\n .runtime(\"nodejs\")\n .flexibleRuntimeSettings(FlexibleAppVersionFlexibleRuntimeSettingsArgs.builder()\n .operatingSystem(\"ubuntu22\")\n .runtimeVersion(\"20\")\n .build())\n .entrypoint(FlexibleAppVersionEntrypointArgs.builder()\n .shell(\"node ./app.js\")\n .build())\n .deployment(FlexibleAppVersionDeploymentArgs.builder()\n .zip(FlexibleAppVersionDeploymentZipArgs.builder()\n .sourceUrl(Output.tuple(appengineNegBucket.name(), appengineNegBucketObject.name()).applyValue(values -\u003e {\n var appengineNegBucketName = values.t1;\n var appengineNegBucketObjectName = values.t2;\n return String.format(\"https://storage.googleapis.com/%s/%s\", appengineNegBucketName,appengineNegBucketObjectName);\n }))\n .build())\n .build())\n .livenessCheck(FlexibleAppVersionLivenessCheckArgs.builder()\n .path(\"/\")\n .build())\n .readinessCheck(FlexibleAppVersionReadinessCheckArgs.builder()\n .path(\"/\")\n .build())\n .envVariables(Map.of(\"port\", \"8080\"))\n .handlers(FlexibleAppVersionHandlerArgs.builder()\n .urlRegex(\".*\\\\/my-path\\\\/*\")\n .securityLevel(\"SECURE_ALWAYS\")\n .login(\"LOGIN_REQUIRED\")\n .authFailAction(\"AUTH_FAIL_ACTION_REDIRECT\")\n .staticFiles(FlexibleAppVersionHandlerStaticFilesArgs.builder()\n .path(\"my-other-path\")\n .uploadPathRegex(\".*\\\\/my-path\\\\/*\")\n .build())\n .build())\n .automaticScaling(FlexibleAppVersionAutomaticScalingArgs.builder()\n .coolDownPeriod(\"120s\")\n .cpuUtilization(FlexibleAppVersionAutomaticScalingCpuUtilizationArgs.builder()\n .targetUtilization(0.5)\n .build())\n .build())\n .deleteServiceOnDestroy(true)\n .build());\n\n // App Engine Example\n var appengineNeg = new RegionNetworkEndpointGroup(\"appengineNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"appengine-neg\")\n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .appEngine(RegionNetworkEndpointGroupAppEngineArgs.builder()\n .service(appengineNegFlexibleAppVersion.service())\n .version(appengineNegFlexibleAppVersion.versionId())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # App Engine Example\n appengineNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: appengine_neg\n properties:\n name: appengine-neg\n networkEndpointType: SERVERLESS\n region: us-central1\n appEngine:\n service: ${appengineNegFlexibleAppVersion.service}\n version: ${appengineNegFlexibleAppVersion.versionId}\n appengineNegFlexibleAppVersion:\n type: gcp:appengine:FlexibleAppVersion\n name: appengine_neg\n properties:\n versionId: v1\n service: appengine-neg\n runtime: nodejs\n flexibleRuntimeSettings:\n operatingSystem: ubuntu22\n runtimeVersion: '20'\n entrypoint:\n shell: node ./app.js\n deployment:\n zip:\n sourceUrl: https://storage.googleapis.com/${appengineNegBucket.name}/${appengineNegBucketObject.name}\n livenessCheck:\n path: /\n readinessCheck:\n path: /\n envVariables:\n port: '8080'\n handlers:\n - urlRegex: .*\\/my-path\\/*\n securityLevel: SECURE_ALWAYS\n login: LOGIN_REQUIRED\n authFailAction: AUTH_FAIL_ACTION_REDIRECT\n staticFiles:\n path: my-other-path\n uploadPathRegex: .*\\/my-path\\/*\n automaticScaling:\n coolDownPeriod: 120s\n cpuUtilization:\n targetUtilization: 0.5\n deleteServiceOnDestroy: true\n appengineNegBucket:\n type: gcp:storage:Bucket\n name: appengine_neg\n properties:\n name: appengine-neg\n location: US\n uniformBucketLevelAccess: true\n appengineNegBucketObject:\n type: gcp:storage:BucketObject\n name: appengine_neg\n properties:\n name: hello-world.zip\n bucket: ${appengineNegBucket.name}\n source:\n fn::FileAsset: ./test-fixtures/hello-world.zip\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Appengine Empty\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// App Engine Example\nconst appengineNeg = new gcp.compute.RegionNetworkEndpointGroup(\"appengine_neg\", {\n name: \"appengine-neg\",\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n appEngine: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# App Engine Example\nappengine_neg = gcp.compute.RegionNetworkEndpointGroup(\"appengine_neg\",\n name=\"appengine-neg\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n app_engine={})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // App Engine Example\n var appengineNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"appengine_neg\", new()\n {\n Name = \"appengine-neg\",\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n AppEngine = null,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// App Engine Example\n\t\t_, err := compute.NewRegionNetworkEndpointGroup(ctx, \"appengine_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"appengine-neg\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tAppEngine: \u0026compute.RegionNetworkEndpointGroupAppEngineArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupAppEngineArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // App Engine Example\n var appengineNeg = new RegionNetworkEndpointGroup(\"appengineNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"appengine-neg\")\n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .appEngine()\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # App Engine Example\n appengineNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: appengine_neg\n properties:\n name: appengine-neg\n networkEndpointType: SERVERLESS\n region: us-central1\n appEngine: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Psc\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pscNeg = new gcp.compute.RegionNetworkEndpointGroup(\"psc_neg\", {\n name: \"psc-neg\",\n region: \"asia-northeast3\",\n networkEndpointType: \"PRIVATE_SERVICE_CONNECT\",\n pscTargetService: \"asia-northeast3-cloudkms.googleapis.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npsc_neg = gcp.compute.RegionNetworkEndpointGroup(\"psc_neg\",\n name=\"psc-neg\",\n region=\"asia-northeast3\",\n network_endpoint_type=\"PRIVATE_SERVICE_CONNECT\",\n psc_target_service=\"asia-northeast3-cloudkms.googleapis.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pscNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"psc_neg\", new()\n {\n Name = \"psc-neg\",\n Region = \"asia-northeast3\",\n NetworkEndpointType = \"PRIVATE_SERVICE_CONNECT\",\n PscTargetService = \"asia-northeast3-cloudkms.googleapis.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionNetworkEndpointGroup(ctx, \"psc_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"psc-neg\"),\n\t\t\tRegion: pulumi.String(\"asia-northeast3\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tPscTargetService: pulumi.String(\"asia-northeast3-cloudkms.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pscNeg = new RegionNetworkEndpointGroup(\"pscNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"psc-neg\")\n .region(\"asia-northeast3\")\n .networkEndpointType(\"PRIVATE_SERVICE_CONNECT\")\n .pscTargetService(\"asia-northeast3-cloudkms.googleapis.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pscNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: psc_neg\n properties:\n name: psc-neg\n region: asia-northeast3\n networkEndpointType: PRIVATE_SERVICE_CONNECT\n pscTargetService: asia-northeast3-cloudkms.googleapis.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Psc Service Attachment\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {name: \"psc-network\"});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"psc-subnetwork\",\n ipCidrRange: \"10.0.0.0/16\",\n region: \"europe-west4\",\n network: _default.id,\n});\nconst pscSubnetwork = new gcp.compute.Subnetwork(\"psc_subnetwork\", {\n name: \"psc-subnetwork-nat\",\n ipCidrRange: \"10.1.0.0/16\",\n region: \"europe-west4\",\n purpose: \"PRIVATE_SERVICE_CONNECT\",\n network: _default.id,\n});\nconst defaultHealthCheck = new gcp.compute.HealthCheck(\"default\", {\n name: \"psc-healthcheck\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n tcpHealthCheck: {\n port: 80,\n },\n});\nconst defaultRegionBackendService = new gcp.compute.RegionBackendService(\"default\", {\n name: \"psc-backend\",\n region: \"europe-west4\",\n healthChecks: defaultHealthCheck.id,\n});\nconst defaultForwardingRule = new gcp.compute.ForwardingRule(\"default\", {\n name: \"psc-forwarding-rule\",\n region: \"europe-west4\",\n loadBalancingScheme: \"INTERNAL\",\n backendService: defaultRegionBackendService.id,\n allPorts: true,\n network: _default.name,\n subnetwork: defaultSubnetwork.name,\n});\nconst defaultServiceAttachment = new gcp.compute.ServiceAttachment(\"default\", {\n name: \"psc-service-attachment\",\n region: \"europe-west4\",\n description: \"A service attachment configured with Terraform\",\n enableProxyProtocol: false,\n connectionPreference: \"ACCEPT_AUTOMATIC\",\n natSubnets: [pscSubnetwork.selfLink],\n targetService: defaultForwardingRule.selfLink,\n});\nconst pscNegServiceAttachment = new gcp.compute.RegionNetworkEndpointGroup(\"psc_neg_service_attachment\", {\n name: \"psc-neg\",\n region: \"europe-west4\",\n networkEndpointType: \"PRIVATE_SERVICE_CONNECT\",\n pscTargetService: defaultServiceAttachment.selfLink,\n network: _default.selfLink,\n subnetwork: defaultSubnetwork.selfLink,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\", name=\"psc-network\")\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"psc-subnetwork\",\n ip_cidr_range=\"10.0.0.0/16\",\n region=\"europe-west4\",\n network=default.id)\npsc_subnetwork = gcp.compute.Subnetwork(\"psc_subnetwork\",\n name=\"psc-subnetwork-nat\",\n ip_cidr_range=\"10.1.0.0/16\",\n region=\"europe-west4\",\n purpose=\"PRIVATE_SERVICE_CONNECT\",\n network=default.id)\ndefault_health_check = gcp.compute.HealthCheck(\"default\",\n name=\"psc-healthcheck\",\n check_interval_sec=1,\n timeout_sec=1,\n tcp_health_check={\n \"port\": 80,\n })\ndefault_region_backend_service = gcp.compute.RegionBackendService(\"default\",\n name=\"psc-backend\",\n region=\"europe-west4\",\n health_checks=default_health_check.id)\ndefault_forwarding_rule = gcp.compute.ForwardingRule(\"default\",\n name=\"psc-forwarding-rule\",\n region=\"europe-west4\",\n load_balancing_scheme=\"INTERNAL\",\n backend_service=default_region_backend_service.id,\n all_ports=True,\n network=default.name,\n subnetwork=default_subnetwork.name)\ndefault_service_attachment = gcp.compute.ServiceAttachment(\"default\",\n name=\"psc-service-attachment\",\n region=\"europe-west4\",\n description=\"A service attachment configured with Terraform\",\n enable_proxy_protocol=False,\n connection_preference=\"ACCEPT_AUTOMATIC\",\n nat_subnets=[psc_subnetwork.self_link],\n target_service=default_forwarding_rule.self_link)\npsc_neg_service_attachment = gcp.compute.RegionNetworkEndpointGroup(\"psc_neg_service_attachment\",\n name=\"psc-neg\",\n region=\"europe-west4\",\n network_endpoint_type=\"PRIVATE_SERVICE_CONNECT\",\n psc_target_service=default_service_attachment.self_link,\n network=default.self_link,\n subnetwork=default_subnetwork.self_link)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"psc-network\",\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"psc-subnetwork\",\n IpCidrRange = \"10.0.0.0/16\",\n Region = \"europe-west4\",\n Network = @default.Id,\n });\n\n var pscSubnetwork = new Gcp.Compute.Subnetwork(\"psc_subnetwork\", new()\n {\n Name = \"psc-subnetwork-nat\",\n IpCidrRange = \"10.1.0.0/16\",\n Region = \"europe-west4\",\n Purpose = \"PRIVATE_SERVICE_CONNECT\",\n Network = @default.Id,\n });\n\n var defaultHealthCheck = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"psc-healthcheck\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n TcpHealthCheck = new Gcp.Compute.Inputs.HealthCheckTcpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var defaultRegionBackendService = new Gcp.Compute.RegionBackendService(\"default\", new()\n {\n Name = \"psc-backend\",\n Region = \"europe-west4\",\n HealthChecks = defaultHealthCheck.Id,\n });\n\n var defaultForwardingRule = new Gcp.Compute.ForwardingRule(\"default\", new()\n {\n Name = \"psc-forwarding-rule\",\n Region = \"europe-west4\",\n LoadBalancingScheme = \"INTERNAL\",\n BackendService = defaultRegionBackendService.Id,\n AllPorts = true,\n Network = @default.Name,\n Subnetwork = defaultSubnetwork.Name,\n });\n\n var defaultServiceAttachment = new Gcp.Compute.ServiceAttachment(\"default\", new()\n {\n Name = \"psc-service-attachment\",\n Region = \"europe-west4\",\n Description = \"A service attachment configured with Terraform\",\n EnableProxyProtocol = false,\n ConnectionPreference = \"ACCEPT_AUTOMATIC\",\n NatSubnets = new[]\n {\n pscSubnetwork.SelfLink,\n },\n TargetService = defaultForwardingRule.SelfLink,\n });\n\n var pscNegServiceAttachment = new Gcp.Compute.RegionNetworkEndpointGroup(\"psc_neg_service_attachment\", new()\n {\n Name = \"psc-neg\",\n Region = \"europe-west4\",\n NetworkEndpointType = \"PRIVATE_SERVICE_CONNECT\",\n PscTargetService = defaultServiceAttachment.SelfLink,\n Network = @default.SelfLink,\n Subnetwork = defaultSubnetwork.SelfLink,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"psc-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"psc-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/16\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpscSubnetwork, err := compute.NewSubnetwork(ctx, \"psc_subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"psc-subnetwork-nat\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.1.0.0/16\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tPurpose: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultHealthCheck, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"psc-healthcheck\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t\tTcpHealthCheck: \u0026compute.HealthCheckTcpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultRegionBackendService, err := compute.NewRegionBackendService(ctx, \"default\", \u0026compute.RegionBackendServiceArgs{\n\t\t\tName: pulumi.String(\"psc-backend\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tHealthChecks: defaultHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultForwardingRule, err := compute.NewForwardingRule(ctx, \"default\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"psc-forwarding-rule\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL\"),\n\t\t\tBackendService: defaultRegionBackendService.ID(),\n\t\t\tAllPorts: pulumi.Bool(true),\n\t\t\tNetwork: _default.Name,\n\t\t\tSubnetwork: defaultSubnetwork.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultServiceAttachment, err := compute.NewServiceAttachment(ctx, \"default\", \u0026compute.ServiceAttachmentArgs{\n\t\t\tName: pulumi.String(\"psc-service-attachment\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tDescription: pulumi.String(\"A service attachment configured with Terraform\"),\n\t\t\tEnableProxyProtocol: pulumi.Bool(false),\n\t\t\tConnectionPreference: pulumi.String(\"ACCEPT_AUTOMATIC\"),\n\t\t\tNatSubnets: pulumi.StringArray{\n\t\t\t\tpscSubnetwork.SelfLink,\n\t\t\t},\n\t\t\tTargetService: defaultForwardingRule.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"psc_neg_service_attachment\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"psc-neg\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tPscTargetService: defaultServiceAttachment.SelfLink,\n\t\t\tNetwork: _default.SelfLink,\n\t\t\tSubnetwork: defaultSubnetwork.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.RegionBackendService;\nimport com.pulumi.gcp.compute.RegionBackendServiceArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.ServiceAttachment;\nimport com.pulumi.gcp.compute.ServiceAttachmentArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"psc-network\")\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"psc-subnetwork\")\n .ipCidrRange(\"10.0.0.0/16\")\n .region(\"europe-west4\")\n .network(default_.id())\n .build());\n\n var pscSubnetwork = new Subnetwork(\"pscSubnetwork\", SubnetworkArgs.builder()\n .name(\"psc-subnetwork-nat\")\n .ipCidrRange(\"10.1.0.0/16\")\n .region(\"europe-west4\")\n .purpose(\"PRIVATE_SERVICE_CONNECT\")\n .network(default_.id())\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder()\n .name(\"psc-healthcheck\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder()\n .name(\"psc-backend\")\n .region(\"europe-west4\")\n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var defaultForwardingRule = new ForwardingRule(\"defaultForwardingRule\", ForwardingRuleArgs.builder()\n .name(\"psc-forwarding-rule\")\n .region(\"europe-west4\")\n .loadBalancingScheme(\"INTERNAL\")\n .backendService(defaultRegionBackendService.id())\n .allPorts(true)\n .network(default_.name())\n .subnetwork(defaultSubnetwork.name())\n .build());\n\n var defaultServiceAttachment = new ServiceAttachment(\"defaultServiceAttachment\", ServiceAttachmentArgs.builder()\n .name(\"psc-service-attachment\")\n .region(\"europe-west4\")\n .description(\"A service attachment configured with Terraform\")\n .enableProxyProtocol(false)\n .connectionPreference(\"ACCEPT_AUTOMATIC\")\n .natSubnets(pscSubnetwork.selfLink())\n .targetService(defaultForwardingRule.selfLink())\n .build());\n\n var pscNegServiceAttachment = new RegionNetworkEndpointGroup(\"pscNegServiceAttachment\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"psc-neg\")\n .region(\"europe-west4\")\n .networkEndpointType(\"PRIVATE_SERVICE_CONNECT\")\n .pscTargetService(defaultServiceAttachment.selfLink())\n .network(default_.selfLink())\n .subnetwork(defaultSubnetwork.selfLink())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: psc-network\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: psc-subnetwork\n ipCidrRange: 10.0.0.0/16\n region: europe-west4\n network: ${default.id}\n pscSubnetwork:\n type: gcp:compute:Subnetwork\n name: psc_subnetwork\n properties:\n name: psc-subnetwork-nat\n ipCidrRange: 10.1.0.0/16\n region: europe-west4\n purpose: PRIVATE_SERVICE_CONNECT\n network: ${default.id}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n name: default\n properties:\n name: psc-healthcheck\n checkIntervalSec: 1\n timeoutSec: 1\n tcpHealthCheck:\n port: '80'\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n name: default\n properties:\n name: psc-backend\n region: europe-west4\n healthChecks: ${defaultHealthCheck.id}\n defaultForwardingRule:\n type: gcp:compute:ForwardingRule\n name: default\n properties:\n name: psc-forwarding-rule\n region: europe-west4\n loadBalancingScheme: INTERNAL\n backendService: ${defaultRegionBackendService.id}\n allPorts: true\n network: ${default.name}\n subnetwork: ${defaultSubnetwork.name}\n defaultServiceAttachment:\n type: gcp:compute:ServiceAttachment\n name: default\n properties:\n name: psc-service-attachment\n region: europe-west4\n description: A service attachment configured with Terraform\n enableProxyProtocol: false\n connectionPreference: ACCEPT_AUTOMATIC\n natSubnets:\n - ${pscSubnetwork.selfLink}\n targetService: ${defaultForwardingRule.selfLink}\n pscNegServiceAttachment:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: psc_neg_service_attachment\n properties:\n name: psc-neg\n region: europe-west4\n networkEndpointType: PRIVATE_SERVICE_CONNECT\n pscTargetService: ${defaultServiceAttachment.selfLink}\n network: ${default.selfLink}\n subnetwork: ${defaultSubnetwork.selfLink}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Internet Ip Port\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {name: \"network\"});\nconst regionNetworkEndpointGroupInternetIpPort = new gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_ip_port\", {\n name: \"ip-port-neg\",\n region: \"us-central1\",\n network: _default.id,\n networkEndpointType: \"INTERNET_IP_PORT\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\", name=\"network\")\nregion_network_endpoint_group_internet_ip_port = gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_ip_port\",\n name=\"ip-port-neg\",\n region=\"us-central1\",\n network=default.id,\n network_endpoint_type=\"INTERNET_IP_PORT\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"network\",\n });\n\n var regionNetworkEndpointGroupInternetIpPort = new Gcp.Compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_ip_port\", new()\n {\n Name = \"ip-port-neg\",\n Region = \"us-central1\",\n Network = @default.Id,\n NetworkEndpointType = \"INTERNET_IP_PORT\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"region_network_endpoint_group_internet_ip_port\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"ip-port-neg\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tNetworkEndpointType: pulumi.String(\"INTERNET_IP_PORT\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var regionNetworkEndpointGroupInternetIpPort = new RegionNetworkEndpointGroup(\"regionNetworkEndpointGroupInternetIpPort\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"ip-port-neg\")\n .region(\"us-central1\")\n .network(default_.id())\n .networkEndpointType(\"INTERNET_IP_PORT\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionNetworkEndpointGroupInternetIpPort:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: region_network_endpoint_group_internet_ip_port\n properties:\n name: ip-port-neg\n region: us-central1\n network: ${default.id}\n networkEndpointType: INTERNET_IP_PORT\n default:\n type: gcp:compute:Network\n properties:\n name: network\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Internet Fqdn Port\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {name: \"network\"});\nconst regionNetworkEndpointGroupInternetFqdnPort = new gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_fqdn_port\", {\n name: \"ip-port-neg\",\n region: \"us-central1\",\n network: _default.id,\n networkEndpointType: \"INTERNET_FQDN_PORT\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\", name=\"network\")\nregion_network_endpoint_group_internet_fqdn_port = gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_fqdn_port\",\n name=\"ip-port-neg\",\n region=\"us-central1\",\n network=default.id,\n network_endpoint_type=\"INTERNET_FQDN_PORT\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"network\",\n });\n\n var regionNetworkEndpointGroupInternetFqdnPort = new Gcp.Compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_fqdn_port\", new()\n {\n Name = \"ip-port-neg\",\n Region = \"us-central1\",\n Network = @default.Id,\n NetworkEndpointType = \"INTERNET_FQDN_PORT\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"region_network_endpoint_group_internet_fqdn_port\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"ip-port-neg\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tNetworkEndpointType: pulumi.String(\"INTERNET_FQDN_PORT\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var regionNetworkEndpointGroupInternetFqdnPort = new RegionNetworkEndpointGroup(\"regionNetworkEndpointGroupInternetFqdnPort\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"ip-port-neg\")\n .region(\"us-central1\")\n .network(default_.id())\n .networkEndpointType(\"INTERNET_FQDN_PORT\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionNetworkEndpointGroupInternetFqdnPort:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: region_network_endpoint_group_internet_fqdn_port\n properties:\n name: ip-port-neg\n region: us-central1\n network: ${default.id}\n networkEndpointType: INTERNET_FQDN_PORT\n default:\n type: gcp:compute:Network\n properties:\n name: network\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Portmap\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {name: \"network\"});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"subnetwork\",\n ipCidrRange: \"10.0.0.0/16\",\n region: \"us-central1\",\n network: _default.id,\n});\nconst regionNetworkEndpointGroupPortmap = new gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_portmap\", {\n name: \"portmap-neg\",\n region: \"us-central1\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n networkEndpointType: \"GCE_VM_IP_PORTMAP\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\", name=\"network\")\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"subnetwork\",\n ip_cidr_range=\"10.0.0.0/16\",\n region=\"us-central1\",\n network=default.id)\nregion_network_endpoint_group_portmap = gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_portmap\",\n name=\"portmap-neg\",\n region=\"us-central1\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n network_endpoint_type=\"GCE_VM_IP_PORTMAP\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"network\",\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"subnetwork\",\n IpCidrRange = \"10.0.0.0/16\",\n Region = \"us-central1\",\n Network = @default.Id,\n });\n\n var regionNetworkEndpointGroupPortmap = new Gcp.Compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_portmap\", new()\n {\n Name = \"portmap-neg\",\n Region = \"us-central1\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n NetworkEndpointType = \"GCE_VM_IP_PORTMAP\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/16\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"region_network_endpoint_group_portmap\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"portmap-neg\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tNetworkEndpointType: pulumi.String(\"GCE_VM_IP_PORTMAP\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"subnetwork\")\n .ipCidrRange(\"10.0.0.0/16\")\n .region(\"us-central1\")\n .network(default_.id())\n .build());\n\n var regionNetworkEndpointGroupPortmap = new RegionNetworkEndpointGroup(\"regionNetworkEndpointGroupPortmap\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"portmap-neg\")\n .region(\"us-central1\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .networkEndpointType(\"GCE_VM_IP_PORTMAP\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionNetworkEndpointGroupPortmap:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: region_network_endpoint_group_portmap\n properties:\n name: portmap-neg\n region: us-central1\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n networkEndpointType: GCE_VM_IP_PORTMAP\n default:\n type: gcp:compute:Network\n properties:\n name: network\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: subnetwork\n ipCidrRange: 10.0.0.0/16\n region: us-central1\n network: ${default.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionNetworkEndpointGroup can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/networkEndpointGroups/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, RegionNetworkEndpointGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default projects/{{project}}/regions/{{region}}/networkEndpointGroups/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{name}}\n```\n\n",
+ "description": "A regional NEG that can support Serverless Products, proxying traffic to\nexternal backends and providing traffic to the PSC port mapping endpoints.\n\nTo get more information about RegionNetworkEndpointGroup, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups)\n* How-to Guides\n * [Internet NEGs Official Documentation](https://cloud.google.com/load-balancing/docs/negs/internet-neg-concepts)\n * [Serverless NEGs Official Documentation](https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts)\n\n## Example Usage\n\n### Region Network Endpoint Group Functions\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n name: \"cloudfunctions-function-example-bucket\",\n location: \"US\",\n});\nconst archive = new gcp.storage.BucketObject(\"archive\", {\n name: \"index.zip\",\n bucket: bucket.name,\n source: new pulumi.asset.FileAsset(\"path/to/index.zip\"),\n});\nconst functionNegFunction = new gcp.cloudfunctions.Function(\"function_neg\", {\n name: \"function-neg\",\n description: \"My function\",\n runtime: \"nodejs10\",\n availableMemoryMb: 128,\n sourceArchiveBucket: bucket.name,\n sourceArchiveObject: archive.name,\n triggerHttp: true,\n timeout: 60,\n entryPoint: \"helloGET\",\n});\n// Cloud Functions Example\nconst functionNeg = new gcp.compute.RegionNetworkEndpointGroup(\"function_neg\", {\n name: \"function-neg\",\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n cloudFunction: {\n \"function\": functionNegFunction.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\",\n name=\"cloudfunctions-function-example-bucket\",\n location=\"US\")\narchive = gcp.storage.BucketObject(\"archive\",\n name=\"index.zip\",\n bucket=bucket.name,\n source=pulumi.FileAsset(\"path/to/index.zip\"))\nfunction_neg_function = gcp.cloudfunctions.Function(\"function_neg\",\n name=\"function-neg\",\n description=\"My function\",\n runtime=\"nodejs10\",\n available_memory_mb=128,\n source_archive_bucket=bucket.name,\n source_archive_object=archive.name,\n trigger_http=True,\n timeout=60,\n entry_point=\"helloGET\")\n# Cloud Functions Example\nfunction_neg = gcp.compute.RegionNetworkEndpointGroup(\"function_neg\",\n name=\"function-neg\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n cloud_function={\n \"function\": function_neg_function.name,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Name = \"cloudfunctions-function-example-bucket\",\n Location = \"US\",\n });\n\n var archive = new Gcp.Storage.BucketObject(\"archive\", new()\n {\n Name = \"index.zip\",\n Bucket = bucket.Name,\n Source = new FileAsset(\"path/to/index.zip\"),\n });\n\n var functionNegFunction = new Gcp.CloudFunctions.Function(\"function_neg\", new()\n {\n Name = \"function-neg\",\n Description = \"My function\",\n Runtime = \"nodejs10\",\n AvailableMemoryMb = 128,\n SourceArchiveBucket = bucket.Name,\n SourceArchiveObject = archive.Name,\n TriggerHttp = true,\n Timeout = 60,\n EntryPoint = \"helloGET\",\n });\n\n // Cloud Functions Example\n var functionNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"function_neg\", new()\n {\n Name = \"function-neg\",\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n CloudFunction = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupCloudFunctionArgs\n {\n Function = functionNegFunction.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudfunctions\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"cloudfunctions-function-example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tarchive, err := storage.NewBucketObject(ctx, \"archive\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"index.zip\"),\n\t\t\tBucket: bucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"path/to/index.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfunctionNegFunction, err := cloudfunctions.NewFunction(ctx, \"function_neg\", \u0026cloudfunctions.FunctionArgs{\n\t\t\tName: pulumi.String(\"function-neg\"),\n\t\t\tDescription: pulumi.String(\"My function\"),\n\t\t\tRuntime: pulumi.String(\"nodejs10\"),\n\t\t\tAvailableMemoryMb: pulumi.Int(128),\n\t\t\tSourceArchiveBucket: bucket.Name,\n\t\t\tSourceArchiveObject: archive.Name,\n\t\t\tTriggerHttp: pulumi.Bool(true),\n\t\t\tTimeout: pulumi.Int(60),\n\t\t\tEntryPoint: pulumi.String(\"helloGET\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Cloud Functions Example\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"function_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"function-neg\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tCloudFunction: \u0026compute.RegionNetworkEndpointGroupCloudFunctionArgs{\n\t\t\t\tFunction: functionNegFunction.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.cloudfunctions.Function;\nimport com.pulumi.gcp.cloudfunctions.FunctionArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudFunctionArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bucket = new Bucket(\"bucket\", BucketArgs.builder()\n .name(\"cloudfunctions-function-example-bucket\")\n .location(\"US\")\n .build());\n\n var archive = new BucketObject(\"archive\", BucketObjectArgs.builder()\n .name(\"index.zip\")\n .bucket(bucket.name())\n .source(new FileAsset(\"path/to/index.zip\"))\n .build());\n\n var functionNegFunction = new Function(\"functionNegFunction\", FunctionArgs.builder()\n .name(\"function-neg\")\n .description(\"My function\")\n .runtime(\"nodejs10\")\n .availableMemoryMb(128)\n .sourceArchiveBucket(bucket.name())\n .sourceArchiveObject(archive.name())\n .triggerHttp(true)\n .timeout(60)\n .entryPoint(\"helloGET\")\n .build());\n\n // Cloud Functions Example\n var functionNeg = new RegionNetworkEndpointGroup(\"functionNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"function-neg\")\n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .cloudFunction(RegionNetworkEndpointGroupCloudFunctionArgs.builder()\n .function(functionNegFunction.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Cloud Functions Example\n functionNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: function_neg\n properties:\n name: function-neg\n networkEndpointType: SERVERLESS\n region: us-central1\n cloudFunction:\n function: ${functionNegFunction.name}\n functionNegFunction:\n type: gcp:cloudfunctions:Function\n name: function_neg\n properties:\n name: function-neg\n description: My function\n runtime: nodejs10\n availableMemoryMb: 128\n sourceArchiveBucket: ${bucket.name}\n sourceArchiveObject: ${archive.name}\n triggerHttp: true\n timeout: 60\n entryPoint: helloGET\n bucket:\n type: gcp:storage:Bucket\n properties:\n name: cloudfunctions-function-example-bucket\n location: US\n archive:\n type: gcp:storage:BucketObject\n properties:\n name: index.zip\n bucket: ${bucket.name}\n source:\n fn::FileAsset: path/to/index.zip\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Cloudrun\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudrunNegService = new gcp.cloudrun.Service(\"cloudrun_neg\", {\n name: \"cloudrun-neg\",\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n traffics: [{\n percent: 100,\n latestRevision: true,\n }],\n});\n// Cloud Run Example\nconst cloudrunNeg = new gcp.compute.RegionNetworkEndpointGroup(\"cloudrun_neg\", {\n name: \"cloudrun-neg\",\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n cloudRun: {\n service: cloudrunNegService.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloudrun_neg_service = gcp.cloudrun.Service(\"cloudrun_neg\",\n name=\"cloudrun-neg\",\n location=\"us-central1\",\n template={\n \"spec\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n traffics=[{\n \"percent\": 100,\n \"latest_revision\": True,\n }])\n# Cloud Run Example\ncloudrun_neg = gcp.compute.RegionNetworkEndpointGroup(\"cloudrun_neg\",\n name=\"cloudrun-neg\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n cloud_run={\n \"service\": cloudrun_neg_service.name,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudrunNegService = new Gcp.CloudRun.Service(\"cloudrun_neg\", new()\n {\n Name = \"cloudrun-neg\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTrafficArgs\n {\n Percent = 100,\n LatestRevision = true,\n },\n },\n });\n\n // Cloud Run Example\n var cloudrunNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"cloudrun_neg\", new()\n {\n Name = \"cloudrun-neg\",\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n CloudRun = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupCloudRunArgs\n {\n Service = cloudrunNegService.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudrunNegService, err := cloudrun.NewService(ctx, \"cloudrun_neg\", \u0026cloudrun.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-neg\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrun.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrun.ServiceTrafficArgs{\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t\tLatestRevision: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Cloud Run Example\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"cloudrun_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"cloudrun-neg\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tCloudRun: \u0026compute.RegionNetworkEndpointGroupCloudRunArgs{\n\t\t\t\tService: cloudrunNegService.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudRunArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudrunNegService = new Service(\"cloudrunNegService\", ServiceArgs.builder()\n .name(\"cloudrun-neg\")\n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .percent(100)\n .latestRevision(true)\n .build())\n .build());\n\n // Cloud Run Example\n var cloudrunNeg = new RegionNetworkEndpointGroup(\"cloudrunNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"cloudrun-neg\")\n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .cloudRun(RegionNetworkEndpointGroupCloudRunArgs.builder()\n .service(cloudrunNegService.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Cloud Run Example\n cloudrunNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: cloudrun_neg\n properties:\n name: cloudrun-neg\n networkEndpointType: SERVERLESS\n region: us-central1\n cloudRun:\n service: ${cloudrunNegService.name}\n cloudrunNegService:\n type: gcp:cloudrun:Service\n name: cloudrun_neg\n properties:\n name: cloudrun-neg\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n traffics:\n - percent: 100\n latestRevision: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Appengine\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appengineNegBucket = new gcp.storage.Bucket(\"appengine_neg\", {\n name: \"appengine-neg\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst appengineNegBucketObject = new gcp.storage.BucketObject(\"appengine_neg\", {\n name: \"hello-world.zip\",\n bucket: appengineNegBucket.name,\n source: new pulumi.asset.FileAsset(\"./test-fixtures/hello-world.zip\"),\n});\nconst appengineNegFlexibleAppVersion = new gcp.appengine.FlexibleAppVersion(\"appengine_neg\", {\n versionId: \"v1\",\n service: \"appengine-neg\",\n runtime: \"nodejs\",\n flexibleRuntimeSettings: {\n operatingSystem: \"ubuntu22\",\n runtimeVersion: \"20\",\n },\n entrypoint: {\n shell: \"node ./app.js\",\n },\n deployment: {\n zip: {\n sourceUrl: pulumi.interpolate`https://storage.googleapis.com/${appengineNegBucket.name}/${appengineNegBucketObject.name}`,\n },\n },\n livenessCheck: {\n path: \"/\",\n },\n readinessCheck: {\n path: \"/\",\n },\n envVariables: {\n port: \"8080\",\n },\n handlers: [{\n urlRegex: \".*\\\\/my-path\\\\/*\",\n securityLevel: \"SECURE_ALWAYS\",\n login: \"LOGIN_REQUIRED\",\n authFailAction: \"AUTH_FAIL_ACTION_REDIRECT\",\n staticFiles: {\n path: \"my-other-path\",\n uploadPathRegex: \".*\\\\/my-path\\\\/*\",\n },\n }],\n automaticScaling: {\n coolDownPeriod: \"120s\",\n cpuUtilization: {\n targetUtilization: 0.5,\n },\n },\n deleteServiceOnDestroy: true,\n});\n// App Engine Example\nconst appengineNeg = new gcp.compute.RegionNetworkEndpointGroup(\"appengine_neg\", {\n name: \"appengine-neg\",\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n appEngine: {\n service: appengineNegFlexibleAppVersion.service,\n version: appengineNegFlexibleAppVersion.versionId,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappengine_neg_bucket = gcp.storage.Bucket(\"appengine_neg\",\n name=\"appengine-neg\",\n location=\"US\",\n uniform_bucket_level_access=True)\nappengine_neg_bucket_object = gcp.storage.BucketObject(\"appengine_neg\",\n name=\"hello-world.zip\",\n bucket=appengine_neg_bucket.name,\n source=pulumi.FileAsset(\"./test-fixtures/hello-world.zip\"))\nappengine_neg_flexible_app_version = gcp.appengine.FlexibleAppVersion(\"appengine_neg\",\n version_id=\"v1\",\n service=\"appengine-neg\",\n runtime=\"nodejs\",\n flexible_runtime_settings={\n \"operating_system\": \"ubuntu22\",\n \"runtime_version\": \"20\",\n },\n entrypoint={\n \"shell\": \"node ./app.js\",\n },\n deployment={\n \"zip\": {\n \"source_url\": pulumi.Output.all(\n appengineNegBucketName=appengine_neg_bucket.name,\n appengineNegBucketObjectName=appengine_neg_bucket_object.name\n).apply(lambda resolved_outputs: f\"https://storage.googleapis.com/{resolved_outputs['appengineNegBucketName']}/{resolved_outputs['appengineNegBucketObjectName']}\")\n,\n },\n },\n liveness_check={\n \"path\": \"/\",\n },\n readiness_check={\n \"path\": \"/\",\n },\n env_variables={\n \"port\": \"8080\",\n },\n handlers=[{\n \"url_regex\": \".*\\\\/my-path\\\\/*\",\n \"security_level\": \"SECURE_ALWAYS\",\n \"login\": \"LOGIN_REQUIRED\",\n \"auth_fail_action\": \"AUTH_FAIL_ACTION_REDIRECT\",\n \"static_files\": {\n \"path\": \"my-other-path\",\n \"upload_path_regex\": \".*\\\\/my-path\\\\/*\",\n },\n }],\n automatic_scaling={\n \"cool_down_period\": \"120s\",\n \"cpu_utilization\": {\n \"target_utilization\": 0.5,\n },\n },\n delete_service_on_destroy=True)\n# App Engine Example\nappengine_neg = gcp.compute.RegionNetworkEndpointGroup(\"appengine_neg\",\n name=\"appengine-neg\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n app_engine={\n \"service\": appengine_neg_flexible_app_version.service,\n \"version\": appengine_neg_flexible_app_version.version_id,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appengineNegBucket = new Gcp.Storage.Bucket(\"appengine_neg\", new()\n {\n Name = \"appengine-neg\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var appengineNegBucketObject = new Gcp.Storage.BucketObject(\"appengine_neg\", new()\n {\n Name = \"hello-world.zip\",\n Bucket = appengineNegBucket.Name,\n Source = new FileAsset(\"./test-fixtures/hello-world.zip\"),\n });\n\n var appengineNegFlexibleAppVersion = new Gcp.AppEngine.FlexibleAppVersion(\"appengine_neg\", new()\n {\n VersionId = \"v1\",\n Service = \"appengine-neg\",\n Runtime = \"nodejs\",\n FlexibleRuntimeSettings = new Gcp.AppEngine.Inputs.FlexibleAppVersionFlexibleRuntimeSettingsArgs\n {\n OperatingSystem = \"ubuntu22\",\n RuntimeVersion = \"20\",\n },\n Entrypoint = new Gcp.AppEngine.Inputs.FlexibleAppVersionEntrypointArgs\n {\n Shell = \"node ./app.js\",\n },\n Deployment = new Gcp.AppEngine.Inputs.FlexibleAppVersionDeploymentArgs\n {\n Zip = new Gcp.AppEngine.Inputs.FlexibleAppVersionDeploymentZipArgs\n {\n SourceUrl = Output.Tuple(appengineNegBucket.Name, appengineNegBucketObject.Name).Apply(values =\u003e\n {\n var appengineNegBucketName = values.Item1;\n var appengineNegBucketObjectName = values.Item2;\n return $\"https://storage.googleapis.com/{appengineNegBucketName}/{appengineNegBucketObjectName}\";\n }),\n },\n },\n LivenessCheck = new Gcp.AppEngine.Inputs.FlexibleAppVersionLivenessCheckArgs\n {\n Path = \"/\",\n },\n ReadinessCheck = new Gcp.AppEngine.Inputs.FlexibleAppVersionReadinessCheckArgs\n {\n Path = \"/\",\n },\n EnvVariables = \n {\n { \"port\", \"8080\" },\n },\n Handlers = new[]\n {\n new Gcp.AppEngine.Inputs.FlexibleAppVersionHandlerArgs\n {\n UrlRegex = \".*\\\\/my-path\\\\/*\",\n SecurityLevel = \"SECURE_ALWAYS\",\n Login = \"LOGIN_REQUIRED\",\n AuthFailAction = \"AUTH_FAIL_ACTION_REDIRECT\",\n StaticFiles = new Gcp.AppEngine.Inputs.FlexibleAppVersionHandlerStaticFilesArgs\n {\n Path = \"my-other-path\",\n UploadPathRegex = \".*\\\\/my-path\\\\/*\",\n },\n },\n },\n AutomaticScaling = new Gcp.AppEngine.Inputs.FlexibleAppVersionAutomaticScalingArgs\n {\n CoolDownPeriod = \"120s\",\n CpuUtilization = new Gcp.AppEngine.Inputs.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs\n {\n TargetUtilization = 0.5,\n },\n },\n DeleteServiceOnDestroy = true,\n });\n\n // App Engine Example\n var appengineNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"appengine_neg\", new()\n {\n Name = \"appengine-neg\",\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n AppEngine = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupAppEngineArgs\n {\n Service = appengineNegFlexibleAppVersion.Service,\n Version = appengineNegFlexibleAppVersion.VersionId,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tappengineNegBucket, err := storage.NewBucket(ctx, \"appengine_neg\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"appengine-neg\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tappengineNegBucketObject, err := storage.NewBucketObject(ctx, \"appengine_neg\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"hello-world.zip\"),\n\t\t\tBucket: appengineNegBucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/hello-world.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tappengineNegFlexibleAppVersion, err := appengine.NewFlexibleAppVersion(ctx, \"appengine_neg\", \u0026appengine.FlexibleAppVersionArgs{\n\t\t\tVersionId: pulumi.String(\"v1\"),\n\t\t\tService: pulumi.String(\"appengine-neg\"),\n\t\t\tRuntime: pulumi.String(\"nodejs\"),\n\t\t\tFlexibleRuntimeSettings: \u0026appengine.FlexibleAppVersionFlexibleRuntimeSettingsArgs{\n\t\t\t\tOperatingSystem: pulumi.String(\"ubuntu22\"),\n\t\t\t\tRuntimeVersion: pulumi.String(\"20\"),\n\t\t\t},\n\t\t\tEntrypoint: \u0026appengine.FlexibleAppVersionEntrypointArgs{\n\t\t\t\tShell: pulumi.String(\"node ./app.js\"),\n\t\t\t},\n\t\t\tDeployment: \u0026appengine.FlexibleAppVersionDeploymentArgs{\n\t\t\t\tZip: \u0026appengine.FlexibleAppVersionDeploymentZipArgs{\n\t\t\t\t\tSourceUrl: pulumi.All(appengineNegBucket.Name, appengineNegBucketObject.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tappengineNegBucketName := _args[0].(string)\n\t\t\t\t\t\tappengineNegBucketObjectName := _args[1].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"https://storage.googleapis.com/%v/%v\", appengineNegBucketName, appengineNegBucketObjectName), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLivenessCheck: \u0026appengine.FlexibleAppVersionLivenessCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t},\n\t\t\tReadinessCheck: \u0026appengine.FlexibleAppVersionReadinessCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t},\n\t\t\tEnvVariables: pulumi.StringMap{\n\t\t\t\t\"port\": pulumi.String(\"8080\"),\n\t\t\t},\n\t\t\tHandlers: appengine.FlexibleAppVersionHandlerArray{\n\t\t\t\t\u0026appengine.FlexibleAppVersionHandlerArgs{\n\t\t\t\t\tUrlRegex: pulumi.String(\".*\\\\/my-path\\\\/*\"),\n\t\t\t\t\tSecurityLevel: pulumi.String(\"SECURE_ALWAYS\"),\n\t\t\t\t\tLogin: pulumi.String(\"LOGIN_REQUIRED\"),\n\t\t\t\t\tAuthFailAction: pulumi.String(\"AUTH_FAIL_ACTION_REDIRECT\"),\n\t\t\t\t\tStaticFiles: \u0026appengine.FlexibleAppVersionHandlerStaticFilesArgs{\n\t\t\t\t\t\tPath: pulumi.String(\"my-other-path\"),\n\t\t\t\t\t\tUploadPathRegex: pulumi.String(\".*\\\\/my-path\\\\/*\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutomaticScaling: \u0026appengine.FlexibleAppVersionAutomaticScalingArgs{\n\t\t\t\tCoolDownPeriod: pulumi.String(\"120s\"),\n\t\t\t\tCpuUtilization: \u0026appengine.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs{\n\t\t\t\t\tTargetUtilization: pulumi.Float64(0.5),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeleteServiceOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// App Engine Example\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"appengine_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"appengine-neg\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tAppEngine: \u0026compute.RegionNetworkEndpointGroupAppEngineArgs{\n\t\t\t\tService: appengineNegFlexibleAppVersion.Service,\n\t\t\t\tVersion: appengineNegFlexibleAppVersion.VersionId,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.appengine.FlexibleAppVersion;\nimport com.pulumi.gcp.appengine.FlexibleAppVersionArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionFlexibleRuntimeSettingsArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionEntrypointArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentZipArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionLivenessCheckArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionReadinessCheckArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerStaticFilesArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionAutomaticScalingArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupAppEngineArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var appengineNegBucket = new Bucket(\"appengineNegBucket\", BucketArgs.builder()\n .name(\"appengine-neg\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var appengineNegBucketObject = new BucketObject(\"appengineNegBucketObject\", BucketObjectArgs.builder()\n .name(\"hello-world.zip\")\n .bucket(appengineNegBucket.name())\n .source(new FileAsset(\"./test-fixtures/hello-world.zip\"))\n .build());\n\n var appengineNegFlexibleAppVersion = new FlexibleAppVersion(\"appengineNegFlexibleAppVersion\", FlexibleAppVersionArgs.builder()\n .versionId(\"v1\")\n .service(\"appengine-neg\")\n .runtime(\"nodejs\")\n .flexibleRuntimeSettings(FlexibleAppVersionFlexibleRuntimeSettingsArgs.builder()\n .operatingSystem(\"ubuntu22\")\n .runtimeVersion(\"20\")\n .build())\n .entrypoint(FlexibleAppVersionEntrypointArgs.builder()\n .shell(\"node ./app.js\")\n .build())\n .deployment(FlexibleAppVersionDeploymentArgs.builder()\n .zip(FlexibleAppVersionDeploymentZipArgs.builder()\n .sourceUrl(Output.tuple(appengineNegBucket.name(), appengineNegBucketObject.name()).applyValue(values -\u003e {\n var appengineNegBucketName = values.t1;\n var appengineNegBucketObjectName = values.t2;\n return String.format(\"https://storage.googleapis.com/%s/%s\", appengineNegBucketName,appengineNegBucketObjectName);\n }))\n .build())\n .build())\n .livenessCheck(FlexibleAppVersionLivenessCheckArgs.builder()\n .path(\"/\")\n .build())\n .readinessCheck(FlexibleAppVersionReadinessCheckArgs.builder()\n .path(\"/\")\n .build())\n .envVariables(Map.of(\"port\", \"8080\"))\n .handlers(FlexibleAppVersionHandlerArgs.builder()\n .urlRegex(\".*\\\\/my-path\\\\/*\")\n .securityLevel(\"SECURE_ALWAYS\")\n .login(\"LOGIN_REQUIRED\")\n .authFailAction(\"AUTH_FAIL_ACTION_REDIRECT\")\n .staticFiles(FlexibleAppVersionHandlerStaticFilesArgs.builder()\n .path(\"my-other-path\")\n .uploadPathRegex(\".*\\\\/my-path\\\\/*\")\n .build())\n .build())\n .automaticScaling(FlexibleAppVersionAutomaticScalingArgs.builder()\n .coolDownPeriod(\"120s\")\n .cpuUtilization(FlexibleAppVersionAutomaticScalingCpuUtilizationArgs.builder()\n .targetUtilization(0.5)\n .build())\n .build())\n .deleteServiceOnDestroy(true)\n .build());\n\n // App Engine Example\n var appengineNeg = new RegionNetworkEndpointGroup(\"appengineNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"appengine-neg\")\n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .appEngine(RegionNetworkEndpointGroupAppEngineArgs.builder()\n .service(appengineNegFlexibleAppVersion.service())\n .version(appengineNegFlexibleAppVersion.versionId())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # App Engine Example\n appengineNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: appengine_neg\n properties:\n name: appengine-neg\n networkEndpointType: SERVERLESS\n region: us-central1\n appEngine:\n service: ${appengineNegFlexibleAppVersion.service}\n version: ${appengineNegFlexibleAppVersion.versionId}\n appengineNegFlexibleAppVersion:\n type: gcp:appengine:FlexibleAppVersion\n name: appengine_neg\n properties:\n versionId: v1\n service: appengine-neg\n runtime: nodejs\n flexibleRuntimeSettings:\n operatingSystem: ubuntu22\n runtimeVersion: '20'\n entrypoint:\n shell: node ./app.js\n deployment:\n zip:\n sourceUrl: https://storage.googleapis.com/${appengineNegBucket.name}/${appengineNegBucketObject.name}\n livenessCheck:\n path: /\n readinessCheck:\n path: /\n envVariables:\n port: '8080'\n handlers:\n - urlRegex: .*\\/my-path\\/*\n securityLevel: SECURE_ALWAYS\n login: LOGIN_REQUIRED\n authFailAction: AUTH_FAIL_ACTION_REDIRECT\n staticFiles:\n path: my-other-path\n uploadPathRegex: .*\\/my-path\\/*\n automaticScaling:\n coolDownPeriod: 120s\n cpuUtilization:\n targetUtilization: 0.5\n deleteServiceOnDestroy: true\n appengineNegBucket:\n type: gcp:storage:Bucket\n name: appengine_neg\n properties:\n name: appengine-neg\n location: US\n uniformBucketLevelAccess: true\n appengineNegBucketObject:\n type: gcp:storage:BucketObject\n name: appengine_neg\n properties:\n name: hello-world.zip\n bucket: ${appengineNegBucket.name}\n source:\n fn::FileAsset: ./test-fixtures/hello-world.zip\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Appengine Empty\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// App Engine Example\nconst appengineNeg = new gcp.compute.RegionNetworkEndpointGroup(\"appengine_neg\", {\n name: \"appengine-neg\",\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n appEngine: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# App Engine Example\nappengine_neg = gcp.compute.RegionNetworkEndpointGroup(\"appengine_neg\",\n name=\"appengine-neg\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n app_engine={})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // App Engine Example\n var appengineNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"appengine_neg\", new()\n {\n Name = \"appengine-neg\",\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n AppEngine = null,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t// App Engine Example\n\t\t_, err := compute.NewRegionNetworkEndpointGroup(ctx, \"appengine_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"appengine-neg\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tAppEngine: \u0026compute.RegionNetworkEndpointGroupAppEngineArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupAppEngineArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n // App Engine Example\n var appengineNeg = new RegionNetworkEndpointGroup(\"appengineNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"appengine-neg\")\n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .appEngine()\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # App Engine Example\n appengineNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: appengine_neg\n properties:\n name: appengine-neg\n networkEndpointType: SERVERLESS\n region: us-central1\n appEngine: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Psc\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pscNeg = new gcp.compute.RegionNetworkEndpointGroup(\"psc_neg\", {\n name: \"psc-neg\",\n region: \"asia-northeast3\",\n networkEndpointType: \"PRIVATE_SERVICE_CONNECT\",\n pscTargetService: \"asia-northeast3-cloudkms.googleapis.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npsc_neg = gcp.compute.RegionNetworkEndpointGroup(\"psc_neg\",\n name=\"psc-neg\",\n region=\"asia-northeast3\",\n network_endpoint_type=\"PRIVATE_SERVICE_CONNECT\",\n psc_target_service=\"asia-northeast3-cloudkms.googleapis.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pscNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"psc_neg\", new()\n {\n Name = \"psc-neg\",\n Region = \"asia-northeast3\",\n NetworkEndpointType = \"PRIVATE_SERVICE_CONNECT\",\n PscTargetService = \"asia-northeast3-cloudkms.googleapis.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionNetworkEndpointGroup(ctx, \"psc_neg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"psc-neg\"),\n\t\t\tRegion: pulumi.String(\"asia-northeast3\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tPscTargetService: pulumi.String(\"asia-northeast3-cloudkms.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pscNeg = new RegionNetworkEndpointGroup(\"pscNeg\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"psc-neg\")\n .region(\"asia-northeast3\")\n .networkEndpointType(\"PRIVATE_SERVICE_CONNECT\")\n .pscTargetService(\"asia-northeast3-cloudkms.googleapis.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pscNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: psc_neg\n properties:\n name: psc-neg\n region: asia-northeast3\n networkEndpointType: PRIVATE_SERVICE_CONNECT\n pscTargetService: asia-northeast3-cloudkms.googleapis.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Psc Service Attachment\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {name: \"psc-network\"});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"psc-subnetwork\",\n ipCidrRange: \"10.0.0.0/16\",\n region: \"europe-west4\",\n network: _default.id,\n});\nconst pscSubnetwork = new gcp.compute.Subnetwork(\"psc_subnetwork\", {\n name: \"psc-subnetwork-nat\",\n ipCidrRange: \"10.1.0.0/16\",\n region: \"europe-west4\",\n purpose: \"PRIVATE_SERVICE_CONNECT\",\n network: _default.id,\n});\nconst defaultHealthCheck = new gcp.compute.HealthCheck(\"default\", {\n name: \"psc-healthcheck\",\n checkIntervalSec: 1,\n timeoutSec: 1,\n tcpHealthCheck: {\n port: 80,\n },\n});\nconst defaultRegionBackendService = new gcp.compute.RegionBackendService(\"default\", {\n name: \"psc-backend\",\n region: \"europe-west4\",\n healthChecks: defaultHealthCheck.id,\n});\nconst defaultForwardingRule = new gcp.compute.ForwardingRule(\"default\", {\n name: \"psc-forwarding-rule\",\n region: \"europe-west4\",\n loadBalancingScheme: \"INTERNAL\",\n backendService: defaultRegionBackendService.id,\n ports: [\n \"80\",\n \"88\",\n \"443\",\n ],\n network: _default.name,\n subnetwork: defaultSubnetwork.name,\n});\nconst defaultServiceAttachment = new gcp.compute.ServiceAttachment(\"default\", {\n name: \"psc-service-attachment\",\n region: \"europe-west4\",\n description: \"A service attachment configured with Terraform\",\n enableProxyProtocol: false,\n connectionPreference: \"ACCEPT_AUTOMATIC\",\n natSubnets: [pscSubnetwork.selfLink],\n targetService: defaultForwardingRule.selfLink,\n});\nconst pscNegServiceAttachment = new gcp.compute.RegionNetworkEndpointGroup(\"psc_neg_service_attachment\", {\n name: \"psc-neg\",\n region: \"europe-west4\",\n networkEndpointType: \"PRIVATE_SERVICE_CONNECT\",\n pscTargetService: defaultServiceAttachment.selfLink,\n pscData: {\n producerPort: \"88\",\n },\n network: _default.selfLink,\n subnetwork: defaultSubnetwork.selfLink,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\", name=\"psc-network\")\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"psc-subnetwork\",\n ip_cidr_range=\"10.0.0.0/16\",\n region=\"europe-west4\",\n network=default.id)\npsc_subnetwork = gcp.compute.Subnetwork(\"psc_subnetwork\",\n name=\"psc-subnetwork-nat\",\n ip_cidr_range=\"10.1.0.0/16\",\n region=\"europe-west4\",\n purpose=\"PRIVATE_SERVICE_CONNECT\",\n network=default.id)\ndefault_health_check = gcp.compute.HealthCheck(\"default\",\n name=\"psc-healthcheck\",\n check_interval_sec=1,\n timeout_sec=1,\n tcp_health_check={\n \"port\": 80,\n })\ndefault_region_backend_service = gcp.compute.RegionBackendService(\"default\",\n name=\"psc-backend\",\n region=\"europe-west4\",\n health_checks=default_health_check.id)\ndefault_forwarding_rule = gcp.compute.ForwardingRule(\"default\",\n name=\"psc-forwarding-rule\",\n region=\"europe-west4\",\n load_balancing_scheme=\"INTERNAL\",\n backend_service=default_region_backend_service.id,\n ports=[\n \"80\",\n \"88\",\n \"443\",\n ],\n network=default.name,\n subnetwork=default_subnetwork.name)\ndefault_service_attachment = gcp.compute.ServiceAttachment(\"default\",\n name=\"psc-service-attachment\",\n region=\"europe-west4\",\n description=\"A service attachment configured with Terraform\",\n enable_proxy_protocol=False,\n connection_preference=\"ACCEPT_AUTOMATIC\",\n nat_subnets=[psc_subnetwork.self_link],\n target_service=default_forwarding_rule.self_link)\npsc_neg_service_attachment = gcp.compute.RegionNetworkEndpointGroup(\"psc_neg_service_attachment\",\n name=\"psc-neg\",\n region=\"europe-west4\",\n network_endpoint_type=\"PRIVATE_SERVICE_CONNECT\",\n psc_target_service=default_service_attachment.self_link,\n psc_data={\n \"producer_port\": \"88\",\n },\n network=default.self_link,\n subnetwork=default_subnetwork.self_link)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"psc-network\",\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"psc-subnetwork\",\n IpCidrRange = \"10.0.0.0/16\",\n Region = \"europe-west4\",\n Network = @default.Id,\n });\n\n var pscSubnetwork = new Gcp.Compute.Subnetwork(\"psc_subnetwork\", new()\n {\n Name = \"psc-subnetwork-nat\",\n IpCidrRange = \"10.1.0.0/16\",\n Region = \"europe-west4\",\n Purpose = \"PRIVATE_SERVICE_CONNECT\",\n Network = @default.Id,\n });\n\n var defaultHealthCheck = new Gcp.Compute.HealthCheck(\"default\", new()\n {\n Name = \"psc-healthcheck\",\n CheckIntervalSec = 1,\n TimeoutSec = 1,\n TcpHealthCheck = new Gcp.Compute.Inputs.HealthCheckTcpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var defaultRegionBackendService = new Gcp.Compute.RegionBackendService(\"default\", new()\n {\n Name = \"psc-backend\",\n Region = \"europe-west4\",\n HealthChecks = defaultHealthCheck.Id,\n });\n\n var defaultForwardingRule = new Gcp.Compute.ForwardingRule(\"default\", new()\n {\n Name = \"psc-forwarding-rule\",\n Region = \"europe-west4\",\n LoadBalancingScheme = \"INTERNAL\",\n BackendService = defaultRegionBackendService.Id,\n Ports = new[]\n {\n \"80\",\n \"88\",\n \"443\",\n },\n Network = @default.Name,\n Subnetwork = defaultSubnetwork.Name,\n });\n\n var defaultServiceAttachment = new Gcp.Compute.ServiceAttachment(\"default\", new()\n {\n Name = \"psc-service-attachment\",\n Region = \"europe-west4\",\n Description = \"A service attachment configured with Terraform\",\n EnableProxyProtocol = false,\n ConnectionPreference = \"ACCEPT_AUTOMATIC\",\n NatSubnets = new[]\n {\n pscSubnetwork.SelfLink,\n },\n TargetService = defaultForwardingRule.SelfLink,\n });\n\n var pscNegServiceAttachment = new Gcp.Compute.RegionNetworkEndpointGroup(\"psc_neg_service_attachment\", new()\n {\n Name = \"psc-neg\",\n Region = \"europe-west4\",\n NetworkEndpointType = \"PRIVATE_SERVICE_CONNECT\",\n PscTargetService = defaultServiceAttachment.SelfLink,\n PscData = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupPscDataArgs\n {\n ProducerPort = \"88\",\n },\n Network = @default.SelfLink,\n Subnetwork = defaultSubnetwork.SelfLink,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"psc-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"psc-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/16\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpscSubnetwork, err := compute.NewSubnetwork(ctx, \"psc_subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"psc-subnetwork-nat\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.1.0.0/16\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tPurpose: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultHealthCheck, err := compute.NewHealthCheck(ctx, \"default\", \u0026compute.HealthCheckArgs{\n\t\t\tName: pulumi.String(\"psc-healthcheck\"),\n\t\t\tCheckIntervalSec: pulumi.Int(1),\n\t\t\tTimeoutSec: pulumi.Int(1),\n\t\t\tTcpHealthCheck: \u0026compute.HealthCheckTcpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultRegionBackendService, err := compute.NewRegionBackendService(ctx, \"default\", \u0026compute.RegionBackendServiceArgs{\n\t\t\tName: pulumi.String(\"psc-backend\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tHealthChecks: defaultHealthCheck.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultForwardingRule, err := compute.NewForwardingRule(ctx, \"default\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"psc-forwarding-rule\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL\"),\n\t\t\tBackendService: defaultRegionBackendService.ID(),\n\t\t\tPorts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"80\"),\n\t\t\t\tpulumi.String(\"88\"),\n\t\t\t\tpulumi.String(\"443\"),\n\t\t\t},\n\t\t\tNetwork: _default.Name,\n\t\t\tSubnetwork: defaultSubnetwork.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultServiceAttachment, err := compute.NewServiceAttachment(ctx, \"default\", \u0026compute.ServiceAttachmentArgs{\n\t\t\tName: pulumi.String(\"psc-service-attachment\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tDescription: pulumi.String(\"A service attachment configured with Terraform\"),\n\t\t\tEnableProxyProtocol: pulumi.Bool(false),\n\t\t\tConnectionPreference: pulumi.String(\"ACCEPT_AUTOMATIC\"),\n\t\t\tNatSubnets: pulumi.StringArray{\n\t\t\t\tpscSubnetwork.SelfLink,\n\t\t\t},\n\t\t\tTargetService: defaultForwardingRule.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"psc_neg_service_attachment\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"psc-neg\"),\n\t\t\tRegion: pulumi.String(\"europe-west4\"),\n\t\t\tNetworkEndpointType: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tPscTargetService: defaultServiceAttachment.SelfLink,\n\t\t\tPscData: \u0026compute.RegionNetworkEndpointGroupPscDataArgs{\n\t\t\t\tProducerPort: pulumi.String(\"88\"),\n\t\t\t},\n\t\t\tNetwork: _default.SelfLink,\n\t\t\tSubnetwork: defaultSubnetwork.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.RegionBackendService;\nimport com.pulumi.gcp.compute.RegionBackendServiceArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.ServiceAttachment;\nimport com.pulumi.gcp.compute.ServiceAttachmentArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupPscDataArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"psc-network\")\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"psc-subnetwork\")\n .ipCidrRange(\"10.0.0.0/16\")\n .region(\"europe-west4\")\n .network(default_.id())\n .build());\n\n var pscSubnetwork = new Subnetwork(\"pscSubnetwork\", SubnetworkArgs.builder()\n .name(\"psc-subnetwork-nat\")\n .ipCidrRange(\"10.1.0.0/16\")\n .region(\"europe-west4\")\n .purpose(\"PRIVATE_SERVICE_CONNECT\")\n .network(default_.id())\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder()\n .name(\"psc-healthcheck\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder()\n .name(\"psc-backend\")\n .region(\"europe-west4\")\n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var defaultForwardingRule = new ForwardingRule(\"defaultForwardingRule\", ForwardingRuleArgs.builder()\n .name(\"psc-forwarding-rule\")\n .region(\"europe-west4\")\n .loadBalancingScheme(\"INTERNAL\")\n .backendService(defaultRegionBackendService.id())\n .ports( \n \"80\",\n \"88\",\n \"443\")\n .network(default_.name())\n .subnetwork(defaultSubnetwork.name())\n .build());\n\n var defaultServiceAttachment = new ServiceAttachment(\"defaultServiceAttachment\", ServiceAttachmentArgs.builder()\n .name(\"psc-service-attachment\")\n .region(\"europe-west4\")\n .description(\"A service attachment configured with Terraform\")\n .enableProxyProtocol(false)\n .connectionPreference(\"ACCEPT_AUTOMATIC\")\n .natSubnets(pscSubnetwork.selfLink())\n .targetService(defaultForwardingRule.selfLink())\n .build());\n\n var pscNegServiceAttachment = new RegionNetworkEndpointGroup(\"pscNegServiceAttachment\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"psc-neg\")\n .region(\"europe-west4\")\n .networkEndpointType(\"PRIVATE_SERVICE_CONNECT\")\n .pscTargetService(defaultServiceAttachment.selfLink())\n .pscData(RegionNetworkEndpointGroupPscDataArgs.builder()\n .producerPort(\"88\")\n .build())\n .network(default_.selfLink())\n .subnetwork(defaultSubnetwork.selfLink())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: psc-network\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: psc-subnetwork\n ipCidrRange: 10.0.0.0/16\n region: europe-west4\n network: ${default.id}\n pscSubnetwork:\n type: gcp:compute:Subnetwork\n name: psc_subnetwork\n properties:\n name: psc-subnetwork-nat\n ipCidrRange: 10.1.0.0/16\n region: europe-west4\n purpose: PRIVATE_SERVICE_CONNECT\n network: ${default.id}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n name: default\n properties:\n name: psc-healthcheck\n checkIntervalSec: 1\n timeoutSec: 1\n tcpHealthCheck:\n port: '80'\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n name: default\n properties:\n name: psc-backend\n region: europe-west4\n healthChecks: ${defaultHealthCheck.id}\n defaultForwardingRule:\n type: gcp:compute:ForwardingRule\n name: default\n properties:\n name: psc-forwarding-rule\n region: europe-west4\n loadBalancingScheme: INTERNAL\n backendService: ${defaultRegionBackendService.id}\n ports:\n - '80'\n - '88'\n - '443'\n network: ${default.name}\n subnetwork: ${defaultSubnetwork.name}\n defaultServiceAttachment:\n type: gcp:compute:ServiceAttachment\n name: default\n properties:\n name: psc-service-attachment\n region: europe-west4\n description: A service attachment configured with Terraform\n enableProxyProtocol: false\n connectionPreference: ACCEPT_AUTOMATIC\n natSubnets:\n - ${pscSubnetwork.selfLink}\n targetService: ${defaultForwardingRule.selfLink}\n pscNegServiceAttachment:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: psc_neg_service_attachment\n properties:\n name: psc-neg\n region: europe-west4\n networkEndpointType: PRIVATE_SERVICE_CONNECT\n pscTargetService: ${defaultServiceAttachment.selfLink}\n pscData:\n producerPort: '88'\n network: ${default.selfLink}\n subnetwork: ${defaultSubnetwork.selfLink}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Internet Ip Port\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {name: \"network\"});\nconst regionNetworkEndpointGroupInternetIpPort = new gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_ip_port\", {\n name: \"ip-port-neg\",\n region: \"us-central1\",\n network: _default.id,\n networkEndpointType: \"INTERNET_IP_PORT\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\", name=\"network\")\nregion_network_endpoint_group_internet_ip_port = gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_ip_port\",\n name=\"ip-port-neg\",\n region=\"us-central1\",\n network=default.id,\n network_endpoint_type=\"INTERNET_IP_PORT\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"network\",\n });\n\n var regionNetworkEndpointGroupInternetIpPort = new Gcp.Compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_ip_port\", new()\n {\n Name = \"ip-port-neg\",\n Region = \"us-central1\",\n Network = @default.Id,\n NetworkEndpointType = \"INTERNET_IP_PORT\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"region_network_endpoint_group_internet_ip_port\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"ip-port-neg\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tNetworkEndpointType: pulumi.String(\"INTERNET_IP_PORT\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var regionNetworkEndpointGroupInternetIpPort = new RegionNetworkEndpointGroup(\"regionNetworkEndpointGroupInternetIpPort\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"ip-port-neg\")\n .region(\"us-central1\")\n .network(default_.id())\n .networkEndpointType(\"INTERNET_IP_PORT\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionNetworkEndpointGroupInternetIpPort:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: region_network_endpoint_group_internet_ip_port\n properties:\n name: ip-port-neg\n region: us-central1\n network: ${default.id}\n networkEndpointType: INTERNET_IP_PORT\n default:\n type: gcp:compute:Network\n properties:\n name: network\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Internet Fqdn Port\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {name: \"network\"});\nconst regionNetworkEndpointGroupInternetFqdnPort = new gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_fqdn_port\", {\n name: \"ip-port-neg\",\n region: \"us-central1\",\n network: _default.id,\n networkEndpointType: \"INTERNET_FQDN_PORT\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\", name=\"network\")\nregion_network_endpoint_group_internet_fqdn_port = gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_fqdn_port\",\n name=\"ip-port-neg\",\n region=\"us-central1\",\n network=default.id,\n network_endpoint_type=\"INTERNET_FQDN_PORT\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"network\",\n });\n\n var regionNetworkEndpointGroupInternetFqdnPort = new Gcp.Compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_internet_fqdn_port\", new()\n {\n Name = \"ip-port-neg\",\n Region = \"us-central1\",\n Network = @default.Id,\n NetworkEndpointType = \"INTERNET_FQDN_PORT\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"region_network_endpoint_group_internet_fqdn_port\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"ip-port-neg\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tNetworkEndpointType: pulumi.String(\"INTERNET_FQDN_PORT\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var regionNetworkEndpointGroupInternetFqdnPort = new RegionNetworkEndpointGroup(\"regionNetworkEndpointGroupInternetFqdnPort\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"ip-port-neg\")\n .region(\"us-central1\")\n .network(default_.id())\n .networkEndpointType(\"INTERNET_FQDN_PORT\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionNetworkEndpointGroupInternetFqdnPort:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: region_network_endpoint_group_internet_fqdn_port\n properties:\n name: ip-port-neg\n region: us-central1\n network: ${default.id}\n networkEndpointType: INTERNET_FQDN_PORT\n default:\n type: gcp:compute:Network\n properties:\n name: network\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Network Endpoint Group Portmap\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {name: \"network\"});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"subnetwork\",\n ipCidrRange: \"10.0.0.0/16\",\n region: \"us-central1\",\n network: _default.id,\n});\nconst regionNetworkEndpointGroupPortmap = new gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_portmap\", {\n name: \"portmap-neg\",\n region: \"us-central1\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n networkEndpointType: \"GCE_VM_IP_PORTMAP\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\", name=\"network\")\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"subnetwork\",\n ip_cidr_range=\"10.0.0.0/16\",\n region=\"us-central1\",\n network=default.id)\nregion_network_endpoint_group_portmap = gcp.compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_portmap\",\n name=\"portmap-neg\",\n region=\"us-central1\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n network_endpoint_type=\"GCE_VM_IP_PORTMAP\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"network\",\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"subnetwork\",\n IpCidrRange = \"10.0.0.0/16\",\n Region = \"us-central1\",\n Network = @default.Id,\n });\n\n var regionNetworkEndpointGroupPortmap = new Gcp.Compute.RegionNetworkEndpointGroup(\"region_network_endpoint_group_portmap\", new()\n {\n Name = \"portmap-neg\",\n Region = \"us-central1\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n NetworkEndpointType = \"GCE_VM_IP_PORTMAP\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/16\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"region_network_endpoint_group_portmap\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tName: pulumi.String(\"portmap-neg\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tNetworkEndpointType: pulumi.String(\"GCE_VM_IP_PORTMAP\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"subnetwork\")\n .ipCidrRange(\"10.0.0.0/16\")\n .region(\"us-central1\")\n .network(default_.id())\n .build());\n\n var regionNetworkEndpointGroupPortmap = new RegionNetworkEndpointGroup(\"regionNetworkEndpointGroupPortmap\", RegionNetworkEndpointGroupArgs.builder()\n .name(\"portmap-neg\")\n .region(\"us-central1\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .networkEndpointType(\"GCE_VM_IP_PORTMAP\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionNetworkEndpointGroupPortmap:\n type: gcp:compute:RegionNetworkEndpointGroup\n name: region_network_endpoint_group_portmap\n properties:\n name: portmap-neg\n region: us-central1\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n networkEndpointType: GCE_VM_IP_PORTMAP\n default:\n type: gcp:compute:Network\n properties:\n name: network\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: subnetwork\n ipCidrRange: 10.0.0.0/16\n region: us-central1\n network: ${default.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionNetworkEndpointGroup can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/networkEndpointGroups/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, RegionNetworkEndpointGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default projects/{{project}}/regions/{{region}}/networkEndpointGroups/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{name}}\n```\n\n",
"properties": {
"appEngine": {
"$ref": "#/types/gcp:compute/RegionNetworkEndpointGroupAppEngine:RegionNetworkEndpointGroupAppEngine",
@@ -176807,6 +177869,10 @@
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
},
+ "pscData": {
+ "$ref": "#/types/gcp:compute/RegionNetworkEndpointGroupPscData:RegionNetworkEndpointGroupPscData",
+ "description": "This field is only used for PSC NEGs.\nStructure is documented below.\n"
+ },
"pscTargetService": {
"type": "string",
"description": "This field is only used for PSC and INTERNET NEGs.\nThe target service url used to set up private service connection to\na Google API or a PSC Producer Service Attachment.\n"
@@ -176875,6 +177941,11 @@
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
},
+ "pscData": {
+ "$ref": "#/types/gcp:compute/RegionNetworkEndpointGroupPscData:RegionNetworkEndpointGroupPscData",
+ "description": "This field is only used for PSC NEGs.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
"pscTargetService": {
"type": "string",
"description": "This field is only used for PSC and INTERNET NEGs.\nThe target service url used to set up private service connection to\na Google API or a PSC Producer Service Attachment.\n",
@@ -176942,6 +178013,11 @@
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
},
+ "pscData": {
+ "$ref": "#/types/gcp:compute/RegionNetworkEndpointGroupPscData:RegionNetworkEndpointGroupPscData",
+ "description": "This field is only used for PSC NEGs.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
"pscTargetService": {
"type": "string",
"description": "This field is only used for PSC and INTERNET NEGs.\nThe target service url used to set up private service connection to\na Google API or a PSC Producer Service Attachment.\n",
@@ -183119,6 +184195,10 @@
"stackType": {
"type": "string",
"description": "The stack type for this subnet to identify whether the IPv6 feature is enabled or not.\nIf not specified IPV4_ONLY will be used.\nPossible values are: `IPV4_ONLY`, `IPV4_IPV6`.\n"
+ },
+ "subnetworkId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
}
},
"required": [
@@ -183139,7 +184219,8 @@
"region",
"secondaryIpRanges",
"selfLink",
- "stackType"
+ "stackType",
+ "subnetworkId"
],
"inputProperties": {
"allowSubnetCidrRoutesOverlap": {
@@ -183339,6 +184420,10 @@
"stackType": {
"type": "string",
"description": "The stack type for this subnet to identify whether the IPv6 feature is enabled or not.\nIf not specified IPV4_ONLY will be used.\nPossible values are: `IPV4_ONLY`, `IPV4_IPV6`.\n"
+ },
+ "subnetworkId": {
+ "type": "integer",
+ "description": "The unique identifier number for the resource. This identifier is defined by the server.\n"
}
},
"type": "object"
@@ -184777,7 +185862,7 @@
},
"defaultCustomErrorResponsePolicy": {
"$ref": "#/types/gcp:compute/URLMapDefaultCustomErrorResponsePolicy:URLMapDefaultCustomErrorResponsePolicy",
- "description": "defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.\nThis policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors\nA RouteRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in RouteRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\nWhen used in conjunction with pathMatcher.defaultRouteAction.retryPolicy, retries take precedence. Only once all retries are exhausted, the defaultCustomErrorResponsePolicy is applied. While attempting a retry, if load balancer is successful in reaching the service, the defaultCustomErrorResponsePolicy is ignored and the response from the service is returned to the client.\ndefaultCustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
+ "description": "defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.\nThis policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors\nA RouteRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in RouteRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\nWhen used in conjunction with pathMatcher.defaultRouteAction.retryPolicy, retries take precedence. Only once all retries are exhausted, the defaultCustomErrorResponsePolicy is applied. While attempting a retry, if load balancer is successful in reaching the service, the defaultCustomErrorResponsePolicy is ignored and the response from the service is returned to the client.\ndefaultCustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
},
"defaultRouteAction": {
"$ref": "#/types/gcp:compute/URLMapDefaultRouteAction:URLMapDefaultRouteAction",
@@ -184852,7 +185937,7 @@
"inputProperties": {
"defaultCustomErrorResponsePolicy": {
"$ref": "#/types/gcp:compute/URLMapDefaultCustomErrorResponsePolicy:URLMapDefaultCustomErrorResponsePolicy",
- "description": "defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.\nThis policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors\nA RouteRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in RouteRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\nWhen used in conjunction with pathMatcher.defaultRouteAction.retryPolicy, retries take precedence. Only once all retries are exhausted, the defaultCustomErrorResponsePolicy is applied. While attempting a retry, if load balancer is successful in reaching the service, the defaultCustomErrorResponsePolicy is ignored and the response from the service is returned to the client.\ndefaultCustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
+ "description": "defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.\nThis policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors\nA RouteRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in RouteRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\nWhen used in conjunction with pathMatcher.defaultRouteAction.retryPolicy, retries take precedence. Only once all retries are exhausted, the defaultCustomErrorResponsePolicy is applied. While attempting a retry, if load balancer is successful in reaching the service, the defaultCustomErrorResponsePolicy is ignored and the response from the service is returned to the client.\ndefaultCustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
},
"defaultRouteAction": {
"$ref": "#/types/gcp:compute/URLMapDefaultRouteAction:URLMapDefaultRouteAction",
@@ -184915,7 +186000,7 @@
},
"defaultCustomErrorResponsePolicy": {
"$ref": "#/types/gcp:compute/URLMapDefaultCustomErrorResponsePolicy:URLMapDefaultCustomErrorResponsePolicy",
- "description": "defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.\nThis policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors\nA RouteRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in RouteRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\nWhen used in conjunction with pathMatcher.defaultRouteAction.retryPolicy, retries take precedence. Only once all retries are exhausted, the defaultCustomErrorResponsePolicy is applied. While attempting a retry, if load balancer is successful in reaching the service, the defaultCustomErrorResponsePolicy is ignored and the response from the service is returned to the client.\ndefaultCustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
+ "description": "defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.\nThis policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.\nFor example, consider a UrlMap with the following configuration:\nUrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors\nA RouteRule for /coming_soon/ is configured for the error code 404.\nIf the request is for www.myotherdomain.com and a 404 is encountered, the policy under UrlMap.defaultCustomErrorResponsePolicy takes effect. If a 404 response is encountered for the request www.example.com/current_events/, the pathMatcher's policy takes effect. If however, the request for www.example.com/coming_soon/ encounters a 404, the policy in RouteRule.customErrorResponsePolicy takes effect. If any of the requests in this example encounter a 500 error code, the policy at UrlMap.defaultCustomErrorResponsePolicy takes effect.\nWhen used in conjunction with pathMatcher.defaultRouteAction.retryPolicy, retries take precedence. Only once all retries are exhausted, the defaultCustomErrorResponsePolicy is applied. While attempting a retry, if load balancer is successful in reaching the service, the defaultCustomErrorResponsePolicy is ignored and the response from the service is returned to the client.\ndefaultCustomErrorResponsePolicy is supported only for global external Application Load Balancers.\nStructure is documented below.\n"
},
"defaultRouteAction": {
"$ref": "#/types/gcp:compute/URLMapDefaultRouteAction:URLMapDefaultRouteAction",
@@ -187234,6 +188319,10 @@
"type": "string",
"description": "The IP address of this cluster's Kubernetes master.\n"
},
+ "enterpriseConfig": {
+ "$ref": "#/types/gcp:container/ClusterEnterpriseConfig:ClusterEnterpriseConfig",
+ "description": "Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below.\n\n\n\u003ca name=\"nested_default_snat_status\"\u003e\u003c/a\u003eThe `default_snat_status` block supports\n"
+ },
"fleet": {
"$ref": "#/types/gcp:container/ClusterFleet:ClusterFleet",
"description": "Fleet configuration for the cluster. Structure is documented below.\n"
@@ -187444,7 +188533,7 @@
},
"workloadAltsConfig": {
"$ref": "#/types/gcp:container/ClusterWorkloadAltsConfig:ClusterWorkloadAltsConfig",
- "description": "Configuration for [direct-path (via ALTS) with workload identity.](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#workloadaltsconfig). Structure is documented below.\n\n\u003ca name=\"nested_default_snat_status\"\u003e\u003c/a\u003eThe `default_snat_status` block supports\n"
+ "description": "Configuration for [direct-path (via ALTS) with workload identity.](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#workloadaltsconfig). Structure is documented below.\n"
},
"workloadIdentityConfig": {
"$ref": "#/types/gcp:container/ClusterWorkloadIdentityConfig:ClusterWorkloadIdentityConfig",
@@ -187468,6 +188557,7 @@
"enableIntranodeVisibility",
"enableTpu",
"endpoint",
+ "enterpriseConfig",
"gatewayApiConfig",
"identityServiceConfig",
"ipAllocationPolicy",
@@ -187629,6 +188719,10 @@
"description": "Whether to enable Cloud TPU resources in this cluster.\nSee the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup).\n",
"willReplaceOnChanges": true
},
+ "enterpriseConfig": {
+ "$ref": "#/types/gcp:container/ClusterEnterpriseConfig:ClusterEnterpriseConfig",
+ "description": "Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below.\n\n\n\u003ca name=\"nested_default_snat_status\"\u003e\u003c/a\u003eThe `default_snat_status` block supports\n"
+ },
"fleet": {
"$ref": "#/types/gcp:container/ClusterFleet:ClusterFleet",
"description": "Fleet configuration for the cluster. Structure is documented below.\n"
@@ -187819,7 +188913,7 @@
},
"workloadAltsConfig": {
"$ref": "#/types/gcp:container/ClusterWorkloadAltsConfig:ClusterWorkloadAltsConfig",
- "description": "Configuration for [direct-path (via ALTS) with workload identity.](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#workloadaltsconfig). Structure is documented below.\n\n\u003ca name=\"nested_default_snat_status\"\u003e\u003c/a\u003eThe `default_snat_status` block supports\n"
+ "description": "Configuration for [direct-path (via ALTS) with workload identity.](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#workloadaltsconfig). Structure is documented below.\n"
},
"workloadIdentityConfig": {
"$ref": "#/types/gcp:container/ClusterWorkloadIdentityConfig:ClusterWorkloadIdentityConfig",
@@ -187961,6 +189055,10 @@
"type": "string",
"description": "The IP address of this cluster's Kubernetes master.\n"
},
+ "enterpriseConfig": {
+ "$ref": "#/types/gcp:container/ClusterEnterpriseConfig:ClusterEnterpriseConfig",
+ "description": "Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below.\n\n\n\u003ca name=\"nested_default_snat_status\"\u003e\u003c/a\u003eThe `default_snat_status` block supports\n"
+ },
"fleet": {
"$ref": "#/types/gcp:container/ClusterFleet:ClusterFleet",
"description": "Fleet configuration for the cluster. Structure is documented below.\n"
@@ -188182,7 +189280,7 @@
},
"workloadAltsConfig": {
"$ref": "#/types/gcp:container/ClusterWorkloadAltsConfig:ClusterWorkloadAltsConfig",
- "description": "Configuration for [direct-path (via ALTS) with workload identity.](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#workloadaltsconfig). Structure is documented below.\n\n\u003ca name=\"nested_default_snat_status\"\u003e\u003c/a\u003eThe `default_snat_status` block supports\n"
+ "description": "Configuration for [direct-path (via ALTS) with workload identity.](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#workloadaltsconfig). Structure is documented below.\n"
},
"workloadIdentityConfig": {
"$ref": "#/types/gcp:container/ClusterWorkloadIdentityConfig:ClusterWorkloadIdentityConfig",
@@ -199565,7 +200663,7 @@
}
},
"gcp:dataproc/batch:Batch": {
- "description": "Dataproc Serverless Batches lets you run Spark workloads without requiring you to\nprovision and manage your own Dataproc cluster.\n\n\nTo get more information about Batch, see:\n\n* [API documentation](https://cloud.google.com/dataproc-serverless/docs/reference/rest/v1/projects.locations.batches)\n* How-to Guides\n * [Dataproc Serverless Batches Intro](https://cloud.google.com/dataproc-serverless/docs/overview)\n\n## Example Usage\n\n### Dataproc Batch Spark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSpark = new gcp.dataproc.Batch(\"example_batch_spark\", {\n batchId: \"tf-test-batch_75125\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_spark = gcp.dataproc.Batch(\"example_batch_spark\",\n batch_id=\"tf-test-batch_75125\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSpark = new Gcp.Dataproc.Batch(\"example_batch_spark\", new()\n {\n BatchId = \"tf-test-batch_75125\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_spark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_75125\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSpark = new Batch(\"exampleBatchSpark\", BatchArgs.builder()\n .batchId(\"tf-test-batch_75125\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSpark:\n type: gcp:dataproc:Batch\n name: example_batch_spark\n properties:\n batchId: tf-test-batch_75125\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n networkTags:\n - tag1\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Spark Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst gcsAccount = gcp.storage.getProjectServiceAccount({});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n uniformBucketLevelAccess: true,\n name: \"dataproc-bucket\",\n location: \"US\",\n forceDestroy: true,\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"example-keyring\",\n location: \"us-central1\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"example-key\",\n keyRing: keyRing.id,\n purpose: \"ENCRYPT_DECRYPT\",\n});\nconst cryptoKeyMember1 = new gcp.kms.CryptoKeyIAMMember(\"crypto_key_member_1\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@dataproc-accounts.iam.gserviceaccount.com`),\n});\nconst ms = new gcp.dataproc.MetastoreService(\"ms\", {\n serviceId: \"dataproc-batch\",\n location: \"us-central1\",\n port: 9080,\n tier: \"DEVELOPER\",\n maintenanceWindow: {\n hourOfDay: 2,\n dayOfWeek: \"SUNDAY\",\n },\n hiveMetastoreConfig: {\n version: \"3.1.2\",\n },\n});\nconst basic = new gcp.dataproc.Cluster(\"basic\", {\n name: \"dataproc-batch\",\n region: \"us-central1\",\n clusterConfig: {\n softwareConfig: {\n overrideProperties: {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n \"spark:spark.history.fs.logDirectory\": pulumi.interpolate`gs://${bucket.name}/*/spark-job-history`,\n },\n },\n endpointConfig: {\n enableHttpPortAccess: true,\n },\n masterConfig: {\n numInstances: 1,\n machineType: \"e2-standard-2\",\n diskConfig: {\n bootDiskSizeGb: 35,\n },\n },\n metastoreConfig: {\n dataprocMetastoreService: ms.name,\n },\n },\n});\nconst exampleBatchSpark = new gcp.dataproc.Batch(\"example_batch_spark\", {\n batchId: \"dataproc-batch\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n version: \"2.2\",\n },\n environmentConfig: {\n executionConfig: {\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n kmsKey: cryptoKey.id,\n networkUri: \"default\",\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n stagingBucket: bucket.name,\n },\n peripheralsConfig: {\n metastoreService: ms.name,\n sparkHistoryServerConfig: {\n dataprocCluster: basic.id,\n },\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n}, {\n dependsOn: [cryptoKeyMember1],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ngcs_account = gcp.storage.get_project_service_account()\nbucket = gcp.storage.Bucket(\"bucket\",\n uniform_bucket_level_access=True,\n name=\"dataproc-bucket\",\n location=\"US\",\n force_destroy=True)\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"example-keyring\",\n location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"example-key\",\n key_ring=key_ring.id,\n purpose=\"ENCRYPT_DECRYPT\")\ncrypto_key_member1 = gcp.kms.CryptoKeyIAMMember(\"crypto_key_member_1\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@dataproc-accounts.iam.gserviceaccount.com\")\nms = gcp.dataproc.MetastoreService(\"ms\",\n service_id=\"dataproc-batch\",\n location=\"us-central1\",\n port=9080,\n tier=\"DEVELOPER\",\n maintenance_window={\n \"hour_of_day\": 2,\n \"day_of_week\": \"SUNDAY\",\n },\n hive_metastore_config={\n \"version\": \"3.1.2\",\n })\nbasic = gcp.dataproc.Cluster(\"basic\",\n name=\"dataproc-batch\",\n region=\"us-central1\",\n cluster_config={\n \"software_config\": {\n \"override_properties\": {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n \"spark:spark.history.fs.logDirectory\": bucket.name.apply(lambda name: f\"gs://{name}/*/spark-job-history\"),\n },\n },\n \"endpoint_config\": {\n \"enable_http_port_access\": True,\n },\n \"master_config\": {\n \"num_instances\": 1,\n \"machine_type\": \"e2-standard-2\",\n \"disk_config\": {\n \"boot_disk_size_gb\": 35,\n },\n },\n \"metastore_config\": {\n \"dataproc_metastore_service\": ms.name,\n },\n })\nexample_batch_spark = gcp.dataproc.Batch(\"example_batch_spark\",\n batch_id=\"dataproc-batch\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n \"version\": \"2.2\",\n },\n environment_config={\n \"execution_config\": {\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n \"kms_key\": crypto_key.id,\n \"network_uri\": \"default\",\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"staging_bucket\": bucket.name,\n },\n \"peripherals_config\": {\n \"metastore_service\": ms.name,\n \"spark_history_server_config\": {\n \"dataproc_cluster\": basic.id,\n },\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n opts = pulumi.ResourceOptions(depends_on=[crypto_key_member1]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var gcsAccount = Gcp.Storage.GetProjectServiceAccount.Invoke();\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n UniformBucketLevelAccess = true,\n Name = \"dataproc-bucket\",\n Location = \"US\",\n ForceDestroy = true,\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"example-keyring\",\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"example-key\",\n KeyRing = keyRing.Id,\n Purpose = \"ENCRYPT_DECRYPT\",\n });\n\n var cryptoKeyMember1 = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key_member_1\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@dataproc-accounts.iam.gserviceaccount.com\",\n });\n\n var ms = new Gcp.Dataproc.MetastoreService(\"ms\", new()\n {\n ServiceId = \"dataproc-batch\",\n Location = \"us-central1\",\n Port = 9080,\n Tier = \"DEVELOPER\",\n MaintenanceWindow = new Gcp.Dataproc.Inputs.MetastoreServiceMaintenanceWindowArgs\n {\n HourOfDay = 2,\n DayOfWeek = \"SUNDAY\",\n },\n HiveMetastoreConfig = new Gcp.Dataproc.Inputs.MetastoreServiceHiveMetastoreConfigArgs\n {\n Version = \"3.1.2\",\n },\n });\n\n var basic = new Gcp.Dataproc.Cluster(\"basic\", new()\n {\n Name = \"dataproc-batch\",\n Region = \"us-central1\",\n ClusterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigArgs\n {\n SoftwareConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigSoftwareConfigArgs\n {\n OverrideProperties = \n {\n { \"dataproc:dataproc.allow.zero.workers\", \"true\" },\n { \"spark:spark.history.fs.logDirectory\", bucket.Name.Apply(name =\u003e $\"gs://{name}/*/spark-job-history\") },\n },\n },\n EndpointConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigEndpointConfigArgs\n {\n EnableHttpPortAccess = true,\n },\n MasterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigArgs\n {\n NumInstances = 1,\n MachineType = \"e2-standard-2\",\n DiskConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigDiskConfigArgs\n {\n BootDiskSizeGb = 35,\n },\n },\n MetastoreConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMetastoreConfigArgs\n {\n DataprocMetastoreService = ms.Name,\n },\n },\n });\n\n var exampleBatchSpark = new Gcp.Dataproc.Batch(\"example_batch_spark\", new()\n {\n BatchId = \"dataproc-batch\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n Version = \"2.2\",\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n KmsKey = cryptoKey.Id,\n NetworkUri = \"default\",\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n StagingBucket = bucket.Name,\n },\n PeripheralsConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigPeripheralsConfigArgs\n {\n MetastoreService = ms.Name,\n SparkHistoryServerConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs\n {\n DataprocCluster = basic.Id,\n },\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cryptoKeyMember1,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.GetProjectServiceAccount(ctx, \u0026storage.GetProjectServiceAccountArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tName: pulumi.String(\"dataproc-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"example-keyring\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"example-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t\tPurpose: pulumi.String(\"ENCRYPT_DECRYPT\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyMember1, err := kms.NewCryptoKeyIAMMember(ctx, \"crypto_key_member_1\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@dataproc-accounts.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tms, err := dataproc.NewMetastoreService(ctx, \"ms\", \u0026dataproc.MetastoreServiceArgs{\n\t\t\tServiceId: pulumi.String(\"dataproc-batch\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tPort: pulumi.Int(9080),\n\t\t\tTier: pulumi.String(\"DEVELOPER\"),\n\t\t\tMaintenanceWindow: \u0026dataproc.MetastoreServiceMaintenanceWindowArgs{\n\t\t\t\tHourOfDay: pulumi.Int(2),\n\t\t\t\tDayOfWeek: pulumi.String(\"SUNDAY\"),\n\t\t\t},\n\t\t\tHiveMetastoreConfig: \u0026dataproc.MetastoreServiceHiveMetastoreConfigArgs{\n\t\t\t\tVersion: pulumi.String(\"3.1.2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := dataproc.NewCluster(ctx, \"basic\", \u0026dataproc.ClusterArgs{\n\t\t\tName: pulumi.String(\"dataproc-batch\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tClusterConfig: \u0026dataproc.ClusterClusterConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026dataproc.ClusterClusterConfigSoftwareConfigArgs{\n\t\t\t\t\tOverrideProperties: pulumi.StringMap{\n\t\t\t\t\t\t\"dataproc:dataproc.allow.zero.workers\": pulumi.String(\"true\"),\n\t\t\t\t\t\t\"spark:spark.history.fs.logDirectory\": bucket.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/*/spark-job-history\", name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEndpointConfig: \u0026dataproc.ClusterClusterConfigEndpointConfigArgs{\n\t\t\t\t\tEnableHttpPortAccess: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tMasterConfig: \u0026dataproc.ClusterClusterConfigMasterConfigArgs{\n\t\t\t\t\tNumInstances: pulumi.Int(1),\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-2\"),\n\t\t\t\t\tDiskConfig: \u0026dataproc.ClusterClusterConfigMasterConfigDiskConfigArgs{\n\t\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMetastoreConfig: \u0026dataproc.ClusterClusterConfigMetastoreConfigArgs{\n\t\t\t\t\tDataprocMetastoreService: ms.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataproc.NewBatch(ctx, \"example_batch_spark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"dataproc-batch\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t\tVersion: pulumi.String(\"2.2\"),\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t\tKmsKey: cryptoKey.ID(),\n\t\t\t\t\tNetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\t\tStagingBucket: bucket.Name,\n\t\t\t\t},\n\t\t\t\tPeripheralsConfig: \u0026dataproc.BatchEnvironmentConfigPeripheralsConfigArgs{\n\t\t\t\t\tMetastoreService: ms.Name,\n\t\t\t\t\tSparkHistoryServerConfig: \u0026dataproc.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs{\n\t\t\t\t\t\tDataprocCluster: basic.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyMember1,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetProjectServiceAccountArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.dataproc.MetastoreService;\nimport com.pulumi.gcp.dataproc.MetastoreServiceArgs;\nimport com.pulumi.gcp.dataproc.inputs.MetastoreServiceMaintenanceWindowArgs;\nimport com.pulumi.gcp.dataproc.inputs.MetastoreServiceHiveMetastoreConfigArgs;\nimport com.pulumi.gcp.dataproc.Cluster;\nimport com.pulumi.gcp.dataproc.ClusterArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigEndpointConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigDiskConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMetastoreConfigArgs;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigPeripheralsConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n final var gcsAccount = StorageFunctions.getProjectServiceAccount();\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder()\n .uniformBucketLevelAccess(true)\n .name(\"dataproc-bucket\")\n .location(\"US\")\n .forceDestroy(true)\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder()\n .name(\"example-keyring\")\n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder()\n .name(\"example-key\")\n .keyRing(keyRing.id())\n .purpose(\"ENCRYPT_DECRYPT\")\n .build());\n\n var cryptoKeyMember1 = new CryptoKeyIAMMember(\"cryptoKeyMember1\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@dataproc-accounts.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var ms = new MetastoreService(\"ms\", MetastoreServiceArgs.builder()\n .serviceId(\"dataproc-batch\")\n .location(\"us-central1\")\n .port(9080)\n .tier(\"DEVELOPER\")\n .maintenanceWindow(MetastoreServiceMaintenanceWindowArgs.builder()\n .hourOfDay(2)\n .dayOfWeek(\"SUNDAY\")\n .build())\n .hiveMetastoreConfig(MetastoreServiceHiveMetastoreConfigArgs.builder()\n .version(\"3.1.2\")\n .build())\n .build());\n\n var basic = new Cluster(\"basic\", ClusterArgs.builder()\n .name(\"dataproc-batch\")\n .region(\"us-central1\")\n .clusterConfig(ClusterClusterConfigArgs.builder()\n .softwareConfig(ClusterClusterConfigSoftwareConfigArgs.builder()\n .overrideProperties(Map.ofEntries(\n Map.entry(\"dataproc:dataproc.allow.zero.workers\", \"true\"),\n Map.entry(\"spark:spark.history.fs.logDirectory\", bucket.name().applyValue(name -\u003e String.format(\"gs://%s/*/spark-job-history\", name)))\n ))\n .build())\n .endpointConfig(ClusterClusterConfigEndpointConfigArgs.builder()\n .enableHttpPortAccess(true)\n .build())\n .masterConfig(ClusterClusterConfigMasterConfigArgs.builder()\n .numInstances(1)\n .machineType(\"e2-standard-2\")\n .diskConfig(ClusterClusterConfigMasterConfigDiskConfigArgs.builder()\n .bootDiskSizeGb(35)\n .build())\n .build())\n .metastoreConfig(ClusterClusterConfigMetastoreConfigArgs.builder()\n .dataprocMetastoreService(ms.name())\n .build())\n .build())\n .build());\n\n var exampleBatchSpark = new Batch(\"exampleBatchSpark\", BatchArgs.builder()\n .batchId(\"dataproc-batch\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .version(\"2.2\")\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .kmsKey(cryptoKey.id())\n .networkUri(\"default\")\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .stagingBucket(bucket.name())\n .build())\n .peripheralsConfig(BatchEnvironmentConfigPeripheralsConfigArgs.builder()\n .metastoreService(ms.name())\n .sparkHistoryServerConfig(BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs.builder()\n .dataprocCluster(basic.id())\n .build())\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyMember1)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSpark:\n type: gcp:dataproc:Batch\n name: example_batch_spark\n properties:\n batchId: dataproc-batch\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n version: '2.2'\n environmentConfig:\n executionConfig:\n ttl: 3600s\n networkTags:\n - tag1\n kmsKey: ${cryptoKey.id}\n networkUri: default\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n stagingBucket: ${bucket.name}\n peripheralsConfig:\n metastoreService: ${ms.name}\n sparkHistoryServerConfig:\n dataprocCluster: ${basic.id}\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n options:\n dependsOn:\n - ${cryptoKeyMember1}\n bucket:\n type: gcp:storage:Bucket\n properties:\n uniformBucketLevelAccess: true\n name: dataproc-bucket\n location: US\n forceDestroy: true\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: example-key\n keyRing: ${keyRing.id}\n purpose: ENCRYPT_DECRYPT\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: example-keyring\n location: us-central1\n cryptoKeyMember1:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key_member_1\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@dataproc-accounts.iam.gserviceaccount.com\n basic:\n type: gcp:dataproc:Cluster\n properties:\n name: dataproc-batch\n region: us-central1\n clusterConfig:\n softwareConfig:\n overrideProperties:\n dataproc:dataproc.allow.zero.workers: 'true'\n spark:spark.history.fs.logDirectory: gs://${bucket.name}/*/spark-job-history\n endpointConfig:\n enableHttpPortAccess: true\n masterConfig:\n numInstances: 1\n machineType: e2-standard-2\n diskConfig:\n bootDiskSizeGb: 35\n metastoreConfig:\n dataprocMetastoreService: ${ms.name}\n ms:\n type: gcp:dataproc:MetastoreService\n properties:\n serviceId: dataproc-batch\n location: us-central1\n port: 9080\n tier: DEVELOPER\n maintenanceWindow:\n hourOfDay: 2\n dayOfWeek: SUNDAY\n hiveMetastoreConfig:\n version: 3.1.2\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n gcsAccount:\n fn::invoke:\n function: gcp:storage:getProjectServiceAccount\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Sparksql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSparsql = new gcp.dataproc.Batch(\"example_batch_sparsql\", {\n batchId: \"tf-test-batch_88722\",\n location: \"us-central1\",\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n },\n },\n sparkSqlBatch: {\n queryFileUri: \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n queryVariables: {\n name: \"value\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_sparsql = gcp.dataproc.Batch(\"example_batch_sparsql\",\n batch_id=\"tf-test-batch_88722\",\n location=\"us-central1\",\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n },\n },\n spark_sql_batch={\n \"query_file_uri\": \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n \"query_variables\": {\n \"name\": \"value\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSparsql = new Gcp.Dataproc.Batch(\"example_batch_sparsql\", new()\n {\n BatchId = \"tf-test-batch_88722\",\n Location = \"us-central1\",\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n },\n },\n SparkSqlBatch = new Gcp.Dataproc.Inputs.BatchSparkSqlBatchArgs\n {\n QueryFileUri = \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n QueryVariables = \n {\n { \"name\", \"value\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_sparsql\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_88722\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkSqlBatch: \u0026dataproc.BatchSparkSqlBatchArgs{\n\t\t\t\tQueryFileUri: pulumi.String(\"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\"),\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t\tQueryVariables: pulumi.StringMap{\n\t\t\t\t\t\"name\": pulumi.String(\"value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkSqlBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSparsql = new Batch(\"exampleBatchSparsql\", BatchArgs.builder()\n .batchId(\"tf-test-batch_88722\")\n .location(\"us-central1\")\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .build())\n .build())\n .sparkSqlBatch(BatchSparkSqlBatchArgs.builder()\n .queryFileUri(\"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .queryVariables(Map.of(\"name\", \"value\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSparsql:\n type: gcp:dataproc:Batch\n name: example_batch_sparsql\n properties:\n batchId: tf-test-batch_88722\n location: us-central1\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n sparkSqlBatch:\n queryFileUri: gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n queryVariables:\n name: value\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Pyspark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchPyspark = new gcp.dataproc.Batch(\"example_batch_pyspark\", {\n batchId: \"tf-test-batch_39249\",\n location: \"us-central1\",\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n },\n },\n pysparkBatch: {\n mainPythonFileUri: \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n pythonFileUris: [\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"],\n archiveUris: [\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n ],\n fileUris: [\"https://storage.googleapis.com/terraform-batches/people.txt\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_pyspark = gcp.dataproc.Batch(\"example_batch_pyspark\",\n batch_id=\"tf-test-batch_39249\",\n location=\"us-central1\",\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n },\n },\n pyspark_batch={\n \"main_python_file_uri\": \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n \"python_file_uris\": [\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"],\n \"archive_uris\": [\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n ],\n \"file_uris\": [\"https://storage.googleapis.com/terraform-batches/people.txt\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchPyspark = new Gcp.Dataproc.Batch(\"example_batch_pyspark\", new()\n {\n BatchId = \"tf-test-batch_39249\",\n Location = \"us-central1\",\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n },\n },\n PysparkBatch = new Gcp.Dataproc.Inputs.BatchPysparkBatchArgs\n {\n MainPythonFileUri = \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n PythonFileUris = new[]\n {\n \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n ArchiveUris = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n },\n FileUris = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/people.txt\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_pyspark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_39249\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPysparkBatch: \u0026dataproc.BatchPysparkBatchArgs{\n\t\t\t\tMainPythonFileUri: pulumi.String(\"https://storage.googleapis.com/terraform-batches/test_util.py\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t\tPythonFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\"),\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt.jar\"),\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt\"),\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/people.txt\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchPysparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchPyspark = new Batch(\"exampleBatchPyspark\", BatchArgs.builder()\n .batchId(\"tf-test-batch_39249\")\n .location(\"us-central1\")\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .build())\n .build())\n .pysparkBatch(BatchPysparkBatchArgs.builder()\n .mainPythonFileUri(\"https://storage.googleapis.com/terraform-batches/test_util.py\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .pythonFileUris(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\")\n .archiveUris( \n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\")\n .fileUris(\"https://storage.googleapis.com/terraform-batches/people.txt\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchPyspark:\n type: gcp:dataproc:Batch\n name: example_batch_pyspark\n properties:\n batchId: tf-test-batch_39249\n location: us-central1\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n pysparkBatch:\n mainPythonFileUri: https://storage.googleapis.com/terraform-batches/test_util.py\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n pythonFileUris:\n - gs://dataproc-examples/pyspark/hello-world/hello-world.py\n archiveUris:\n - https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\n - https://storage.googleapis.com/terraform-batches/animals.txt.jar\n - https://storage.googleapis.com/terraform-batches/animals.txt\n fileUris:\n - https://storage.googleapis.com/terraform-batches/people.txt\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Sparkr\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSparkr = new gcp.dataproc.Batch(\"example_batch_sparkr\", {\n batchId: \"tf-test-batch_74391\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n },\n },\n sparkRBatch: {\n mainRFileUri: \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n args: [\"https://storage.googleapis.com/terraform-batches/flights.csv\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_sparkr = gcp.dataproc.Batch(\"example_batch_sparkr\",\n batch_id=\"tf-test-batch_74391\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n },\n },\n spark_r_batch={\n \"main_r_file_uri\": \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n \"args\": [\"https://storage.googleapis.com/terraform-batches/flights.csv\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSparkr = new Gcp.Dataproc.Batch(\"example_batch_sparkr\", new()\n {\n BatchId = \"tf-test-batch_74391\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n },\n },\n SparkRBatch = new Gcp.Dataproc.Inputs.BatchSparkRBatchArgs\n {\n MainRFileUri = \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n Args = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/flights.csv\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_sparkr\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_74391\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkRBatch: \u0026dataproc.BatchSparkRBatchArgs{\n\t\t\t\tMainRFileUri: pulumi.String(\"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/flights.csv\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkRBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSparkr = new Batch(\"exampleBatchSparkr\", BatchArgs.builder()\n .batchId(\"tf-test-batch_74391\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .build())\n .build())\n .sparkRBatch(BatchSparkRBatchArgs.builder()\n .mainRFileUri(\"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\")\n .args(\"https://storage.googleapis.com/terraform-batches/flights.csv\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSparkr:\n type: gcp:dataproc:Batch\n name: example_batch_sparkr\n properties:\n batchId: tf-test-batch_74391\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n networkTags:\n - tag1\n sparkRBatch:\n mainRFileUri: https://storage.googleapis.com/terraform-batches/spark-r-flights.r\n args:\n - https://storage.googleapis.com/terraform-batches/flights.csv\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBatch can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/batches/{{batch_id}}`\n\n* `{{project}}/{{location}}/{{batch_id}}`\n\n* `{{location}}/{{batch_id}}`\n\nWhen using the `pulumi import` command, Batch can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default projects/{{project}}/locations/{{location}}/batches/{{batch_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default {{project}}/{{location}}/{{batch_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default {{location}}/{{batch_id}}\n```\n\n",
+ "description": "Dataproc Serverless Batches lets you run Spark workloads without requiring you to\nprovision and manage your own Dataproc cluster.\n\n\nTo get more information about Batch, see:\n\n* [API documentation](https://cloud.google.com/dataproc-serverless/docs/reference/rest/v1/projects.locations.batches)\n* How-to Guides\n * [Dataproc Serverless Batches Intro](https://cloud.google.com/dataproc-serverless/docs/overview)\n\n## Example Usage\n\n### Dataproc Batch Spark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSpark = new gcp.dataproc.Batch(\"example_batch_spark\", {\n batchId: \"tf-test-batch_75125\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_spark = gcp.dataproc.Batch(\"example_batch_spark\",\n batch_id=\"tf-test-batch_75125\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSpark = new Gcp.Dataproc.Batch(\"example_batch_spark\", new()\n {\n BatchId = \"tf-test-batch_75125\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_spark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_75125\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSpark = new Batch(\"exampleBatchSpark\", BatchArgs.builder()\n .batchId(\"tf-test-batch_75125\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSpark:\n type: gcp:dataproc:Batch\n name: example_batch_spark\n properties:\n batchId: tf-test-batch_75125\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n networkTags:\n - tag1\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Spark Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst gcsAccount = gcp.storage.getProjectServiceAccount({});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n uniformBucketLevelAccess: true,\n name: \"dataproc-bucket\",\n location: \"US\",\n forceDestroy: true,\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"example-keyring\",\n location: \"us-central1\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"example-key\",\n keyRing: keyRing.id,\n purpose: \"ENCRYPT_DECRYPT\",\n});\nconst cryptoKeyMember1 = new gcp.kms.CryptoKeyIAMMember(\"crypto_key_member_1\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@dataproc-accounts.iam.gserviceaccount.com`),\n});\nconst ms = new gcp.dataproc.MetastoreService(\"ms\", {\n serviceId: \"dataproc-batch\",\n location: \"us-central1\",\n port: 9080,\n tier: \"DEVELOPER\",\n maintenanceWindow: {\n hourOfDay: 2,\n dayOfWeek: \"SUNDAY\",\n },\n hiveMetastoreConfig: {\n version: \"3.1.2\",\n },\n});\nconst basic = new gcp.dataproc.Cluster(\"basic\", {\n name: \"dataproc-batch\",\n region: \"us-central1\",\n clusterConfig: {\n softwareConfig: {\n overrideProperties: {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n \"spark:spark.history.fs.logDirectory\": pulumi.interpolate`gs://${bucket.name}/*/spark-job-history`,\n },\n },\n endpointConfig: {\n enableHttpPortAccess: true,\n },\n masterConfig: {\n numInstances: 1,\n machineType: \"e2-standard-2\",\n diskConfig: {\n bootDiskSizeGb: 35,\n },\n },\n metastoreConfig: {\n dataprocMetastoreService: ms.name,\n },\n },\n});\nconst exampleBatchSpark = new gcp.dataproc.Batch(\"example_batch_spark\", {\n batchId: \"dataproc-batch\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n version: \"2.2\",\n },\n environmentConfig: {\n executionConfig: {\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n kmsKey: cryptoKey.id,\n networkUri: \"default\",\n serviceAccount: project.then(project =\u003e `${project.number}-compute@developer.gserviceaccount.com`),\n stagingBucket: bucket.name,\n },\n peripheralsConfig: {\n metastoreService: ms.name,\n sparkHistoryServerConfig: {\n dataprocCluster: basic.id,\n },\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n}, {\n dependsOn: [cryptoKeyMember1],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ngcs_account = gcp.storage.get_project_service_account()\nbucket = gcp.storage.Bucket(\"bucket\",\n uniform_bucket_level_access=True,\n name=\"dataproc-bucket\",\n location=\"US\",\n force_destroy=True)\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"example-keyring\",\n location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"example-key\",\n key_ring=key_ring.id,\n purpose=\"ENCRYPT_DECRYPT\")\ncrypto_key_member1 = gcp.kms.CryptoKeyIAMMember(\"crypto_key_member_1\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@dataproc-accounts.iam.gserviceaccount.com\")\nms = gcp.dataproc.MetastoreService(\"ms\",\n service_id=\"dataproc-batch\",\n location=\"us-central1\",\n port=9080,\n tier=\"DEVELOPER\",\n maintenance_window={\n \"hour_of_day\": 2,\n \"day_of_week\": \"SUNDAY\",\n },\n hive_metastore_config={\n \"version\": \"3.1.2\",\n })\nbasic = gcp.dataproc.Cluster(\"basic\",\n name=\"dataproc-batch\",\n region=\"us-central1\",\n cluster_config={\n \"software_config\": {\n \"override_properties\": {\n \"dataproc:dataproc.allow.zero.workers\": \"true\",\n \"spark:spark.history.fs.logDirectory\": bucket.name.apply(lambda name: f\"gs://{name}/*/spark-job-history\"),\n },\n },\n \"endpoint_config\": {\n \"enable_http_port_access\": True,\n },\n \"master_config\": {\n \"num_instances\": 1,\n \"machine_type\": \"e2-standard-2\",\n \"disk_config\": {\n \"boot_disk_size_gb\": 35,\n },\n },\n \"metastore_config\": {\n \"dataproc_metastore_service\": ms.name,\n },\n })\nexample_batch_spark = gcp.dataproc.Batch(\"example_batch_spark\",\n batch_id=\"dataproc-batch\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n \"version\": \"2.2\",\n },\n environment_config={\n \"execution_config\": {\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n \"kms_key\": crypto_key.id,\n \"network_uri\": \"default\",\n \"service_account\": f\"{project.number}-compute@developer.gserviceaccount.com\",\n \"staging_bucket\": bucket.name,\n },\n \"peripherals_config\": {\n \"metastore_service\": ms.name,\n \"spark_history_server_config\": {\n \"dataproc_cluster\": basic.id,\n },\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n opts = pulumi.ResourceOptions(depends_on=[crypto_key_member1]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var gcsAccount = Gcp.Storage.GetProjectServiceAccount.Invoke();\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n UniformBucketLevelAccess = true,\n Name = \"dataproc-bucket\",\n Location = \"US\",\n ForceDestroy = true,\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"example-keyring\",\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"example-key\",\n KeyRing = keyRing.Id,\n Purpose = \"ENCRYPT_DECRYPT\",\n });\n\n var cryptoKeyMember1 = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key_member_1\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@dataproc-accounts.iam.gserviceaccount.com\",\n });\n\n var ms = new Gcp.Dataproc.MetastoreService(\"ms\", new()\n {\n ServiceId = \"dataproc-batch\",\n Location = \"us-central1\",\n Port = 9080,\n Tier = \"DEVELOPER\",\n MaintenanceWindow = new Gcp.Dataproc.Inputs.MetastoreServiceMaintenanceWindowArgs\n {\n HourOfDay = 2,\n DayOfWeek = \"SUNDAY\",\n },\n HiveMetastoreConfig = new Gcp.Dataproc.Inputs.MetastoreServiceHiveMetastoreConfigArgs\n {\n Version = \"3.1.2\",\n },\n });\n\n var basic = new Gcp.Dataproc.Cluster(\"basic\", new()\n {\n Name = \"dataproc-batch\",\n Region = \"us-central1\",\n ClusterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigArgs\n {\n SoftwareConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigSoftwareConfigArgs\n {\n OverrideProperties = \n {\n { \"dataproc:dataproc.allow.zero.workers\", \"true\" },\n { \"spark:spark.history.fs.logDirectory\", bucket.Name.Apply(name =\u003e $\"gs://{name}/*/spark-job-history\") },\n },\n },\n EndpointConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigEndpointConfigArgs\n {\n EnableHttpPortAccess = true,\n },\n MasterConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigArgs\n {\n NumInstances = 1,\n MachineType = \"e2-standard-2\",\n DiskConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMasterConfigDiskConfigArgs\n {\n BootDiskSizeGb = 35,\n },\n },\n MetastoreConfig = new Gcp.Dataproc.Inputs.ClusterClusterConfigMetastoreConfigArgs\n {\n DataprocMetastoreService = ms.Name,\n },\n },\n });\n\n var exampleBatchSpark = new Gcp.Dataproc.Batch(\"example_batch_spark\", new()\n {\n BatchId = \"dataproc-batch\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n Version = \"2.2\",\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n KmsKey = cryptoKey.Id,\n NetworkUri = \"default\",\n ServiceAccount = $\"{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n StagingBucket = bucket.Name,\n },\n PeripheralsConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigPeripheralsConfigArgs\n {\n MetastoreService = ms.Name,\n SparkHistoryServerConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs\n {\n DataprocCluster = basic.Id,\n },\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cryptoKeyMember1,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.GetProjectServiceAccount(ctx, \u0026storage.GetProjectServiceAccountArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tName: pulumi.String(\"dataproc-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"example-keyring\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"example-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t\tPurpose: pulumi.String(\"ENCRYPT_DECRYPT\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyMember1, err := kms.NewCryptoKeyIAMMember(ctx, \"crypto_key_member_1\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@dataproc-accounts.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tms, err := dataproc.NewMetastoreService(ctx, \"ms\", \u0026dataproc.MetastoreServiceArgs{\n\t\t\tServiceId: pulumi.String(\"dataproc-batch\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tPort: pulumi.Int(9080),\n\t\t\tTier: pulumi.String(\"DEVELOPER\"),\n\t\t\tMaintenanceWindow: \u0026dataproc.MetastoreServiceMaintenanceWindowArgs{\n\t\t\t\tHourOfDay: pulumi.Int(2),\n\t\t\t\tDayOfWeek: pulumi.String(\"SUNDAY\"),\n\t\t\t},\n\t\t\tHiveMetastoreConfig: \u0026dataproc.MetastoreServiceHiveMetastoreConfigArgs{\n\t\t\t\tVersion: pulumi.String(\"3.1.2\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := dataproc.NewCluster(ctx, \"basic\", \u0026dataproc.ClusterArgs{\n\t\t\tName: pulumi.String(\"dataproc-batch\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tClusterConfig: \u0026dataproc.ClusterClusterConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026dataproc.ClusterClusterConfigSoftwareConfigArgs{\n\t\t\t\t\tOverrideProperties: pulumi.StringMap{\n\t\t\t\t\t\t\"dataproc:dataproc.allow.zero.workers\": pulumi.String(\"true\"),\n\t\t\t\t\t\t\"spark:spark.history.fs.logDirectory\": bucket.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/*/spark-job-history\", name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEndpointConfig: \u0026dataproc.ClusterClusterConfigEndpointConfigArgs{\n\t\t\t\t\tEnableHttpPortAccess: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tMasterConfig: \u0026dataproc.ClusterClusterConfigMasterConfigArgs{\n\t\t\t\t\tNumInstances: pulumi.Int(1),\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-2\"),\n\t\t\t\t\tDiskConfig: \u0026dataproc.ClusterClusterConfigMasterConfigDiskConfigArgs{\n\t\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMetastoreConfig: \u0026dataproc.ClusterClusterConfigMetastoreConfigArgs{\n\t\t\t\t\tDataprocMetastoreService: ms.Name,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataproc.NewBatch(ctx, \"example_batch_spark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"dataproc-batch\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t\tVersion: pulumi.String(\"2.2\"),\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t\tKmsKey: cryptoKey.ID(),\n\t\t\t\t\tNetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tServiceAccount: pulumi.Sprintf(\"%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t\t\t\tStagingBucket: bucket.Name,\n\t\t\t\t},\n\t\t\t\tPeripheralsConfig: \u0026dataproc.BatchEnvironmentConfigPeripheralsConfigArgs{\n\t\t\t\t\tMetastoreService: ms.Name,\n\t\t\t\t\tSparkHistoryServerConfig: \u0026dataproc.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs{\n\t\t\t\t\t\tDataprocCluster: basic.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyMember1,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetProjectServiceAccountArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.dataproc.MetastoreService;\nimport com.pulumi.gcp.dataproc.MetastoreServiceArgs;\nimport com.pulumi.gcp.dataproc.inputs.MetastoreServiceMaintenanceWindowArgs;\nimport com.pulumi.gcp.dataproc.inputs.MetastoreServiceHiveMetastoreConfigArgs;\nimport com.pulumi.gcp.dataproc.Cluster;\nimport com.pulumi.gcp.dataproc.ClusterArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigEndpointConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMasterConfigDiskConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigMetastoreConfigArgs;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigPeripheralsConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n final var gcsAccount = StorageFunctions.getProjectServiceAccount();\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder()\n .uniformBucketLevelAccess(true)\n .name(\"dataproc-bucket\")\n .location(\"US\")\n .forceDestroy(true)\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder()\n .name(\"example-keyring\")\n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder()\n .name(\"example-key\")\n .keyRing(keyRing.id())\n .purpose(\"ENCRYPT_DECRYPT\")\n .build());\n\n var cryptoKeyMember1 = new CryptoKeyIAMMember(\"cryptoKeyMember1\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@dataproc-accounts.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var ms = new MetastoreService(\"ms\", MetastoreServiceArgs.builder()\n .serviceId(\"dataproc-batch\")\n .location(\"us-central1\")\n .port(9080)\n .tier(\"DEVELOPER\")\n .maintenanceWindow(MetastoreServiceMaintenanceWindowArgs.builder()\n .hourOfDay(2)\n .dayOfWeek(\"SUNDAY\")\n .build())\n .hiveMetastoreConfig(MetastoreServiceHiveMetastoreConfigArgs.builder()\n .version(\"3.1.2\")\n .build())\n .build());\n\n var basic = new Cluster(\"basic\", ClusterArgs.builder()\n .name(\"dataproc-batch\")\n .region(\"us-central1\")\n .clusterConfig(ClusterClusterConfigArgs.builder()\n .softwareConfig(ClusterClusterConfigSoftwareConfigArgs.builder()\n .overrideProperties(Map.ofEntries(\n Map.entry(\"dataproc:dataproc.allow.zero.workers\", \"true\"),\n Map.entry(\"spark:spark.history.fs.logDirectory\", bucket.name().applyValue(name -\u003e String.format(\"gs://%s/*/spark-job-history\", name)))\n ))\n .build())\n .endpointConfig(ClusterClusterConfigEndpointConfigArgs.builder()\n .enableHttpPortAccess(true)\n .build())\n .masterConfig(ClusterClusterConfigMasterConfigArgs.builder()\n .numInstances(1)\n .machineType(\"e2-standard-2\")\n .diskConfig(ClusterClusterConfigMasterConfigDiskConfigArgs.builder()\n .bootDiskSizeGb(35)\n .build())\n .build())\n .metastoreConfig(ClusterClusterConfigMetastoreConfigArgs.builder()\n .dataprocMetastoreService(ms.name())\n .build())\n .build())\n .build());\n\n var exampleBatchSpark = new Batch(\"exampleBatchSpark\", BatchArgs.builder()\n .batchId(\"dataproc-batch\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .version(\"2.2\")\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .kmsKey(cryptoKey.id())\n .networkUri(\"default\")\n .serviceAccount(String.format(\"%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .stagingBucket(bucket.name())\n .build())\n .peripheralsConfig(BatchEnvironmentConfigPeripheralsConfigArgs.builder()\n .metastoreService(ms.name())\n .sparkHistoryServerConfig(BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfigArgs.builder()\n .dataprocCluster(basic.id())\n .build())\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyMember1)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSpark:\n type: gcp:dataproc:Batch\n name: example_batch_spark\n properties:\n batchId: dataproc-batch\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n version: '2.2'\n environmentConfig:\n executionConfig:\n ttl: 3600s\n networkTags:\n - tag1\n kmsKey: ${cryptoKey.id}\n networkUri: default\n serviceAccount: ${project.number}-compute@developer.gserviceaccount.com\n stagingBucket: ${bucket.name}\n peripheralsConfig:\n metastoreService: ${ms.name}\n sparkHistoryServerConfig:\n dataprocCluster: ${basic.id}\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n options:\n dependsOn:\n - ${cryptoKeyMember1}\n bucket:\n type: gcp:storage:Bucket\n properties:\n uniformBucketLevelAccess: true\n name: dataproc-bucket\n location: US\n forceDestroy: true\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: example-key\n keyRing: ${keyRing.id}\n purpose: ENCRYPT_DECRYPT\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: example-keyring\n location: us-central1\n cryptoKeyMember1:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key_member_1\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@dataproc-accounts.iam.gserviceaccount.com\n basic:\n type: gcp:dataproc:Cluster\n properties:\n name: dataproc-batch\n region: us-central1\n clusterConfig:\n softwareConfig:\n overrideProperties:\n dataproc:dataproc.allow.zero.workers: 'true'\n spark:spark.history.fs.logDirectory: gs://${bucket.name}/*/spark-job-history\n endpointConfig:\n enableHttpPortAccess: true\n masterConfig:\n numInstances: 1\n machineType: e2-standard-2\n diskConfig:\n bootDiskSizeGb: 35\n metastoreConfig:\n dataprocMetastoreService: ${ms.name}\n ms:\n type: gcp:dataproc:MetastoreService\n properties:\n serviceId: dataproc-batch\n location: us-central1\n port: 9080\n tier: DEVELOPER\n maintenanceWindow:\n hourOfDay: 2\n dayOfWeek: SUNDAY\n hiveMetastoreConfig:\n version: 3.1.2\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n gcsAccount:\n fn::invoke:\n function: gcp:storage:getProjectServiceAccount\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Sparksql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSparsql = new gcp.dataproc.Batch(\"example_batch_sparsql\", {\n batchId: \"tf-test-batch_88722\",\n location: \"us-central1\",\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n },\n },\n sparkSqlBatch: {\n queryFileUri: \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n queryVariables: {\n name: \"value\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_sparsql = gcp.dataproc.Batch(\"example_batch_sparsql\",\n batch_id=\"tf-test-batch_88722\",\n location=\"us-central1\",\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n },\n },\n spark_sql_batch={\n \"query_file_uri\": \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n \"query_variables\": {\n \"name\": \"value\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSparsql = new Gcp.Dataproc.Batch(\"example_batch_sparsql\", new()\n {\n BatchId = \"tf-test-batch_88722\",\n Location = \"us-central1\",\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n },\n },\n SparkSqlBatch = new Gcp.Dataproc.Inputs.BatchSparkSqlBatchArgs\n {\n QueryFileUri = \"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\",\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n QueryVariables = \n {\n { \"name\", \"value\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_sparsql\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_88722\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkSqlBatch: \u0026dataproc.BatchSparkSqlBatchArgs{\n\t\t\t\tQueryFileUri: pulumi.String(\"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\"),\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t\tQueryVariables: pulumi.StringMap{\n\t\t\t\t\t\"name\": pulumi.String(\"value\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkSqlBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSparsql = new Batch(\"exampleBatchSparsql\", BatchArgs.builder()\n .batchId(\"tf-test-batch_88722\")\n .location(\"us-central1\")\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .build())\n .build())\n .sparkSqlBatch(BatchSparkSqlBatchArgs.builder()\n .queryFileUri(\"gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .queryVariables(Map.of(\"name\", \"value\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSparsql:\n type: gcp:dataproc:Batch\n name: example_batch_sparsql\n properties:\n batchId: tf-test-batch_88722\n location: us-central1\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n sparkSqlBatch:\n queryFileUri: gs://dataproc-examples/spark-sql/natality/cigarette_correlations.sql\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n queryVariables:\n name: value\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Pyspark\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchPyspark = new gcp.dataproc.Batch(\"example_batch_pyspark\", {\n batchId: \"tf-test-batch_39249\",\n location: \"us-central1\",\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n },\n },\n pysparkBatch: {\n mainPythonFileUri: \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n pythonFileUris: [\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"],\n archiveUris: [\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n ],\n fileUris: [\"https://storage.googleapis.com/terraform-batches/people.txt\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_pyspark = gcp.dataproc.Batch(\"example_batch_pyspark\",\n batch_id=\"tf-test-batch_39249\",\n location=\"us-central1\",\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n },\n },\n pyspark_batch={\n \"main_python_file_uri\": \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n \"python_file_uris\": [\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"],\n \"archive_uris\": [\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n ],\n \"file_uris\": [\"https://storage.googleapis.com/terraform-batches/people.txt\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchPyspark = new Gcp.Dataproc.Batch(\"example_batch_pyspark\", new()\n {\n BatchId = \"tf-test-batch_39249\",\n Location = \"us-central1\",\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n },\n },\n PysparkBatch = new Gcp.Dataproc.Inputs.BatchPysparkBatchArgs\n {\n MainPythonFileUri = \"https://storage.googleapis.com/terraform-batches/test_util.py\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n PythonFileUris = new[]\n {\n \"gs://dataproc-examples/pyspark/hello-world/hello-world.py\",\n },\n ArchiveUris = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\",\n },\n FileUris = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/people.txt\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_pyspark\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_39249\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPysparkBatch: \u0026dataproc.BatchPysparkBatchArgs{\n\t\t\t\tMainPythonFileUri: pulumi.String(\"https://storage.googleapis.com/terraform-batches/test_util.py\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t\tPythonFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\"),\n\t\t\t\t},\n\t\t\t\tArchiveUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\"),\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt.jar\"),\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/animals.txt\"),\n\t\t\t\t},\n\t\t\t\tFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/people.txt\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchPysparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchPyspark = new Batch(\"exampleBatchPyspark\", BatchArgs.builder()\n .batchId(\"tf-test-batch_39249\")\n .location(\"us-central1\")\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .build())\n .build())\n .pysparkBatch(BatchPysparkBatchArgs.builder()\n .mainPythonFileUri(\"https://storage.googleapis.com/terraform-batches/test_util.py\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .pythonFileUris(\"gs://dataproc-examples/pyspark/hello-world/hello-world.py\")\n .archiveUris( \n \"https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt.jar\",\n \"https://storage.googleapis.com/terraform-batches/animals.txt\")\n .fileUris(\"https://storage.googleapis.com/terraform-batches/people.txt\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchPyspark:\n type: gcp:dataproc:Batch\n name: example_batch_pyspark\n properties:\n batchId: tf-test-batch_39249\n location: us-central1\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n pysparkBatch:\n mainPythonFileUri: https://storage.googleapis.com/terraform-batches/test_util.py\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n pythonFileUris:\n - gs://dataproc-examples/pyspark/hello-world/hello-world.py\n archiveUris:\n - https://storage.googleapis.com/terraform-batches/animals.txt.tar.gz#unpacked\n - https://storage.googleapis.com/terraform-batches/animals.txt.jar\n - https://storage.googleapis.com/terraform-batches/animals.txt\n fileUris:\n - https://storage.googleapis.com/terraform-batches/people.txt\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Sparkr\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchSparkr = new gcp.dataproc.Batch(\"example_batch_sparkr\", {\n batchId: \"tf-test-batch_74391\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n networkTags: [\"tag1\"],\n },\n },\n sparkRBatch: {\n mainRFileUri: \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n args: [\"https://storage.googleapis.com/terraform-batches/flights.csv\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_sparkr = gcp.dataproc.Batch(\"example_batch_sparkr\",\n batch_id=\"tf-test-batch_74391\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n \"network_tags\": [\"tag1\"],\n },\n },\n spark_r_batch={\n \"main_r_file_uri\": \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n \"args\": [\"https://storage.googleapis.com/terraform-batches/flights.csv\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchSparkr = new Gcp.Dataproc.Batch(\"example_batch_sparkr\", new()\n {\n BatchId = \"tf-test-batch_74391\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n NetworkTags = new[]\n {\n \"tag1\",\n },\n },\n },\n SparkRBatch = new Gcp.Dataproc.Inputs.BatchSparkRBatchArgs\n {\n MainRFileUri = \"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\",\n Args = new[]\n {\n \"https://storage.googleapis.com/terraform-batches/flights.csv\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_sparkr\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_74391\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t\tNetworkTags: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkRBatch: \u0026dataproc.BatchSparkRBatchArgs{\n\t\t\t\tMainRFileUri: pulumi.String(\"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://storage.googleapis.com/terraform-batches/flights.csv\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkRBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchSparkr = new Batch(\"exampleBatchSparkr\", BatchArgs.builder()\n .batchId(\"tf-test-batch_74391\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .networkTags(\"tag1\")\n .build())\n .build())\n .sparkRBatch(BatchSparkRBatchArgs.builder()\n .mainRFileUri(\"https://storage.googleapis.com/terraform-batches/spark-r-flights.r\")\n .args(\"https://storage.googleapis.com/terraform-batches/flights.csv\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchSparkr:\n type: gcp:dataproc:Batch\n name: example_batch_sparkr\n properties:\n batchId: tf-test-batch_74391\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n networkTags:\n - tag1\n sparkRBatch:\n mainRFileUri: https://storage.googleapis.com/terraform-batches/spark-r-flights.r\n args:\n - https://storage.googleapis.com/terraform-batches/flights.csv\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataproc Batch Autotuning\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleBatchAutotuning = new gcp.dataproc.Batch(\"example_batch_autotuning\", {\n batchId: \"tf-test-batch_16511\",\n location: \"us-central1\",\n labels: {\n batch_test: \"terraform\",\n },\n runtimeConfig: {\n version: \"2.2\",\n properties: {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n cohort: \"tf-dataproc-batch-example\",\n autotuningConfig: {\n scenarios: [\n \"SCALING\",\n \"MEMORY\",\n ],\n },\n },\n environmentConfig: {\n executionConfig: {\n subnetworkUri: \"default\",\n ttl: \"3600s\",\n },\n },\n sparkBatch: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n args: [\"10\"],\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_batch_autotuning = gcp.dataproc.Batch(\"example_batch_autotuning\",\n batch_id=\"tf-test-batch_16511\",\n location=\"us-central1\",\n labels={\n \"batch_test\": \"terraform\",\n },\n runtime_config={\n \"version\": \"2.2\",\n \"properties\": {\n \"spark.dynamicAllocation.enabled\": \"false\",\n \"spark.executor.instances\": \"2\",\n },\n \"cohort\": \"tf-dataproc-batch-example\",\n \"autotuning_config\": {\n \"scenarios\": [\n \"SCALING\",\n \"MEMORY\",\n ],\n },\n },\n environment_config={\n \"execution_config\": {\n \"subnetwork_uri\": \"default\",\n \"ttl\": \"3600s\",\n },\n },\n spark_batch={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"args\": [\"10\"],\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleBatchAutotuning = new Gcp.Dataproc.Batch(\"example_batch_autotuning\", new()\n {\n BatchId = \"tf-test-batch_16511\",\n Location = \"us-central1\",\n Labels = \n {\n { \"batch_test\", \"terraform\" },\n },\n RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs\n {\n Version = \"2.2\",\n Properties = \n {\n { \"spark.dynamicAllocation.enabled\", \"false\" },\n { \"spark.executor.instances\", \"2\" },\n },\n Cohort = \"tf-dataproc-batch-example\",\n AutotuningConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigAutotuningConfigArgs\n {\n Scenarios = new[]\n {\n \"SCALING\",\n \"MEMORY\",\n },\n },\n },\n EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs\n {\n ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs\n {\n SubnetworkUri = \"default\",\n Ttl = \"3600s\",\n },\n },\n SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n Args = new[]\n {\n \"10\",\n },\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewBatch(ctx, \"example_batch_autotuning\", \u0026dataproc.BatchArgs{\n\t\t\tBatchId: pulumi.String(\"tf-test-batch_16511\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"batch_test\": pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t\tRuntimeConfig: \u0026dataproc.BatchRuntimeConfigArgs{\n\t\t\t\tVersion: pulumi.String(\"2.2\"),\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.dynamicAllocation.enabled\": pulumi.String(\"false\"),\n\t\t\t\t\t\"spark.executor.instances\": pulumi.String(\"2\"),\n\t\t\t\t},\n\t\t\t\tCohort: pulumi.String(\"tf-dataproc-batch-example\"),\n\t\t\t\tAutotuningConfig: \u0026dataproc.BatchRuntimeConfigAutotuningConfigArgs{\n\t\t\t\t\tScenarios: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"SCALING\"),\n\t\t\t\t\t\tpulumi.String(\"MEMORY\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEnvironmentConfig: \u0026dataproc.BatchEnvironmentConfigArgs{\n\t\t\t\tExecutionConfig: \u0026dataproc.BatchEnvironmentConfigExecutionConfigArgs{\n\t\t\t\t\tSubnetworkUri: pulumi.String(\"default\"),\n\t\t\t\t\tTtl: pulumi.String(\"3600s\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tSparkBatch: \u0026dataproc.BatchSparkBatchArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10\"),\n\t\t\t\t},\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dataproc.Batch;\nimport com.pulumi.gcp.dataproc.BatchArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigAutotuningConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleBatchAutotuning = new Batch(\"exampleBatchAutotuning\", BatchArgs.builder()\n .batchId(\"tf-test-batch_16511\")\n .location(\"us-central1\")\n .labels(Map.of(\"batch_test\", \"terraform\"))\n .runtimeConfig(BatchRuntimeConfigArgs.builder()\n .version(\"2.2\")\n .properties(Map.ofEntries(\n Map.entry(\"spark.dynamicAllocation.enabled\", \"false\"),\n Map.entry(\"spark.executor.instances\", \"2\")\n ))\n .cohort(\"tf-dataproc-batch-example\")\n .autotuningConfig(BatchRuntimeConfigAutotuningConfigArgs.builder()\n .scenarios( \n \"SCALING\",\n \"MEMORY\")\n .build())\n .build())\n .environmentConfig(BatchEnvironmentConfigArgs.builder()\n .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()\n .subnetworkUri(\"default\")\n .ttl(\"3600s\")\n .build())\n .build())\n .sparkBatch(BatchSparkBatchArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .args(\"10\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleBatchAutotuning:\n type: gcp:dataproc:Batch\n name: example_batch_autotuning\n properties:\n batchId: tf-test-batch_16511\n location: us-central1\n labels:\n batch_test: terraform\n runtimeConfig:\n version: '2.2'\n properties:\n spark.dynamicAllocation.enabled: 'false'\n spark.executor.instances: '2'\n cohort: tf-dataproc-batch-example\n autotuningConfig:\n scenarios:\n - SCALING\n - MEMORY\n environmentConfig:\n executionConfig:\n subnetworkUri: default\n ttl: 3600s\n sparkBatch:\n mainClass: org.apache.spark.examples.SparkPi\n args:\n - '10'\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBatch can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/batches/{{batch_id}}`\n\n* `{{project}}/{{location}}/{{batch_id}}`\n\n* `{{location}}/{{batch_id}}`\n\nWhen using the `pulumi import` command, Batch can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default projects/{{project}}/locations/{{location}}/batches/{{batch_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default {{project}}/{{location}}/{{batch_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/batch:Batch default {{location}}/{{batch_id}}\n```\n\n",
"properties": {
"batchId": {
"type": "string",
@@ -207431,7 +208529,7 @@
},
"industryVertical": {
"type": "string",
- "description": "The industry vertical that the engine registers. The restriction of the Engine industry vertical is based on DataStore:\nIf unspecified, default to GENERIC. Vertical on Engine has to match vertical of the DataStore liniked to the engine.\nDefault value: \"GENERIC\" Possible values: [\"GENERIC\", \"MEDIA\"]\n"
+ "description": "The industry vertical that the engine registers. The restriction of the Engine industry vertical is based on DataStore:\nIf unspecified, default to GENERIC. Vertical on Engine has to match vertical of the DataStore liniked to the engine.\nDefault value: \"GENERIC\" Possible values: [\"GENERIC\", \"MEDIA\", \"HEALTHCARE_FHIR\"]\n"
},
"location": {
"type": "string",
@@ -207495,7 +208593,7 @@
},
"industryVertical": {
"type": "string",
- "description": "The industry vertical that the engine registers. The restriction of the Engine industry vertical is based on DataStore:\nIf unspecified, default to GENERIC. Vertical on Engine has to match vertical of the DataStore liniked to the engine.\nDefault value: \"GENERIC\" Possible values: [\"GENERIC\", \"MEDIA\"]\n",
+ "description": "The industry vertical that the engine registers. The restriction of the Engine industry vertical is based on DataStore:\nIf unspecified, default to GENERIC. Vertical on Engine has to match vertical of the DataStore liniked to the engine.\nDefault value: \"GENERIC\" Possible values: [\"GENERIC\", \"MEDIA\", \"HEALTHCARE_FHIR\"]\n",
"willReplaceOnChanges": true
},
"location": {
@@ -207556,7 +208654,7 @@
},
"industryVertical": {
"type": "string",
- "description": "The industry vertical that the engine registers. The restriction of the Engine industry vertical is based on DataStore:\nIf unspecified, default to GENERIC. Vertical on Engine has to match vertical of the DataStore liniked to the engine.\nDefault value: \"GENERIC\" Possible values: [\"GENERIC\", \"MEDIA\"]\n",
+ "description": "The industry vertical that the engine registers. The restriction of the Engine industry vertical is based on DataStore:\nIf unspecified, default to GENERIC. Vertical on Engine has to match vertical of the DataStore liniked to the engine.\nDefault value: \"GENERIC\" Possible values: [\"GENERIC\", \"MEDIA\", \"HEALTHCARE_FHIR\"]\n",
"willReplaceOnChanges": true
},
"location": {
@@ -214290,7 +215388,7 @@
}
},
"gcp:firebaserules/release:Release": {
- "description": "For more information, see:\n* [Get started with Firebase Security Rules](https://firebase.google.com/docs/rules/get-started)\n## Example Usage\n\n## Import\n\nRelease can be imported using any of these accepted formats:\n* `projects/{{project}}/releases/{{name}}`\n\nWhen using the `pulumi import` command, Release can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebaserules/release:Release default projects/{{project}}/releases/{{name}}\n```\n",
+ "description": "For more information, see:\n* [Get started with Firebase Security Rules](https://firebase.google.com/docs/rules/get-started)\n## Example Usage\n\n### Firestore_release\nCreates a Firebase Rules Release to the default Cloud Firestore instance\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst firestore = new gcp.firebaserules.Ruleset(\"firestore\", {\n project: \"my-project-name\",\n source: {\n files: [{\n content: \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n name: \"firestore.rules\",\n }],\n },\n});\nconst primary = new gcp.firebaserules.Release(\"primary\", {\n name: \"cloud.firestore\",\n project: \"my-project-name\",\n rulesetName: pulumi.interpolate`projects/my-project-name/rulesets/${firestore.name}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfirestore = gcp.firebaserules.Ruleset(\"firestore\",\n project=\"my-project-name\",\n source={\n \"files\": [{\n \"content\": \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n \"name\": \"firestore.rules\",\n }],\n })\nprimary = gcp.firebaserules.Release(\"primary\",\n name=\"cloud.firestore\",\n project=\"my-project-name\",\n ruleset_name=firestore.name.apply(lambda name: f\"projects/my-project-name/rulesets/{name}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firestore = new Gcp.Firebaserules.Ruleset(\"firestore\", new()\n {\n Project = \"my-project-name\",\n Source = new Gcp.Firebaserules.Inputs.RulesetSourceArgs\n {\n Files = new[]\n {\n new Gcp.Firebaserules.Inputs.RulesetSourceFileArgs\n {\n Content = \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n Name = \"firestore.rules\",\n },\n },\n },\n });\n\n var primary = new Gcp.Firebaserules.Release(\"primary\", new()\n {\n Name = \"cloud.firestore\",\n Project = \"my-project-name\",\n RulesetName = firestore.Name.Apply(name =\u003e $\"projects/my-project-name/rulesets/{name}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebaserules\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfirestore, err := firebaserules.NewRuleset(ctx, \"firestore\", \u0026firebaserules.RulesetArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tSource: \u0026firebaserules.RulesetSourceArgs{\n\t\t\t\tFiles: firebaserules.RulesetSourceFileArray{\n\t\t\t\t\t\u0026firebaserules.RulesetSourceFileArgs{\n\t\t\t\t\t\tContent: pulumi.String(\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\"),\n\t\t\t\t\t\tName: pulumi.String(\"firestore.rules\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firebaserules.NewRelease(ctx, \"primary\", \u0026firebaserules.ReleaseArgs{\n\t\t\tName: pulumi.String(\"cloud.firestore\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRulesetName: firestore.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/my-project-name/rulesets/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firebaserules.Ruleset;\nimport com.pulumi.gcp.firebaserules.RulesetArgs;\nimport com.pulumi.gcp.firebaserules.inputs.RulesetSourceArgs;\nimport com.pulumi.gcp.firebaserules.Release;\nimport com.pulumi.gcp.firebaserules.ReleaseArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var firestore = new Ruleset(\"firestore\", RulesetArgs.builder()\n .project(\"my-project-name\")\n .source(RulesetSourceArgs.builder()\n .files(RulesetSourceFileArgs.builder()\n .content(\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\")\n .name(\"firestore.rules\")\n .build())\n .build())\n .build());\n\n var primary = new Release(\"primary\", ReleaseArgs.builder()\n .name(\"cloud.firestore\")\n .project(\"my-project-name\")\n .rulesetName(firestore.name().applyValue(name -\u003e String.format(\"projects/my-project-name/rulesets/%s\", name)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:firebaserules:Release\n properties:\n name: cloud.firestore\n project: my-project-name\n rulesetName: projects/my-project-name/rulesets/${firestore.name}\n firestore:\n type: gcp:firebaserules:Ruleset\n properties:\n project: my-project-name\n source:\n files:\n - content: 'service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }'\n name: firestore.rules\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore_release_additional\nCreates a Firebase Rules Release to an additional Cloud Firestore instance\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst firestore = new gcp.firebaserules.Ruleset(\"firestore\", {\n project: \"my-project-name\",\n source: {\n files: [{\n content: \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n name: \"firestore.rules\",\n }],\n },\n});\nconst primary = new gcp.firebaserules.Release(\"primary\", {\n name: \"cloud.firestore/database\",\n project: \"my-project-name\",\n rulesetName: pulumi.interpolate`projects/my-project-name/rulesets/${firestore.name}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfirestore = gcp.firebaserules.Ruleset(\"firestore\",\n project=\"my-project-name\",\n source={\n \"files\": [{\n \"content\": \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n \"name\": \"firestore.rules\",\n }],\n })\nprimary = gcp.firebaserules.Release(\"primary\",\n name=\"cloud.firestore/database\",\n project=\"my-project-name\",\n ruleset_name=firestore.name.apply(lambda name: f\"projects/my-project-name/rulesets/{name}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var firestore = new Gcp.Firebaserules.Ruleset(\"firestore\", new()\n {\n Project = \"my-project-name\",\n Source = new Gcp.Firebaserules.Inputs.RulesetSourceArgs\n {\n Files = new[]\n {\n new Gcp.Firebaserules.Inputs.RulesetSourceFileArgs\n {\n Content = \"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\",\n Name = \"firestore.rules\",\n },\n },\n },\n });\n\n var primary = new Gcp.Firebaserules.Release(\"primary\", new()\n {\n Name = \"cloud.firestore/database\",\n Project = \"my-project-name\",\n RulesetName = firestore.Name.Apply(name =\u003e $\"projects/my-project-name/rulesets/{name}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebaserules\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfirestore, err := firebaserules.NewRuleset(ctx, \"firestore\", \u0026firebaserules.RulesetArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tSource: \u0026firebaserules.RulesetSourceArgs{\n\t\t\t\tFiles: firebaserules.RulesetSourceFileArray{\n\t\t\t\t\t\u0026firebaserules.RulesetSourceFileArgs{\n\t\t\t\t\t\tContent: pulumi.String(\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\"),\n\t\t\t\t\t\tName: pulumi.String(\"firestore.rules\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firebaserules.NewRelease(ctx, \"primary\", \u0026firebaserules.ReleaseArgs{\n\t\t\tName: pulumi.String(\"cloud.firestore/database\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRulesetName: firestore.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/my-project-name/rulesets/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firebaserules.Ruleset;\nimport com.pulumi.gcp.firebaserules.RulesetArgs;\nimport com.pulumi.gcp.firebaserules.inputs.RulesetSourceArgs;\nimport com.pulumi.gcp.firebaserules.Release;\nimport com.pulumi.gcp.firebaserules.ReleaseArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var firestore = new Ruleset(\"firestore\", RulesetArgs.builder()\n .project(\"my-project-name\")\n .source(RulesetSourceArgs.builder()\n .files(RulesetSourceFileArgs.builder()\n .content(\"service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }\")\n .name(\"firestore.rules\")\n .build())\n .build())\n .build());\n\n var primary = new Release(\"primary\", ReleaseArgs.builder()\n .name(\"cloud.firestore/database\")\n .project(\"my-project-name\")\n .rulesetName(firestore.name().applyValue(name -\u003e String.format(\"projects/my-project-name/rulesets/%s\", name)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:firebaserules:Release\n properties:\n name: cloud.firestore/database\n project: my-project-name\n rulesetName: projects/my-project-name/rulesets/${firestore.name}\n firestore:\n type: gcp:firebaserules:Ruleset\n properties:\n project: my-project-name\n source:\n files:\n - content: 'service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }'\n name: firestore.rules\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## Import\n\nRelease can be imported using any of these accepted formats:\n* `projects/{{project}}/releases/{{name}}`\n\nWhen using the `pulumi import` command, Release can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebaserules/release:Release default projects/{{project}}/releases/{{name}}\n```\n",
"properties": {
"createTime": {
"type": "string",
@@ -214897,7 +215995,7 @@
}
},
"gcp:firestore/field:Field": {
- "description": "Represents a single field in the database.\nFields are grouped by their \"Collection Group\", which represent all collections\nin the database with the same id.\n\n\nTo get more information about Field, see:\n\n* [API documentation](https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.collectionGroups.fields)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/firestore/docs/query-data/indexing)\n\n\u003e **Warning:** This resource creates a Firestore Single Field override on a project that\n already has a Firestore database. If you haven't already created it, you may\ncreate a `gcp.firestore.Database` resource with `location_id` set to your\nchosen location.\n\n## Example Usage\n\n### Firestore Field Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst basic = new gcp.firestore.Field(\"basic\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms__16511\",\n field: \"basic\",\n indexConfig: {\n indexes: [\n {\n order: \"ASCENDING\",\n queryScope: \"COLLECTION_GROUP\",\n },\n {\n arrayConfig: \"CONTAINS\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\nbasic = gcp.firestore.Field(\"basic\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms__16511\",\n field=\"basic\",\n index_config={\n \"indexes\": [\n {\n \"order\": \"ASCENDING\",\n \"query_scope\": \"COLLECTION_GROUP\",\n },\n {\n \"array_config\": \"CONTAINS\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var basic = new Gcp.Firestore.Field(\"basic\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms__16511\",\n FieldId = \"basic\",\n IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs\n {\n Indexes = new[]\n {\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"ASCENDING\",\n QueryScope = \"COLLECTION_GROUP\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n ArrayConfig = \"CONTAINS\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"basic\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms__16511\"),\n\t\t\tField: pulumi.String(\"basic\"),\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{\n\t\t\t\tIndexes: firestore.FieldIndexConfigIndexArray{\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t\t\tQueryScope: pulumi.String(\"COLLECTION_GROUP\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tArrayConfig: pulumi.String(\"CONTAINS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var basic = new Field(\"basic\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms__16511\")\n .field(\"basic\")\n .indexConfig(FieldIndexConfigArgs.builder()\n .indexes( \n FieldIndexConfigIndexArgs.builder()\n .order(\"ASCENDING\")\n .queryScope(\"COLLECTION_GROUP\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .arrayConfig(\"CONTAINS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n basic:\n type: gcp:firestore:Field\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms__16511\n field: basic\n indexConfig:\n indexes:\n - order: ASCENDING\n queryScope: COLLECTION_GROUP\n - arrayConfig: CONTAINS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Field Timestamp\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst timestamp = new gcp.firestore.Field(\"timestamp\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms\",\n field: \"timestamp\",\n ttlConfig: {},\n indexConfig: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\ntimestamp = gcp.firestore.Field(\"timestamp\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms\",\n field=\"timestamp\",\n ttl_config={},\n index_config={})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var timestamp = new Gcp.Firestore.Field(\"timestamp\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms\",\n FieldId = \"timestamp\",\n TtlConfig = null,\n IndexConfig = null,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"timestamp\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms\"),\n\t\t\tField: pulumi.String(\"timestamp\"),\n\t\t\tTtlConfig: \u0026firestore.FieldTtlConfigArgs{},\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldTtlConfigArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var timestamp = new Field(\"timestamp\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms\")\n .field(\"timestamp\")\n .ttlConfig()\n .indexConfig()\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n timestamp:\n type: gcp:firestore:Field\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms\n field: timestamp\n ttlConfig: {}\n indexConfig: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Field Match Override\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst matchOverride = new gcp.firestore.Field(\"match_override\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms__8493\",\n field: \"field_with_same_configuration_as_ancestor\",\n indexConfig: {\n indexes: [\n {\n order: \"ASCENDING\",\n },\n {\n order: \"DESCENDING\",\n },\n {\n arrayConfig: \"CONTAINS\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\nmatch_override = gcp.firestore.Field(\"match_override\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms__8493\",\n field=\"field_with_same_configuration_as_ancestor\",\n index_config={\n \"indexes\": [\n {\n \"order\": \"ASCENDING\",\n },\n {\n \"order\": \"DESCENDING\",\n },\n {\n \"array_config\": \"CONTAINS\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var matchOverride = new Gcp.Firestore.Field(\"match_override\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms__8493\",\n FieldId = \"field_with_same_configuration_as_ancestor\",\n IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs\n {\n Indexes = new[]\n {\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"DESCENDING\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n ArrayConfig = \"CONTAINS\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"match_override\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms__8493\"),\n\t\t\tField: pulumi.String(\"field_with_same_configuration_as_ancestor\"),\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{\n\t\t\t\tIndexes: firestore.FieldIndexConfigIndexArray{\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"DESCENDING\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tArrayConfig: pulumi.String(\"CONTAINS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var matchOverride = new Field(\"matchOverride\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms__8493\")\n .field(\"field_with_same_configuration_as_ancestor\")\n .indexConfig(FieldIndexConfigArgs.builder()\n .indexes( \n FieldIndexConfigIndexArgs.builder()\n .order(\"ASCENDING\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .order(\"DESCENDING\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .arrayConfig(\"CONTAINS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n matchOverride:\n type: gcp:firestore:Field\n name: match_override\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms__8493\n field: field_with_same_configuration_as_ancestor\n indexConfig:\n indexes:\n - order: ASCENDING\n - order: DESCENDING\n - arrayConfig: CONTAINS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nField can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Field can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firestore/field:Field default {{name}}\n```\n\n",
+ "description": "Represents a single field in the database.\nFields are grouped by their \"Collection Group\", which represent all collections\nin the database with the same id.\n\n\nTo get more information about Field, see:\n\n* [API documentation](https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.collectionGroups.fields)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/firestore/docs/query-data/indexing)\n\n\u003e **Warning:** This resource creates a Firestore Single Field override on a project that\n already has a Firestore database. If you haven't already created it, you may\ncreate a `gcp.firestore.Database` resource with `location_id` set to your\nchosen location.\n\n## Example Usage\n\n### Firestore Field Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst basic = new gcp.firestore.Field(\"basic\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms__8493\",\n field: \"basic\",\n indexConfig: {\n indexes: [\n {\n order: \"ASCENDING\",\n queryScope: \"COLLECTION_GROUP\",\n },\n {\n arrayConfig: \"CONTAINS\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\nbasic = gcp.firestore.Field(\"basic\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms__8493\",\n field=\"basic\",\n index_config={\n \"indexes\": [\n {\n \"order\": \"ASCENDING\",\n \"query_scope\": \"COLLECTION_GROUP\",\n },\n {\n \"array_config\": \"CONTAINS\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var basic = new Gcp.Firestore.Field(\"basic\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms__8493\",\n FieldId = \"basic\",\n IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs\n {\n Indexes = new[]\n {\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"ASCENDING\",\n QueryScope = \"COLLECTION_GROUP\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n ArrayConfig = \"CONTAINS\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"basic\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms__8493\"),\n\t\t\tField: pulumi.String(\"basic\"),\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{\n\t\t\t\tIndexes: firestore.FieldIndexConfigIndexArray{\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t\t\tQueryScope: pulumi.String(\"COLLECTION_GROUP\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tArrayConfig: pulumi.String(\"CONTAINS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var basic = new Field(\"basic\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms__8493\")\n .field(\"basic\")\n .indexConfig(FieldIndexConfigArgs.builder()\n .indexes( \n FieldIndexConfigIndexArgs.builder()\n .order(\"ASCENDING\")\n .queryScope(\"COLLECTION_GROUP\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .arrayConfig(\"CONTAINS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n basic:\n type: gcp:firestore:Field\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms__8493\n field: basic\n indexConfig:\n indexes:\n - order: ASCENDING\n queryScope: COLLECTION_GROUP\n - arrayConfig: CONTAINS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Field Timestamp\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst timestamp = new gcp.firestore.Field(\"timestamp\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms\",\n field: \"timestamp\",\n ttlConfig: {},\n indexConfig: {},\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\ntimestamp = gcp.firestore.Field(\"timestamp\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms\",\n field=\"timestamp\",\n ttl_config={},\n index_config={})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var timestamp = new Gcp.Firestore.Field(\"timestamp\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms\",\n FieldId = \"timestamp\",\n TtlConfig = null,\n IndexConfig = null,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"timestamp\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms\"),\n\t\t\tField: pulumi.String(\"timestamp\"),\n\t\t\tTtlConfig: \u0026firestore.FieldTtlConfigArgs{},\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldTtlConfigArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var timestamp = new Field(\"timestamp\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms\")\n .field(\"timestamp\")\n .ttlConfig()\n .indexConfig()\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n timestamp:\n type: gcp:firestore:Field\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms\n field: timestamp\n ttlConfig: {}\n indexConfig: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Field Match Override\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_ENABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst matchOverride = new gcp.firestore.Field(\"match_override\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"chatrooms__9106\",\n field: \"field_with_same_configuration_as_ancestor\",\n indexConfig: {\n indexes: [\n {\n order: \"ASCENDING\",\n },\n {\n order: \"DESCENDING\",\n },\n {\n arrayConfig: \"CONTAINS\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_ENABLED\",\n deletion_policy=\"DELETE\")\nmatch_override = gcp.firestore.Field(\"match_override\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"chatrooms__9106\",\n field=\"field_with_same_configuration_as_ancestor\",\n index_config={\n \"indexes\": [\n {\n \"order\": \"ASCENDING\",\n },\n {\n \"order\": \"DESCENDING\",\n },\n {\n \"array_config\": \"CONTAINS\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_ENABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var matchOverride = new Gcp.Firestore.Field(\"match_override\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"chatrooms__9106\",\n FieldId = \"field_with_same_configuration_as_ancestor\",\n IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs\n {\n Indexes = new[]\n {\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n Order = \"DESCENDING\",\n },\n new Gcp.Firestore.Inputs.FieldIndexConfigIndexArgs\n {\n ArrayConfig = \"CONTAINS\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_ENABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewField(ctx, \"match_override\", \u0026firestore.FieldArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"chatrooms__9106\"),\n\t\t\tField: pulumi.String(\"field_with_same_configuration_as_ancestor\"),\n\t\t\tIndexConfig: \u0026firestore.FieldIndexConfigArgs{\n\t\t\t\tIndexes: firestore.FieldIndexConfigIndexArray{\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tOrder: pulumi.String(\"DESCENDING\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026firestore.FieldIndexConfigIndexArgs{\n\t\t\t\t\t\tArrayConfig: pulumi.String(\"CONTAINS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Field;\nimport com.pulumi.gcp.firestore.FieldArgs;\nimport com.pulumi.gcp.firestore.inputs.FieldIndexConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_ENABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var matchOverride = new Field(\"matchOverride\", FieldArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"chatrooms__9106\")\n .field(\"field_with_same_configuration_as_ancestor\")\n .indexConfig(FieldIndexConfigArgs.builder()\n .indexes( \n FieldIndexConfigIndexArgs.builder()\n .order(\"ASCENDING\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .order(\"DESCENDING\")\n .build(),\n FieldIndexConfigIndexArgs.builder()\n .arrayConfig(\"CONTAINS\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_ENABLED\n deletionPolicy: DELETE\n matchOverride:\n type: gcp:firestore:Field\n name: match_override\n properties:\n project: my-project-name\n database: ${database.name}\n collection: chatrooms__9106\n field: field_with_same_configuration_as_ancestor\n indexConfig:\n indexes:\n - order: ASCENDING\n - order: DESCENDING\n - arrayConfig: CONTAINS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nField can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Field can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firestore/field:Field default {{name}}\n```\n\n",
"properties": {
"collection": {
"type": "string",
@@ -215700,28 +216798,16 @@
"type": "object"
}
},
- "gcp:gkebackup/backupPlan:BackupPlan": {
- "description": "Represents a Backup Plan instance.\n\n\nTo get more information about BackupPlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.backupPlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Backupplan Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"basic-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"basic-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"basic-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"basic-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"basic-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: basic-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Autopilot\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"autopilot-cluster\",\n location: \"us-central1\",\n enableAutopilot: true,\n ipAllocationPolicy: {},\n releaseChannel: {\n channel: \"RAPID\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst autopilot = new gcp.gkebackup.BackupPlan(\"autopilot\", {\n name: \"autopilot-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"autopilot-cluster\",\n location=\"us-central1\",\n enable_autopilot=True,\n ip_allocation_policy={},\n release_channel={\n \"channel\": \"RAPID\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nautopilot = gcp.gkebackup.BackupPlan(\"autopilot\",\n name=\"autopilot-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"autopilot-cluster\",\n Location = \"us-central1\",\n EnableAutopilot = true,\n IpAllocationPolicy = null,\n ReleaseChannel = new Gcp.Container.Inputs.ClusterReleaseChannelArgs\n {\n Channel = \"RAPID\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var autopilot = new Gcp.GkeBackup.BackupPlan(\"autopilot\", new()\n {\n Name = \"autopilot-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"autopilot-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tEnableAutopilot: pulumi.Bool(true),\n\t\t\tIpAllocationPolicy: \u0026container.ClusterIpAllocationPolicyArgs{},\n\t\t\tReleaseChannel: \u0026container.ClusterReleaseChannelArgs{\n\t\t\t\tChannel: pulumi.String(\"RAPID\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"autopilot\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"autopilot-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterIpAllocationPolicyArgs;\nimport com.pulumi.gcp.container.inputs.ClusterReleaseChannelArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"autopilot-cluster\")\n .location(\"us-central1\")\n .enableAutopilot(true)\n .ipAllocationPolicy()\n .releaseChannel(ClusterReleaseChannelArgs.builder()\n .channel(\"RAPID\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var autopilot = new BackupPlan(\"autopilot\", BackupPlanArgs.builder()\n .name(\"autopilot-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: autopilot-cluster\n location: us-central1\n enableAutopilot: true\n ipAllocationPolicy: {}\n releaseChannel:\n channel: RAPID\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n autopilot:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: autopilot-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"cmek-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"backup-key\",\n location: \"us-central1\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"backup-key\",\n keyRing: keyRing.id,\n});\nconst cmek = new gcp.gkebackup.BackupPlan(\"cmek\", {\n name: \"cmek-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n selectedNamespaces: {\n namespaces: [\n \"default\",\n \"test\",\n ],\n },\n encryptionKey: {\n gcpKmsEncryptionKey: cryptoKey.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"cmek-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"backup-key\",\n location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"backup-key\",\n key_ring=key_ring.id)\ncmek = gcp.gkebackup.BackupPlan(\"cmek\",\n name=\"cmek-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"selected_namespaces\": {\n \"namespaces\": [\n \"default\",\n \"test\",\n ],\n },\n \"encryption_key\": {\n \"gcp_kms_encryption_key\": crypto_key.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"cmek-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"backup-key\",\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"backup-key\",\n KeyRing = keyRing.Id,\n });\n\n var cmek = new Gcp.GkeBackup.BackupPlan(\"cmek\", new()\n {\n Name = \"cmek-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"default\",\n \"test\",\n },\n },\n EncryptionKey = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigEncryptionKeyArgs\n {\n GcpKmsEncryptionKey = cryptoKey.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"cmek-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"backup-key\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"backup-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"cmek\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"cmek-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.BackupPlanBackupConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"default\"),\n\t\t\t\t\t\tpulumi.String(\"test\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEncryptionKey: \u0026gkebackup.BackupPlanBackupConfigEncryptionKeyArgs{\n\t\t\t\t\tGcpKmsEncryptionKey: cryptoKey.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigEncryptionKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"cmek-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder()\n .name(\"backup-key\")\n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder()\n .name(\"backup-key\")\n .keyRing(keyRing.id())\n .build());\n\n var cmek = new BackupPlan(\"cmek\", BackupPlanArgs.builder()\n .name(\"cmek-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .selectedNamespaces(BackupPlanBackupConfigSelectedNamespacesArgs.builder()\n .namespaces( \n \"default\",\n \"test\")\n .build())\n .encryptionKey(BackupPlanBackupConfigEncryptionKeyArgs.builder()\n .gcpKmsEncryptionKey(cryptoKey.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: cmek-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n cmek:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: cmek-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n selectedNamespaces:\n namespaces:\n - default\n - test\n encryptionKey:\n gcpKmsEncryptionKey: ${cryptoKey.id}\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: backup-key\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: backup-key\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"full-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst full = new gcp.gkebackup.BackupPlan(\"full\", {\n name: \"full-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n cronSchedule: \"0 9 * * 1\",\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n selectedApplications: {\n namespacedNames: [\n {\n name: \"app1\",\n namespace: \"ns1\",\n },\n {\n name: \"app2\",\n namespace: \"ns2\",\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"full-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nfull = gcp.gkebackup.BackupPlan(\"full\",\n name=\"full-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy={\n \"backup_delete_lock_days\": 30,\n \"backup_retain_days\": 180,\n },\n backup_schedule={\n \"cron_schedule\": \"0 9 * * 1\",\n },\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"selected_applications\": {\n \"namespaced_names\": [\n {\n \"name\": \"app1\",\n \"namespace\": \"ns1\",\n },\n {\n \"name\": \"app2\",\n \"namespace\": \"ns2\",\n },\n ],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"full-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var full = new Gcp.GkeBackup.BackupPlan(\"full\", new()\n {\n Name = \"full-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n CronSchedule = \"0 9 * * 1\",\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n SelectedApplications = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app1\",\n Namespace = \"ns1\",\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app2\",\n Namespace = \"ns2\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"full-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"full\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"full-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tCronSchedule: pulumi.String(\"0 9 * * 1\"),\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tSelectedApplications: \u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app1\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app2\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedApplicationsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"full-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var full = new BackupPlan(\"full\", BackupPlanArgs.builder()\n .name(\"full-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .cronSchedule(\"0 9 * * 1\")\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .selectedApplications(BackupPlanBackupConfigSelectedApplicationsArgs.builder()\n .namespacedNames( \n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app1\")\n .namespace(\"ns1\")\n .build(),\n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app2\")\n .namespace(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: full-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n full:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: full-plan\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n cronSchedule: 0 9 * * 1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n selectedApplications:\n namespacedNames:\n - name: app1\n namespace: ns1\n - name: app2\n namespace: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Permissive\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"permissive-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst permissive = new gcp.gkebackup.BackupPlan(\"permissive\", {\n name: \"permissive-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n cronSchedule: \"0 9 * * 1\",\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n permissiveMode: true,\n selectedApplications: {\n namespacedNames: [\n {\n name: \"app1\",\n namespace: \"ns1\",\n },\n {\n name: \"app2\",\n namespace: \"ns2\",\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"permissive-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\npermissive = gcp.gkebackup.BackupPlan(\"permissive\",\n name=\"permissive-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy={\n \"backup_delete_lock_days\": 30,\n \"backup_retain_days\": 180,\n },\n backup_schedule={\n \"cron_schedule\": \"0 9 * * 1\",\n },\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"permissive_mode\": True,\n \"selected_applications\": {\n \"namespaced_names\": [\n {\n \"name\": \"app1\",\n \"namespace\": \"ns1\",\n },\n {\n \"name\": \"app2\",\n \"namespace\": \"ns2\",\n },\n ],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"permissive-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var permissive = new Gcp.GkeBackup.BackupPlan(\"permissive\", new()\n {\n Name = \"permissive-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n CronSchedule = \"0 9 * * 1\",\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n PermissiveMode = true,\n SelectedApplications = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app1\",\n Namespace = \"ns1\",\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app2\",\n Namespace = \"ns2\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"permissive-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"permissive\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"permissive-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tCronSchedule: pulumi.String(\"0 9 * * 1\"),\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tPermissiveMode: pulumi.Bool(true),\n\t\t\t\tSelectedApplications: \u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app1\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app2\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedApplicationsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"permissive-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var permissive = new BackupPlan(\"permissive\", BackupPlanArgs.builder()\n .name(\"permissive-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .cronSchedule(\"0 9 * * 1\")\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .permissiveMode(true)\n .selectedApplications(BackupPlanBackupConfigSelectedApplicationsArgs.builder()\n .namespacedNames( \n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app1\")\n .namespace(\"ns1\")\n .build(),\n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app2\")\n .namespace(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: permissive-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n permissive:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: permissive-plan\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n cronSchedule: 0 9 * * 1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n permissiveMode: true\n selectedApplications:\n namespacedNames:\n - name: app1\n namespace: ns1\n - name: app2\n namespace: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Rpo Daily Window\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rpo-daily-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst rpoDailyWindow = new gcp.gkebackup.BackupPlan(\"rpo_daily_window\", {\n name: \"rpo-daily-window\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n paused: true,\n rpoConfig: {\n targetRpoMinutes: 1440,\n exclusionWindows: [\n {\n startTime: {\n hours: 12,\n },\n duration: \"7200s\",\n daily: true,\n },\n {\n startTime: {\n hours: 8,\n minutes: 40,\n seconds: 1,\n nanos: 100,\n },\n duration: \"3600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 16,\n },\n },\n ],\n },\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rpo-daily-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nrpo_daily_window = gcp.gkebackup.BackupPlan(\"rpo_daily_window\",\n name=\"rpo-daily-window\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy={\n \"backup_delete_lock_days\": 30,\n \"backup_retain_days\": 180,\n },\n backup_schedule={\n \"paused\": True,\n \"rpo_config\": {\n \"target_rpo_minutes\": 1440,\n \"exclusion_windows\": [\n {\n \"start_time\": {\n \"hours\": 12,\n },\n \"duration\": \"7200s\",\n \"daily\": True,\n },\n {\n \"start_time\": {\n \"hours\": 8,\n \"minutes\": 40,\n \"seconds\": 1,\n \"nanos\": 100,\n },\n \"duration\": \"3600s\",\n \"single_occurrence_date\": {\n \"year\": 2024,\n \"month\": 3,\n \"day\": 16,\n },\n },\n ],\n },\n },\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rpo-daily-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var rpoDailyWindow = new Gcp.GkeBackup.BackupPlan(\"rpo_daily_window\", new()\n {\n Name = \"rpo-daily-window\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n Paused = true,\n RpoConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigArgs\n {\n TargetRpoMinutes = 1440,\n ExclusionWindows = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 12,\n },\n Duration = \"7200s\",\n Daily = true,\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 8,\n Minutes = 40,\n Seconds = 1,\n Nanos = 100,\n },\n Duration = \"3600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 16,\n },\n },\n },\n },\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rpo-daily-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"rpo_daily_window\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rpo-daily-window\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tPaused: pulumi.Bool(true),\n\t\t\t\tRpoConfig: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigArgs{\n\t\t\t\t\tTargetRpoMinutes: pulumi.Int(1440),\n\t\t\t\t\tExclusionWindows: gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(12),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"7200s\"),\n\t\t\t\t\t\t\tDaily: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(8),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(40),\n\t\t\t\t\t\t\t\tSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\t\tNanos: pulumi.Int(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(16),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleRpoConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rpo-daily-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var rpoDailyWindow = new BackupPlan(\"rpoDailyWindow\", BackupPlanArgs.builder()\n .name(\"rpo-daily-window\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .paused(true)\n .rpoConfig(BackupPlanBackupScheduleRpoConfigArgs.builder()\n .targetRpoMinutes(1440)\n .exclusionWindows( \n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(12)\n .build())\n .duration(\"7200s\")\n .daily(true)\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(8)\n .minutes(40)\n .seconds(1)\n .nanos(100)\n .build())\n .duration(\"3600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(16)\n .build())\n .build())\n .build())\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rpo-daily-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n rpoDailyWindow:\n type: gcp:gkebackup:BackupPlan\n name: rpo_daily_window\n properties:\n name: rpo-daily-window\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n paused: true\n rpoConfig:\n targetRpoMinutes: 1440\n exclusionWindows:\n - startTime:\n hours: 12\n duration: 7200s\n daily: true\n - startTime:\n hours: 8\n minutes: 40\n seconds: 1\n nanos: 100\n duration: 3600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 16\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Rpo Weekly Window\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rpo-weekly-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst rpoWeeklyWindow = new gcp.gkebackup.BackupPlan(\"rpo_weekly_window\", {\n name: \"rpo-weekly-window\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n paused: true,\n rpoConfig: {\n targetRpoMinutes: 1440,\n exclusionWindows: [\n {\n startTime: {\n hours: 1,\n minutes: 23,\n },\n duration: \"1800s\",\n daysOfWeek: {\n daysOfWeeks: [\n \"MONDAY\",\n \"THURSDAY\",\n ],\n },\n },\n {\n startTime: {\n hours: 12,\n },\n duration: \"3600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 17,\n },\n },\n {\n startTime: {\n hours: 8,\n minutes: 40,\n },\n duration: \"600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 18,\n },\n },\n ],\n },\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rpo-weekly-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nrpo_weekly_window = gcp.gkebackup.BackupPlan(\"rpo_weekly_window\",\n name=\"rpo-weekly-window\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy={\n \"backup_delete_lock_days\": 30,\n \"backup_retain_days\": 180,\n },\n backup_schedule={\n \"paused\": True,\n \"rpo_config\": {\n \"target_rpo_minutes\": 1440,\n \"exclusion_windows\": [\n {\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 23,\n },\n \"duration\": \"1800s\",\n \"days_of_week\": {\n \"days_of_weeks\": [\n \"MONDAY\",\n \"THURSDAY\",\n ],\n },\n },\n {\n \"start_time\": {\n \"hours\": 12,\n },\n \"duration\": \"3600s\",\n \"single_occurrence_date\": {\n \"year\": 2024,\n \"month\": 3,\n \"day\": 17,\n },\n },\n {\n \"start_time\": {\n \"hours\": 8,\n \"minutes\": 40,\n },\n \"duration\": \"600s\",\n \"single_occurrence_date\": {\n \"year\": 2024,\n \"month\": 3,\n \"day\": 18,\n },\n },\n ],\n },\n },\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rpo-weekly-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var rpoWeeklyWindow = new Gcp.GkeBackup.BackupPlan(\"rpo_weekly_window\", new()\n {\n Name = \"rpo-weekly-window\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n Paused = true,\n RpoConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigArgs\n {\n TargetRpoMinutes = 1440,\n ExclusionWindows = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 23,\n },\n Duration = \"1800s\",\n DaysOfWeek = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs\n {\n DaysOfWeeks = new[]\n {\n \"MONDAY\",\n \"THURSDAY\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 12,\n },\n Duration = \"3600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 17,\n },\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 8,\n Minutes = 40,\n },\n Duration = \"600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 18,\n },\n },\n },\n },\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rpo-weekly-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"rpo_weekly_window\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rpo-weekly-window\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tPaused: pulumi.Bool(true),\n\t\t\t\tRpoConfig: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigArgs{\n\t\t\t\t\tTargetRpoMinutes: pulumi.Int(1440),\n\t\t\t\t\tExclusionWindows: gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(23),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"1800s\"),\n\t\t\t\t\t\t\tDaysOfWeek: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs{\n\t\t\t\t\t\t\t\tDaysOfWeeks: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"MONDAY\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"THURSDAY\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(12),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(17),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(8),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(40),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(18),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleRpoConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rpo-weekly-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var rpoWeeklyWindow = new BackupPlan(\"rpoWeeklyWindow\", BackupPlanArgs.builder()\n .name(\"rpo-weekly-window\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .paused(true)\n .rpoConfig(BackupPlanBackupScheduleRpoConfigArgs.builder()\n .targetRpoMinutes(1440)\n .exclusionWindows( \n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(23)\n .build())\n .duration(\"1800s\")\n .daysOfWeek(BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs.builder()\n .daysOfWeeks( \n \"MONDAY\",\n \"THURSDAY\")\n .build())\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(12)\n .build())\n .duration(\"3600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(17)\n .build())\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(8)\n .minutes(40)\n .build())\n .duration(\"600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(18)\n .build())\n .build())\n .build())\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rpo-weekly-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n rpoWeeklyWindow:\n type: gcp:gkebackup:BackupPlan\n name: rpo_weekly_window\n properties:\n name: rpo-weekly-window\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n paused: true\n rpoConfig:\n targetRpoMinutes: 1440\n exclusionWindows:\n - startTime:\n hours: 1\n minutes: 23\n duration: 1800s\n daysOfWeek:\n daysOfWeeks:\n - MONDAY\n - THURSDAY\n - startTime:\n hours: 12\n duration: 3600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 17\n - startTime:\n hours: 8\n minutes: 40\n duration: 600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 18\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupPlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupPlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, BackupPlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default {{location}}/{{name}}\n```\n\n",
+ "gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex": {
+ "description": "## Example Usage\n\n### Gemini Code Repository Index Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.gemini.CodeRepositoryIndex(\"example\", {\n location: \"us-central1\",\n codeRepositoryIndexId: \"\",\n kmsKey: \"projects/projectExample/locations/locationExample/keyRings/keyRingExample/cryptoKeys/cryptoKeyExample\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.gemini.CodeRepositoryIndex(\"example\",\n location=\"us-central1\",\n code_repository_index_id=\"\",\n kms_key=\"projects/projectExample/locations/locationExample/keyRings/keyRingExample/cryptoKeys/cryptoKeyExample\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Gemini.CodeRepositoryIndex(\"example\", new()\n {\n Location = \"us-central1\",\n CodeRepositoryIndexId = \"\",\n KmsKey = \"projects/projectExample/locations/locationExample/keyRings/keyRingExample/cryptoKeys/cryptoKeyExample\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gemini\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gemini.NewCodeRepositoryIndex(ctx, \"example\", \u0026gemini.CodeRepositoryIndexArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tCodeRepositoryIndexId: pulumi.String(\"\"),\n\t\t\tKmsKey: pulumi.String(\"projects/projectExample/locations/locationExample/keyRings/keyRingExample/cryptoKeys/cryptoKeyExample\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gemini.CodeRepositoryIndex;\nimport com.pulumi.gcp.gemini.CodeRepositoryIndexArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new CodeRepositoryIndex(\"example\", CodeRepositoryIndexArgs.builder()\n .location(\"us-central1\")\n .codeRepositoryIndexId(\"\")\n .kmsKey(\"projects/projectExample/locations/locationExample/keyRings/keyRingExample/cryptoKeys/cryptoKeyExample\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:gemini:CodeRepositoryIndex\n properties:\n location: us-central1\n codeRepositoryIndexId: \"\"\n kmsKey: projects/projectExample/locations/locationExample/keyRings/keyRingExample/cryptoKeys/cryptoKeyExample\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCodeRepositoryIndex can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index_id}}`\n\n* `{{project}}/{{location}}/{{code_repository_index_id}}`\n\n* `{{location}}/{{code_repository_index_id}}`\n\nWhen using the `pulumi import` command, CodeRepositoryIndex can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex default projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index_id}}\n```\n\n```sh\n$ pulumi import gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex default {{project}}/{{location}}/{{code_repository_index_id}}\n```\n\n```sh\n$ pulumi import gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex default {{location}}/{{code_repository_index_id}}\n```\n\n",
"properties": {
- "backupConfig": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanBackupConfig:BackupPlanBackupConfig",
- "description": "Defines the configuration of Backups created via this BackupPlan.\nStructure is documented below.\n"
- },
- "backupSchedule": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanBackupSchedule:BackupPlanBackupSchedule",
- "description": "Defines a schedule for automatic Backup creation via this BackupPlan.\nStructure is documented below.\n"
- },
- "cluster": {
+ "codeRepositoryIndexId": {
"type": "string",
- "description": "The source cluster from which Backups will be created via this BackupPlan.\n"
- },
- "deactivated": {
- "type": "boolean",
- "description": "This flag indicates whether this BackupPlan has been deactivated.\nSetting this field to True locks the BackupPlan such that no further updates will be allowed\n(except deletes), including the deactivated field itself. It also prevents any new Backups\nfrom being created via this BackupPlan (including scheduled Backups).\n"
+ "description": "Required. Id of the Code Repository Index.\n\n\n- - -\n"
},
- "description": {
+ "createTime": {
"type": "string",
- "description": "User specified descriptive string for this BackupPlan.\n"
+ "description": "Output only. Create time stamp.\n"
},
"effectiveLabels": {
"type": "object",
@@ -215731,33 +216817,29 @@
"description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
"secret": true
},
- "etag": {
+ "kmsKey": {
"type": "string",
- "description": "etag is used for optimistic concurrency control as a way to help prevent simultaneous\nupdates of a backup plan from overwriting each other. It is strongly suggested that\nsystems make use of the 'etag' in the read-modify-write cycle to perform BackupPlan updates\nin order to avoid race conditions: An etag is returned in the response to backupPlans.get,\nand systems are expected to put that etag in the request to backupPlans.patch or\nbackupPlans.delete to ensure that their change will be applied to the same version of the resource.\n"
+ "description": "Optional. Immutable. Customer-managed encryption key name, in the format\nprojects/*/locations/*/keyRings/*/cryptoKeys/*.\n"
},
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
- "description": "Description: A set of custom labels supplied by the user.\nA list of key-\u003evalue pairs.\nExample: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ "description": "Optional. Labels as key value pairs.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\n\n\n- - -\n"
+ "description": "The location of the Code Repository Index, for example `us-central1`.\n"
},
"name": {
"type": "string",
- "description": "The full name of the BackupPlan Resource.\n"
+ "description": "Immutable. Identifier. Name of Code Repository Index.\n"
},
"project": {
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
},
- "protectedPodCount": {
- "type": "integer",
- "description": "The number of Kubernetes Pods backed up in the last successful Backup created via this BackupPlan.\n"
- },
"pulumiLabels": {
"type": "object",
"additionalProperties": {
@@ -215766,113 +216848,70 @@
"description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
"secret": true
},
- "retentionPolicy": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanRetentionPolicy:BackupPlanRetentionPolicy",
- "description": "RetentionPolicy governs lifecycle of Backups created under this plan.\nStructure is documented below.\n"
- },
"state": {
"type": "string",
- "description": "The State of the BackupPlan.\n"
+ "description": "Output only. Code Repository Index instance State.\nPossible values:\nSTATE_UNSPECIFIED\nCREATING\nACTIVE\nDELETING\nSUSPENDED\n"
},
- "stateReason": {
- "type": "string",
- "description": "Detailed description of why BackupPlan is in its current state.\n"
- },
- "uid": {
+ "updateTime": {
"type": "string",
- "description": "Server generated, unique identifier of UUID format.\n"
+ "description": "Output only. Update time stamp.\n"
}
},
"required": [
- "cluster",
- "deactivated",
+ "codeRepositoryIndexId",
+ "createTime",
"effectiveLabels",
- "etag",
"location",
"name",
"project",
- "protectedPodCount",
"state",
- "stateReason",
"pulumiLabels",
- "uid"
+ "updateTime"
],
"inputProperties": {
- "backupConfig": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanBackupConfig:BackupPlanBackupConfig",
- "description": "Defines the configuration of Backups created via this BackupPlan.\nStructure is documented below.\n"
- },
- "backupSchedule": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanBackupSchedule:BackupPlanBackupSchedule",
- "description": "Defines a schedule for automatic Backup creation via this BackupPlan.\nStructure is documented below.\n"
- },
- "cluster": {
+ "codeRepositoryIndexId": {
"type": "string",
- "description": "The source cluster from which Backups will be created via this BackupPlan.\n",
+ "description": "Required. Id of the Code Repository Index.\n\n\n- - -\n",
"willReplaceOnChanges": true
},
- "deactivated": {
- "type": "boolean",
- "description": "This flag indicates whether this BackupPlan has been deactivated.\nSetting this field to True locks the BackupPlan such that no further updates will be allowed\n(except deletes), including the deactivated field itself. It also prevents any new Backups\nfrom being created via this BackupPlan (including scheduled Backups).\n"
- },
- "description": {
+ "kmsKey": {
"type": "string",
- "description": "User specified descriptive string for this BackupPlan.\n"
+ "description": "Optional. Immutable. Customer-managed encryption key name, in the format\nprojects/*/locations/*/keyRings/*/cryptoKeys/*.\n",
+ "willReplaceOnChanges": true
},
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
- "description": "Description: A set of custom labels supplied by the user.\nA list of key-\u003evalue pairs.\nExample: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ "description": "Optional. Labels as key value pairs.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\n\n\n- - -\n",
- "willReplaceOnChanges": true
- },
- "name": {
- "type": "string",
- "description": "The full name of the BackupPlan Resource.\n",
+ "description": "The location of the Code Repository Index, for example `us-central1`.\n",
"willReplaceOnChanges": true
},
"project": {
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
- },
- "retentionPolicy": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanRetentionPolicy:BackupPlanRetentionPolicy",
- "description": "RetentionPolicy governs lifecycle of Backups created under this plan.\nStructure is documented below.\n"
}
},
"requiredInputs": [
- "cluster",
+ "codeRepositoryIndexId",
"location"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering BackupPlan resources.\n",
+ "description": "Input properties used for looking up and filtering CodeRepositoryIndex resources.\n",
"properties": {
- "backupConfig": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanBackupConfig:BackupPlanBackupConfig",
- "description": "Defines the configuration of Backups created via this BackupPlan.\nStructure is documented below.\n"
- },
- "backupSchedule": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanBackupSchedule:BackupPlanBackupSchedule",
- "description": "Defines a schedule for automatic Backup creation via this BackupPlan.\nStructure is documented below.\n"
- },
- "cluster": {
+ "codeRepositoryIndexId": {
"type": "string",
- "description": "The source cluster from which Backups will be created via this BackupPlan.\n",
+ "description": "Required. Id of the Code Repository Index.\n\n\n- - -\n",
"willReplaceOnChanges": true
},
- "deactivated": {
- "type": "boolean",
- "description": "This flag indicates whether this BackupPlan has been deactivated.\nSetting this field to True locks the BackupPlan such that no further updates will be allowed\n(except deletes), including the deactivated field itself. It also prevents any new Backups\nfrom being created via this BackupPlan (including scheduled Backups).\n"
- },
- "description": {
+ "createTime": {
"type": "string",
- "description": "User specified descriptive string for this BackupPlan.\n"
+ "description": "Output only. Create time stamp.\n"
},
"effectiveLabels": {
"type": "object",
@@ -215882,36 +216921,32 @@
"description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
"secret": true
},
- "etag": {
+ "kmsKey": {
"type": "string",
- "description": "etag is used for optimistic concurrency control as a way to help prevent simultaneous\nupdates of a backup plan from overwriting each other. It is strongly suggested that\nsystems make use of the 'etag' in the read-modify-write cycle to perform BackupPlan updates\nin order to avoid race conditions: An etag is returned in the response to backupPlans.get,\nand systems are expected to put that etag in the request to backupPlans.patch or\nbackupPlans.delete to ensure that their change will be applied to the same version of the resource.\n"
+ "description": "Optional. Immutable. Customer-managed encryption key name, in the format\nprojects/*/locations/*/keyRings/*/cryptoKeys/*.\n",
+ "willReplaceOnChanges": true
},
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
- "description": "Description: A set of custom labels supplied by the user.\nA list of key-\u003evalue pairs.\nExample: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ "description": "Optional. Labels as key value pairs.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\n\n\n- - -\n",
+ "description": "The location of the Code Repository Index, for example `us-central1`.\n",
"willReplaceOnChanges": true
},
"name": {
"type": "string",
- "description": "The full name of the BackupPlan Resource.\n",
- "willReplaceOnChanges": true
+ "description": "Immutable. Identifier. Name of Code Repository Index.\n"
},
"project": {
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
},
- "protectedPodCount": {
- "type": "integer",
- "description": "The number of Kubernetes Pods backed up in the last successful Backup created via this BackupPlan.\n"
- },
"pulumiLabels": {
"type": "object",
"additionalProperties": {
@@ -215920,31 +216955,208 @@
"description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
"secret": true
},
- "retentionPolicy": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanRetentionPolicy:BackupPlanRetentionPolicy",
- "description": "RetentionPolicy governs lifecycle of Backups created under this plan.\nStructure is documented below.\n"
- },
"state": {
"type": "string",
- "description": "The State of the BackupPlan.\n"
+ "description": "Output only. Code Repository Index instance State.\nPossible values:\nSTATE_UNSPECIFIED\nCREATING\nACTIVE\nDELETING\nSUSPENDED\n"
},
- "stateReason": {
+ "updateTime": {
"type": "string",
- "description": "Detailed description of why BackupPlan is in its current state.\n"
+ "description": "Output only. Update time stamp.\n"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:gemini/repositoryGroup:RepositoryGroup": {
+ "description": "## Example Usage\n\n## Import\n\nRepositoryGroup can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}`\n\n* `{{project}}/{{location}}/{{code_repository_index}}/{{repository_group_id}}`\n\n* `{{location}}/{{code_repository_index}}/{{repository_group_id}}`\n\nWhen using the `pulumi import` command, RepositoryGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroup:RepositoryGroup default projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}\n```\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroup:RepositoryGroup default {{project}}/{{location}}/{{code_repository_index}}/{{repository_group_id}}\n```\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroup:RepositoryGroup default {{location}}/{{code_repository_index}}/{{repository_group_id}}\n```\n\n",
+ "properties": {
+ "codeRepositoryIndex": {
+ "type": "string",
+ "description": "Required. Id of the Code Repository Index.\n"
+ },
+ "createTime": {
+ "type": "string",
+ "description": "Output only. Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
},
- "uid": {
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs **Note**: This field is non-authoritative, and will only manage the labels present\nin your configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location of the Code Repository Index, for example `us-central1`.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Immutable. Identifier. name of resource\n"
+ },
+ "project": {
+ "type": "string"
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "repositories": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:gemini/RepositoryGroupRepository:RepositoryGroupRepository"
+ },
+ "description": "Required. List of repositories to group\nStructure is documented below.\n"
+ },
+ "repositoryGroupId": {
+ "type": "string",
+ "description": "Required. Id of the Repository Group.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. Update time stamp\n"
+ }
+ },
+ "required": [
+ "codeRepositoryIndex",
+ "createTime",
+ "effectiveLabels",
+ "location",
+ "name",
+ "project",
+ "repositories",
+ "repositoryGroupId",
+ "pulumiLabels",
+ "updateTime"
+ ],
+ "inputProperties": {
+ "codeRepositoryIndex": {
+ "type": "string",
+ "description": "Required. Id of the Code Repository Index.\n",
+ "willReplaceOnChanges": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs **Note**: This field is non-authoritative, and will only manage the labels present\nin your configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location of the Code Repository Index, for example `us-central1`.\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "repositories": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:gemini/RepositoryGroupRepository:RepositoryGroupRepository"
+ },
+ "description": "Required. List of repositories to group\nStructure is documented below.\n"
+ },
+ "repositoryGroupId": {
+ "type": "string",
+ "description": "Required. Id of the Repository Group.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "codeRepositoryIndex",
+ "location",
+ "repositories",
+ "repositoryGroupId"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering RepositoryGroup resources.\n",
+ "properties": {
+ "codeRepositoryIndex": {
"type": "string",
- "description": "Server generated, unique identifier of UUID format.\n"
+ "description": "Required. Id of the Code Repository Index.\n",
+ "willReplaceOnChanges": true
+ },
+ "createTime": {
+ "type": "string",
+ "description": "Output only. Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs **Note**: This field is non-authoritative, and will only manage the labels present\nin your configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location of the Code Repository Index, for example `us-central1`.\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Immutable. Identifier. name of resource\n"
+ },
+ "project": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "repositories": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:gemini/RepositoryGroupRepository:RepositoryGroupRepository"
+ },
+ "description": "Required. List of repositories to group\nStructure is documented below.\n"
+ },
+ "repositoryGroupId": {
+ "type": "string",
+ "description": "Required. Id of the Repository Group.\n",
+ "willReplaceOnChanges": true
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. Update time stamp\n"
}
},
"type": "object"
}
},
- "gcp:gkebackup/backupPlanIamBinding:BackupPlanIamBinding": {
- "description": "Three different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE BackupPlan\nThree different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE backupplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamBinding:BackupPlanIamBinding editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamBinding:BackupPlanIamBinding editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamBinding:BackupPlanIamBinding editor projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding": {
+ "description": "\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}\n\n* {{project}}/{{location}}/{{code_repository_index}}/{{repository_group_id}}\n\n* {{location}}/{{code_repository_index}}/{{repository_group_id}}\n\n* {{repository_group_id}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nGemini for Google Cloud repositorygroup IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding editor \"projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding editor \"projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding editor projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
"properties": {
+ "codeRepositoryIndex": {
+ "type": "string"
+ },
"condition": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanIamBindingCondition:BackupPlanIamBindingCondition"
+ "$ref": "#/types/gcp:gemini/RepositoryGroupIamBindingCondition:RepositoryGroupIamBindingCondition"
},
"etag": {
"type": "string",
@@ -215952,7 +217164,7 @@
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
},
"members": {
"type": "array",
@@ -215961,35 +217173,39 @@
},
"description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n"
},
- "name": {
- "type": "string",
- "description": "Used to find the parent resource to bind the IAM policy to\n"
- },
"project": {
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n"
},
+ "repositoryGroupId": {
+ "type": "string"
+ },
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ "description": "The role that should be applied. Only one\n`gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
}
},
"required": [
+ "codeRepositoryIndex",
"etag",
"location",
"members",
- "name",
"project",
+ "repositoryGroupId",
"role"
],
"inputProperties": {
+ "codeRepositoryIndex": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
"condition": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanIamBindingCondition:BackupPlanIamBindingCondition",
+ "$ref": "#/types/gcp:gemini/RepositoryGroupIamBindingCondition:RepositoryGroupIamBindingCondition",
"willReplaceOnChanges": true
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"members": {
@@ -215999,31 +217215,36 @@
},
"description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n"
},
- "name": {
+ "project": {
"type": "string",
- "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
},
- "project": {
+ "repositoryGroupId": {
"type": "string",
- "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
"requiredInputs": [
+ "codeRepositoryIndex",
"members",
+ "repositoryGroupId",
"role"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering BackupPlanIamBinding resources.\n",
+ "description": "Input properties used for looking up and filtering RepositoryGroupIamBinding resources.\n",
"properties": {
+ "codeRepositoryIndex": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
"condition": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanIamBindingCondition:BackupPlanIamBindingCondition",
+ "$ref": "#/types/gcp:gemini/RepositoryGroupIamBindingCondition:RepositoryGroupIamBindingCondition",
"willReplaceOnChanges": true
},
"etag": {
@@ -216032,7 +217253,7 @@
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"members": {
@@ -216042,30 +217263,32 @@
},
"description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n"
},
- "name": {
+ "project": {
"type": "string",
- "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
},
- "project": {
+ "repositoryGroupId": {
"type": "string",
- "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
"type": "object"
}
},
- "gcp:gkebackup/backupPlanIamMember:BackupPlanIamMember": {
- "description": "Three different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE BackupPlan\nThree different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE backupplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamMember:BackupPlanIamMember editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamMember:BackupPlanIamMember editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamMember:BackupPlanIamMember editor projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember": {
+ "description": "\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}\n\n* {{project}}/{{location}}/{{code_repository_index}}/{{repository_group_id}}\n\n* {{location}}/{{code_repository_index}}/{{repository_group_id}}\n\n* {{repository_group_id}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nGemini for Google Cloud repositorygroup IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember editor \"projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember editor \"projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember editor projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
"properties": {
+ "codeRepositoryIndex": {
+ "type": "string"
+ },
"condition": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanIamMemberCondition:BackupPlanIamMemberCondition"
+ "$ref": "#/types/gcp:gemini/RepositoryGroupIamMemberCondition:RepositoryGroupIamMemberCondition"
},
"etag": {
"type": "string",
@@ -216073,41 +217296,45 @@
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
},
"member": {
"type": "string",
"description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n"
},
- "name": {
- "type": "string",
- "description": "Used to find the parent resource to bind the IAM policy to\n"
- },
"project": {
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n"
},
+ "repositoryGroupId": {
+ "type": "string"
+ },
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ "description": "The role that should be applied. Only one\n`gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
}
},
"required": [
+ "codeRepositoryIndex",
"etag",
"location",
"member",
- "name",
"project",
+ "repositoryGroupId",
"role"
],
"inputProperties": {
+ "codeRepositoryIndex": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
"condition": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanIamMemberCondition:BackupPlanIamMemberCondition",
+ "$ref": "#/types/gcp:gemini/RepositoryGroupIamMemberCondition:RepositoryGroupIamMemberCondition",
"willReplaceOnChanges": true
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"member": {
@@ -216115,31 +217342,36 @@
"description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n",
"willReplaceOnChanges": true
},
- "name": {
+ "project": {
"type": "string",
- "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
},
- "project": {
+ "repositoryGroupId": {
"type": "string",
- "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
"requiredInputs": [
+ "codeRepositoryIndex",
"member",
+ "repositoryGroupId",
"role"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering BackupPlanIamMember resources.\n",
+ "description": "Input properties used for looking up and filtering RepositoryGroupIamMember resources.\n",
"properties": {
+ "codeRepositoryIndex": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
"condition": {
- "$ref": "#/types/gcp:gkebackup/BackupPlanIamMemberCondition:BackupPlanIamMemberCondition",
+ "$ref": "#/types/gcp:gemini/RepositoryGroupIamMemberCondition:RepositoryGroupIamMemberCondition",
"willReplaceOnChanges": true
},
"etag": {
@@ -216148,7 +217380,7 @@
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"member": {
@@ -216156,39 +217388,37 @@
"description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n",
"willReplaceOnChanges": true
},
- "name": {
+ "project": {
"type": "string",
- "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
},
- "project": {
+ "repositoryGroupId": {
"type": "string",
- "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
"type": "object"
}
},
- "gcp:gkebackup/backupPlanIamPolicy:BackupPlanIamPolicy": {
- "description": "Three different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE BackupPlan\nThree different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE backupplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamPolicy:BackupPlanIamPolicy editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamPolicy:BackupPlanIamPolicy editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamPolicy:BackupPlanIamPolicy editor projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy": {
+ "description": "\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}\n\n* {{project}}/{{location}}/{{code_repository_index}}/{{repository_group_id}}\n\n* {{location}}/{{code_repository_index}}/{{repository_group_id}}\n\n* {{repository_group_id}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nGemini for Google Cloud repositorygroup IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy editor \"projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy editor \"projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy editor projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
"properties": {
+ "codeRepositoryIndex": {
+ "type": "string"
+ },
"etag": {
"type": "string",
"description": "(Computed) The etag of the IAM policy.\n"
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
- },
- "name": {
- "type": "string",
- "description": "Used to find the parent resource to bind the IAM policy to\n"
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
},
"policyData": {
"type": "string",
@@ -216197,24 +217427,27 @@
"project": {
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n"
+ },
+ "repositoryGroupId": {
+ "type": "string"
}
},
"required": [
+ "codeRepositoryIndex",
"etag",
"location",
- "name",
"policyData",
- "project"
+ "project",
+ "repositoryGroupId"
],
"inputProperties": {
- "location": {
+ "codeRepositoryIndex": {
"type": "string",
- "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
- "name": {
+ "location": {
"type": "string",
- "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"policyData": {
@@ -216225,26 +217458,31 @@
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
+ },
+ "repositoryGroupId": {
+ "type": "string",
+ "willReplaceOnChanges": true
}
},
"requiredInputs": [
- "policyData"
+ "codeRepositoryIndex",
+ "policyData",
+ "repositoryGroupId"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering BackupPlanIamPolicy resources.\n",
+ "description": "Input properties used for looking up and filtering RepositoryGroupIamPolicy resources.\n",
"properties": {
+ "codeRepositoryIndex": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
"etag": {
"type": "string",
"description": "(Computed) The etag of the IAM policy.\n"
},
"location": {
"type": "string",
- "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
- "willReplaceOnChanges": true
- },
- "name": {
- "type": "string",
- "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"policyData": {
@@ -216255,25 +217493,37 @@
"type": "string",
"description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
"willReplaceOnChanges": true
+ },
+ "repositoryGroupId": {
+ "type": "string",
+ "willReplaceOnChanges": true
}
},
"type": "object"
}
},
- "gcp:gkebackup/restorePlan:RestorePlan": {
- "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"all_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"selected_namespaces\": {\n \"namespaces\": [\"my-ns\"],\n },\n \"namespaced_resource_restore_mode\": \"DELETE_AND_RESTORE\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"selected_group_kinds\": [\n {\n \"resource_group\": \"apiextension.k8s.io\",\n \"resource_kind\": \"CustomResourceDefinition\",\n },\n {\n \"resource_group\": \"storage.k8s.io\",\n \"resource_kind\": \"StorageClass\",\n },\n ],\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"selected_applications\": {\n \"namespaced_names\": [{\n \"name\": \"my-app\",\n \"namespace\": \"my-ns\",\n }],\n },\n \"namespaced_resource_restore_mode\": \"DELETE_AND_RESTORE\",\n \"volume_data_restore_policy\": \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"no_group_kinds\": True,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"no_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"selected_namespaces\": {\n \"namespaces\": [\"ns1\"],\n },\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"no_group_kinds\": True,\n },\n \"transformation_rules\": [\n {\n \"description\": \"rename namespace from ns1 to ns2\",\n \"resource_filter\": {\n \"group_kinds\": [{\n \"resource_kind\": \"Namespace\",\n }],\n \"json_path\": \".metadata[?(@.name == 'ns1')]\",\n },\n \"field_actions\": [{\n \"op\": \"REPLACE\",\n \"path\": \"/metadata/name\",\n \"value\": \"ns2\",\n }],\n },\n {\n \"description\": \"move all resources from ns1 to ns2\",\n \"resource_filter\": {\n \"namespaces\": [\"ns1\"],\n },\n \"field_actions\": [{\n \"op\": \"REPLACE\",\n \"path\": \"/metadata/namespace\",\n \"value\": \"ns2\",\n }],\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"excluded_namespaces\": {\n \"namespaces\": [\"my-ns\"],\n },\n \"namespaced_resource_restore_mode\": \"DELETE_AND_RESTORE\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"excluded_group_kinds\": [{\n \"resource_group\": \"apiextension.k8s.io\",\n \"resource_kind\": \"CustomResourceDefinition\",\n }],\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n \"transformation_rules\": [{\n \"description\": \"Copy environment variables from the nginx container to the install init container.\",\n \"resource_filter\": {\n \"group_kinds\": [{\n \"resource_kind\": \"Pod\",\n \"resource_group\": \"\",\n }],\n \"json_path\": \".metadata[?(@.name == 'nginx')]\",\n },\n \"field_actions\": [{\n \"op\": \"COPY\",\n \"path\": \"/spec/initContainers/0/env\",\n \"from_path\": \"/spec/containers/0/env\",\n }],\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup: \"\"\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Gitops Mode\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"gitops-mode-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"gitops-mode\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst gitopsMode = new gcp.gkebackup.RestorePlan(\"gitops_mode\", {\n name: \"gitops-mode\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"MERGE_SKIP_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"gitops-mode-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"gitops-mode\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\ngitops_mode = gcp.gkebackup.RestorePlan(\"gitops_mode\",\n name=\"gitops-mode\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"all_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"MERGE_SKIP_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"gitops-mode-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"gitops-mode\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var gitopsMode = new Gcp.GkeBackup.RestorePlan(\"gitops_mode\", new()\n {\n Name = \"gitops-mode\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"MERGE_SKIP_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"gitops-mode-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"gitops_mode\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"MERGE_SKIP_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"gitops-mode-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"gitops-mode\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var gitopsMode = new RestorePlan(\"gitopsMode\", RestorePlanArgs.builder()\n .name(\"gitops-mode\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"MERGE_SKIP_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: gitops-mode-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: gitops-mode\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n gitopsMode:\n type: gcp:gkebackup:RestorePlan\n name: gitops_mode\n properties:\n name: gitops-mode\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: MERGE_SKIP_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Restore Order\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-order-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-order\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst restoreOrder = new gcp.gkebackup.RestorePlan(\"restore_order\", {\n name: \"restore-order\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n restoreOrder: {\n groupKindDependencies: [\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindA\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n },\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindC\",\n },\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-order-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-order\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nrestore_order = gcp.gkebackup.RestorePlan(\"restore_order\",\n name=\"restore-order\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"all_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n \"restore_order\": {\n \"group_kind_dependencies\": [\n {\n \"satisfying\": {\n \"resource_group\": \"stable.example.com\",\n \"resource_kind\": \"kindA\",\n },\n \"requiring\": {\n \"resource_group\": \"stable.example.com\",\n \"resource_kind\": \"kindB\",\n },\n },\n {\n \"satisfying\": {\n \"resource_group\": \"stable.example.com\",\n \"resource_kind\": \"kindB\",\n },\n \"requiring\": {\n \"resource_group\": \"stable.example.com\",\n \"resource_kind\": \"kindC\",\n },\n },\n ],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-order-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-order\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var restoreOrder = new Gcp.GkeBackup.RestorePlan(\"restore_order\", new()\n {\n Name = \"restore-order\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs\n {\n GroupKindDependencies = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindA\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindC\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-order-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"restore_order\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tRestoreOrder: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{\n\t\t\t\t\tGroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindA\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindC\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-order-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-order\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var restoreOrder = new RestorePlan(\"restoreOrder\", RestorePlanArgs.builder()\n .name(\"restore-order\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()\n .groupKindDependencies( \n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindA\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .build(),\n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindC\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-order-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-order\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n restoreOrder:\n type: gcp:gkebackup:RestorePlan\n name: restore_order\n properties:\n name: restore-order\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n restoreOrder:\n groupKindDependencies:\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindA\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindB\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindB\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Volume Res\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"volume-res-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"volume-res\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst volumeRes = new gcp.gkebackup.RestorePlan(\"volume_res\", {\n name: \"volume-res\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"NO_VOLUME_DATA_RESTORATION\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n volumeDataRestorePolicyBindings: [{\n policy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volumeType: \"GCE_PERSISTENT_DISK\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"volume-res-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"volume-res\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nvolume_res = gcp.gkebackup.RestorePlan(\"volume_res\",\n name=\"volume-res\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"all_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"NO_VOLUME_DATA_RESTORATION\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n \"volume_data_restore_policy_bindings\": [{\n \"policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"volume_type\": \"GCE_PERSISTENT_DISK\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"volume-res-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"volume-res\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var volumeRes = new Gcp.GkeBackup.RestorePlan(\"volume_res\", new()\n {\n Name = \"volume-res\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"NO_VOLUME_DATA_RESTORATION\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n VolumeDataRestorePolicyBindings = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs\n {\n Policy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n VolumeType = \"GCE_PERSISTENT_DISK\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"volume-res-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"volume_res\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"NO_VOLUME_DATA_RESTORATION\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tVolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{\n\t\t\t\t\t\tPolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\t\t\tVolumeType: pulumi.String(\"GCE_PERSISTENT_DISK\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"volume-res-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"volume-res\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var volumeRes = new RestorePlan(\"volumeRes\", RestorePlanArgs.builder()\n .name(\"volume-res\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"NO_VOLUME_DATA_RESTORATION\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()\n .policy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .volumeType(\"GCE_PERSISTENT_DISK\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: volume-res-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: volume-res\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n volumeRes:\n type: gcp:gkebackup:RestorePlan\n name: volume_res\n properties:\n name: volume-res\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: NO_VOLUME_DATA_RESTORATION\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n volumeDataRestorePolicyBindings:\n - policy: RESTORE_VOLUME_DATA_FROM_BACKUP\n volumeType: GCE_PERSISTENT_DISK\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default {{location}}/{{name}}\n```\n\n",
+ "gcp:gkebackup/backupPlan:BackupPlan": {
+ "description": "Represents a Backup Plan instance.\n\n\nTo get more information about BackupPlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.backupPlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Backupplan Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"basic-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"basic-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"basic-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"basic-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"basic-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: basic-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Autopilot\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"autopilot-cluster\",\n location: \"us-central1\",\n enableAutopilot: true,\n ipAllocationPolicy: {},\n releaseChannel: {\n channel: \"RAPID\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst autopilot = new gcp.gkebackup.BackupPlan(\"autopilot\", {\n name: \"autopilot-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"autopilot-cluster\",\n location=\"us-central1\",\n enable_autopilot=True,\n ip_allocation_policy={},\n release_channel={\n \"channel\": \"RAPID\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nautopilot = gcp.gkebackup.BackupPlan(\"autopilot\",\n name=\"autopilot-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"autopilot-cluster\",\n Location = \"us-central1\",\n EnableAutopilot = true,\n IpAllocationPolicy = null,\n ReleaseChannel = new Gcp.Container.Inputs.ClusterReleaseChannelArgs\n {\n Channel = \"RAPID\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var autopilot = new Gcp.GkeBackup.BackupPlan(\"autopilot\", new()\n {\n Name = \"autopilot-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"autopilot-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tEnableAutopilot: pulumi.Bool(true),\n\t\t\tIpAllocationPolicy: \u0026container.ClusterIpAllocationPolicyArgs{},\n\t\t\tReleaseChannel: \u0026container.ClusterReleaseChannelArgs{\n\t\t\t\tChannel: pulumi.String(\"RAPID\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"autopilot\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"autopilot-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterIpAllocationPolicyArgs;\nimport com.pulumi.gcp.container.inputs.ClusterReleaseChannelArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"autopilot-cluster\")\n .location(\"us-central1\")\n .enableAutopilot(true)\n .ipAllocationPolicy()\n .releaseChannel(ClusterReleaseChannelArgs.builder()\n .channel(\"RAPID\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var autopilot = new BackupPlan(\"autopilot\", BackupPlanArgs.builder()\n .name(\"autopilot-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: autopilot-cluster\n location: us-central1\n enableAutopilot: true\n ipAllocationPolicy: {}\n releaseChannel:\n channel: RAPID\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n autopilot:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: autopilot-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"cmek-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"backup-key\",\n location: \"us-central1\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"backup-key\",\n keyRing: keyRing.id,\n});\nconst cmek = new gcp.gkebackup.BackupPlan(\"cmek\", {\n name: \"cmek-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n selectedNamespaces: {\n namespaces: [\n \"default\",\n \"test\",\n ],\n },\n encryptionKey: {\n gcpKmsEncryptionKey: cryptoKey.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"cmek-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"backup-key\",\n location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"backup-key\",\n key_ring=key_ring.id)\ncmek = gcp.gkebackup.BackupPlan(\"cmek\",\n name=\"cmek-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"selected_namespaces\": {\n \"namespaces\": [\n \"default\",\n \"test\",\n ],\n },\n \"encryption_key\": {\n \"gcp_kms_encryption_key\": crypto_key.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"cmek-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"backup-key\",\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"backup-key\",\n KeyRing = keyRing.Id,\n });\n\n var cmek = new Gcp.GkeBackup.BackupPlan(\"cmek\", new()\n {\n Name = \"cmek-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"default\",\n \"test\",\n },\n },\n EncryptionKey = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigEncryptionKeyArgs\n {\n GcpKmsEncryptionKey = cryptoKey.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"cmek-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"backup-key\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"backup-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"cmek\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"cmek-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.BackupPlanBackupConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"default\"),\n\t\t\t\t\t\tpulumi.String(\"test\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEncryptionKey: \u0026gkebackup.BackupPlanBackupConfigEncryptionKeyArgs{\n\t\t\t\t\tGcpKmsEncryptionKey: cryptoKey.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigEncryptionKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"cmek-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder()\n .name(\"backup-key\")\n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder()\n .name(\"backup-key\")\n .keyRing(keyRing.id())\n .build());\n\n var cmek = new BackupPlan(\"cmek\", BackupPlanArgs.builder()\n .name(\"cmek-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .selectedNamespaces(BackupPlanBackupConfigSelectedNamespacesArgs.builder()\n .namespaces( \n \"default\",\n \"test\")\n .build())\n .encryptionKey(BackupPlanBackupConfigEncryptionKeyArgs.builder()\n .gcpKmsEncryptionKey(cryptoKey.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: cmek-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n cmek:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: cmek-plan\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n selectedNamespaces:\n namespaces:\n - default\n - test\n encryptionKey:\n gcpKmsEncryptionKey: ${cryptoKey.id}\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: backup-key\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: backup-key\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"full-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst full = new gcp.gkebackup.BackupPlan(\"full\", {\n name: \"full-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n cronSchedule: \"0 9 * * 1\",\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n selectedApplications: {\n namespacedNames: [\n {\n name: \"app1\",\n namespace: \"ns1\",\n },\n {\n name: \"app2\",\n namespace: \"ns2\",\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"full-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nfull = gcp.gkebackup.BackupPlan(\"full\",\n name=\"full-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy={\n \"backup_delete_lock_days\": 30,\n \"backup_retain_days\": 180,\n },\n backup_schedule={\n \"cron_schedule\": \"0 9 * * 1\",\n },\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"selected_applications\": {\n \"namespaced_names\": [\n {\n \"name\": \"app1\",\n \"namespace\": \"ns1\",\n },\n {\n \"name\": \"app2\",\n \"namespace\": \"ns2\",\n },\n ],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"full-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var full = new Gcp.GkeBackup.BackupPlan(\"full\", new()\n {\n Name = \"full-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n CronSchedule = \"0 9 * * 1\",\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n SelectedApplications = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app1\",\n Namespace = \"ns1\",\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app2\",\n Namespace = \"ns2\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"full-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"full\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"full-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tCronSchedule: pulumi.String(\"0 9 * * 1\"),\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tSelectedApplications: \u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app1\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app2\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedApplicationsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"full-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var full = new BackupPlan(\"full\", BackupPlanArgs.builder()\n .name(\"full-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .cronSchedule(\"0 9 * * 1\")\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .selectedApplications(BackupPlanBackupConfigSelectedApplicationsArgs.builder()\n .namespacedNames( \n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app1\")\n .namespace(\"ns1\")\n .build(),\n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app2\")\n .namespace(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: full-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n full:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: full-plan\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n cronSchedule: 0 9 * * 1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n selectedApplications:\n namespacedNames:\n - name: app1\n namespace: ns1\n - name: app2\n namespace: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Permissive\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"permissive-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst permissive = new gcp.gkebackup.BackupPlan(\"permissive\", {\n name: \"permissive-plan\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n cronSchedule: \"0 9 * * 1\",\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n permissiveMode: true,\n selectedApplications: {\n namespacedNames: [\n {\n name: \"app1\",\n namespace: \"ns1\",\n },\n {\n name: \"app2\",\n namespace: \"ns2\",\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"permissive-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\npermissive = gcp.gkebackup.BackupPlan(\"permissive\",\n name=\"permissive-plan\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy={\n \"backup_delete_lock_days\": 30,\n \"backup_retain_days\": 180,\n },\n backup_schedule={\n \"cron_schedule\": \"0 9 * * 1\",\n },\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"permissive_mode\": True,\n \"selected_applications\": {\n \"namespaced_names\": [\n {\n \"name\": \"app1\",\n \"namespace\": \"ns1\",\n },\n {\n \"name\": \"app2\",\n \"namespace\": \"ns2\",\n },\n ],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"permissive-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var permissive = new Gcp.GkeBackup.BackupPlan(\"permissive\", new()\n {\n Name = \"permissive-plan\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n CronSchedule = \"0 9 * * 1\",\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n PermissiveMode = true,\n SelectedApplications = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app1\",\n Namespace = \"ns1\",\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"app2\",\n Namespace = \"ns2\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"permissive-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"permissive\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"permissive-plan\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tCronSchedule: pulumi.String(\"0 9 * * 1\"),\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tPermissiveMode: pulumi.Bool(true),\n\t\t\t\tSelectedApplications: \u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app1\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"app2\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigSelectedApplicationsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"permissive-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var permissive = new BackupPlan(\"permissive\", BackupPlanArgs.builder()\n .name(\"permissive-plan\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .cronSchedule(\"0 9 * * 1\")\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .permissiveMode(true)\n .selectedApplications(BackupPlanBackupConfigSelectedApplicationsArgs.builder()\n .namespacedNames( \n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app1\")\n .namespace(\"ns1\")\n .build(),\n BackupPlanBackupConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"app2\")\n .namespace(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: permissive-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n permissive:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: permissive-plan\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n cronSchedule: 0 9 * * 1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n permissiveMode: true\n selectedApplications:\n namespacedNames:\n - name: app1\n namespace: ns1\n - name: app2\n namespace: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Rpo Daily Window\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rpo-daily-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst rpoDailyWindow = new gcp.gkebackup.BackupPlan(\"rpo_daily_window\", {\n name: \"rpo-daily-window\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n paused: true,\n rpoConfig: {\n targetRpoMinutes: 1440,\n exclusionWindows: [\n {\n startTime: {\n hours: 12,\n },\n duration: \"7200s\",\n daily: true,\n },\n {\n startTime: {\n hours: 8,\n minutes: 40,\n seconds: 1,\n nanos: 100,\n },\n duration: \"3600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 16,\n },\n },\n ],\n },\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rpo-daily-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nrpo_daily_window = gcp.gkebackup.BackupPlan(\"rpo_daily_window\",\n name=\"rpo-daily-window\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy={\n \"backup_delete_lock_days\": 30,\n \"backup_retain_days\": 180,\n },\n backup_schedule={\n \"paused\": True,\n \"rpo_config\": {\n \"target_rpo_minutes\": 1440,\n \"exclusion_windows\": [\n {\n \"start_time\": {\n \"hours\": 12,\n },\n \"duration\": \"7200s\",\n \"daily\": True,\n },\n {\n \"start_time\": {\n \"hours\": 8,\n \"minutes\": 40,\n \"seconds\": 1,\n \"nanos\": 100,\n },\n \"duration\": \"3600s\",\n \"single_occurrence_date\": {\n \"year\": 2024,\n \"month\": 3,\n \"day\": 16,\n },\n },\n ],\n },\n },\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rpo-daily-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var rpoDailyWindow = new Gcp.GkeBackup.BackupPlan(\"rpo_daily_window\", new()\n {\n Name = \"rpo-daily-window\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n Paused = true,\n RpoConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigArgs\n {\n TargetRpoMinutes = 1440,\n ExclusionWindows = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 12,\n },\n Duration = \"7200s\",\n Daily = true,\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 8,\n Minutes = 40,\n Seconds = 1,\n Nanos = 100,\n },\n Duration = \"3600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 16,\n },\n },\n },\n },\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rpo-daily-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"rpo_daily_window\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rpo-daily-window\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tPaused: pulumi.Bool(true),\n\t\t\t\tRpoConfig: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigArgs{\n\t\t\t\t\tTargetRpoMinutes: pulumi.Int(1440),\n\t\t\t\t\tExclusionWindows: gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(12),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"7200s\"),\n\t\t\t\t\t\t\tDaily: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(8),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(40),\n\t\t\t\t\t\t\t\tSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\t\tNanos: pulumi.Int(100),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(16),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleRpoConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rpo-daily-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var rpoDailyWindow = new BackupPlan(\"rpoDailyWindow\", BackupPlanArgs.builder()\n .name(\"rpo-daily-window\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .paused(true)\n .rpoConfig(BackupPlanBackupScheduleRpoConfigArgs.builder()\n .targetRpoMinutes(1440)\n .exclusionWindows( \n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(12)\n .build())\n .duration(\"7200s\")\n .daily(true)\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(8)\n .minutes(40)\n .seconds(1)\n .nanos(100)\n .build())\n .duration(\"3600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(16)\n .build())\n .build())\n .build())\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rpo-daily-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n rpoDailyWindow:\n type: gcp:gkebackup:BackupPlan\n name: rpo_daily_window\n properties:\n name: rpo-daily-window\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n paused: true\n rpoConfig:\n targetRpoMinutes: 1440\n exclusionWindows:\n - startTime:\n hours: 12\n duration: 7200s\n daily: true\n - startTime:\n hours: 8\n minutes: 40\n seconds: 1\n nanos: 100\n duration: 3600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 16\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Backupplan Rpo Weekly Window\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rpo-weekly-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst rpoWeeklyWindow = new gcp.gkebackup.BackupPlan(\"rpo_weekly_window\", {\n name: \"rpo-weekly-window\",\n cluster: primary.id,\n location: \"us-central1\",\n retentionPolicy: {\n backupDeleteLockDays: 30,\n backupRetainDays: 180,\n },\n backupSchedule: {\n paused: true,\n rpoConfig: {\n targetRpoMinutes: 1440,\n exclusionWindows: [\n {\n startTime: {\n hours: 1,\n minutes: 23,\n },\n duration: \"1800s\",\n daysOfWeek: {\n daysOfWeeks: [\n \"MONDAY\",\n \"THURSDAY\",\n ],\n },\n },\n {\n startTime: {\n hours: 12,\n },\n duration: \"3600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 17,\n },\n },\n {\n startTime: {\n hours: 8,\n minutes: 40,\n },\n duration: \"600s\",\n singleOccurrenceDate: {\n year: 2024,\n month: 3,\n day: 18,\n },\n },\n ],\n },\n },\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rpo-weekly-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nrpo_weekly_window = gcp.gkebackup.BackupPlan(\"rpo_weekly_window\",\n name=\"rpo-weekly-window\",\n cluster=primary.id,\n location=\"us-central1\",\n retention_policy={\n \"backup_delete_lock_days\": 30,\n \"backup_retain_days\": 180,\n },\n backup_schedule={\n \"paused\": True,\n \"rpo_config\": {\n \"target_rpo_minutes\": 1440,\n \"exclusion_windows\": [\n {\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 23,\n },\n \"duration\": \"1800s\",\n \"days_of_week\": {\n \"days_of_weeks\": [\n \"MONDAY\",\n \"THURSDAY\",\n ],\n },\n },\n {\n \"start_time\": {\n \"hours\": 12,\n },\n \"duration\": \"3600s\",\n \"single_occurrence_date\": {\n \"year\": 2024,\n \"month\": 3,\n \"day\": 17,\n },\n },\n {\n \"start_time\": {\n \"hours\": 8,\n \"minutes\": 40,\n },\n \"duration\": \"600s\",\n \"single_occurrence_date\": {\n \"year\": 2024,\n \"month\": 3,\n \"day\": 18,\n },\n },\n ],\n },\n },\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rpo-weekly-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var rpoWeeklyWindow = new Gcp.GkeBackup.BackupPlan(\"rpo_weekly_window\", new()\n {\n Name = \"rpo-weekly-window\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n RetentionPolicy = new Gcp.GkeBackup.Inputs.BackupPlanRetentionPolicyArgs\n {\n BackupDeleteLockDays = 30,\n BackupRetainDays = 180,\n },\n BackupSchedule = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleArgs\n {\n Paused = true,\n RpoConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigArgs\n {\n TargetRpoMinutes = 1440,\n ExclusionWindows = new[]\n {\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 23,\n },\n Duration = \"1800s\",\n DaysOfWeek = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs\n {\n DaysOfWeeks = new[]\n {\n \"MONDAY\",\n \"THURSDAY\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 12,\n },\n Duration = \"3600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 17,\n },\n },\n new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs\n {\n StartTime = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs\n {\n Hours = 8,\n Minutes = 40,\n },\n Duration = \"600s\",\n SingleOccurrenceDate = new Gcp.GkeBackup.Inputs.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs\n {\n Year = 2024,\n Month = 3,\n Day = 18,\n },\n },\n },\n },\n },\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rpo-weekly-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlan(ctx, \"rpo_weekly_window\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rpo-weekly-window\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionPolicy: \u0026gkebackup.BackupPlanRetentionPolicyArgs{\n\t\t\t\tBackupDeleteLockDays: pulumi.Int(30),\n\t\t\t\tBackupRetainDays: pulumi.Int(180),\n\t\t\t},\n\t\t\tBackupSchedule: \u0026gkebackup.BackupPlanBackupScheduleArgs{\n\t\t\t\tPaused: pulumi.Bool(true),\n\t\t\t\tRpoConfig: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigArgs{\n\t\t\t\t\tTargetRpoMinutes: pulumi.Int(1440),\n\t\t\t\t\tExclusionWindows: gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArray{\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(23),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"1800s\"),\n\t\t\t\t\t\t\tDaysOfWeek: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs{\n\t\t\t\t\t\t\t\tDaysOfWeeks: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"MONDAY\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"THURSDAY\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(12),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(17),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowArgs{\n\t\t\t\t\t\t\tStartTime: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs{\n\t\t\t\t\t\t\t\tHours: pulumi.Int(8),\n\t\t\t\t\t\t\t\tMinutes: pulumi.Int(40),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDuration: pulumi.String(\"600s\"),\n\t\t\t\t\t\t\tSingleOccurrenceDate: \u0026gkebackup.BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs{\n\t\t\t\t\t\t\t\tYear: pulumi.Int(2024),\n\t\t\t\t\t\t\t\tMonth: pulumi.Int(3),\n\t\t\t\t\t\t\t\tDay: pulumi.Int(18),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanRetentionPolicyArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupScheduleRpoConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rpo-weekly-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var rpoWeeklyWindow = new BackupPlan(\"rpoWeeklyWindow\", BackupPlanArgs.builder()\n .name(\"rpo-weekly-window\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .retentionPolicy(BackupPlanRetentionPolicyArgs.builder()\n .backupDeleteLockDays(30)\n .backupRetainDays(180)\n .build())\n .backupSchedule(BackupPlanBackupScheduleArgs.builder()\n .paused(true)\n .rpoConfig(BackupPlanBackupScheduleRpoConfigArgs.builder()\n .targetRpoMinutes(1440)\n .exclusionWindows( \n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(23)\n .build())\n .duration(\"1800s\")\n .daysOfWeek(BackupPlanBackupScheduleRpoConfigExclusionWindowDaysOfWeekArgs.builder()\n .daysOfWeeks( \n \"MONDAY\",\n \"THURSDAY\")\n .build())\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(12)\n .build())\n .duration(\"3600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(17)\n .build())\n .build(),\n BackupPlanBackupScheduleRpoConfigExclusionWindowArgs.builder()\n .startTime(BackupPlanBackupScheduleRpoConfigExclusionWindowStartTimeArgs.builder()\n .hours(8)\n .minutes(40)\n .build())\n .duration(\"600s\")\n .singleOccurrenceDate(BackupPlanBackupScheduleRpoConfigExclusionWindowSingleOccurrenceDateArgs.builder()\n .year(2024)\n .month(3)\n .day(18)\n .build())\n .build())\n .build())\n .build())\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rpo-weekly-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n rpoWeeklyWindow:\n type: gcp:gkebackup:BackupPlan\n name: rpo_weekly_window\n properties:\n name: rpo-weekly-window\n cluster: ${primary.id}\n location: us-central1\n retentionPolicy:\n backupDeleteLockDays: 30\n backupRetainDays: 180\n backupSchedule:\n paused: true\n rpoConfig:\n targetRpoMinutes: 1440\n exclusionWindows:\n - startTime:\n hours: 1\n minutes: 23\n duration: 1800s\n daysOfWeek:\n daysOfWeeks:\n - MONDAY\n - THURSDAY\n - startTime:\n hours: 12\n duration: 3600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 17\n - startTime:\n hours: 8\n minutes: 40\n duration: 600s\n singleOccurrenceDate:\n year: 2024\n month: 3\n day: 18\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupPlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupPlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, BackupPlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlan:BackupPlan default {{location}}/{{name}}\n```\n\n",
"properties": {
- "backupPlan": {
- "type": "string",
- "description": "A reference to the BackupPlan from which Backups may be used\nas the source for Restores created via this RestorePlan.\n"
+ "backupConfig": {
+ "$ref": "#/types/gcp:gkebackup/BackupPlanBackupConfig:BackupPlanBackupConfig",
+ "description": "Defines the configuration of Backups created via this BackupPlan.\nStructure is documented below.\n"
+ },
+ "backupSchedule": {
+ "$ref": "#/types/gcp:gkebackup/BackupPlanBackupSchedule:BackupPlanBackupSchedule",
+ "description": "Defines a schedule for automatic Backup creation via this BackupPlan.\nStructure is documented below.\n"
},
"cluster": {
"type": "string",
- "description": "The source cluster from which Restores will be created via this RestorePlan.\n"
+ "description": "The source cluster from which Backups will be created via this BackupPlan.\n"
+ },
+ "deactivated": {
+ "type": "boolean",
+ "description": "This flag indicates whether this BackupPlan has been deactivated.\nSetting this field to True locks the BackupPlan such that no further updates will be allowed\n(except deletes), including the deactivated field itself. It also prevents any new Backups\nfrom being created via this BackupPlan (including scheduled Backups).\n"
},
"description": {
"type": "string",
- "description": "User specified descriptive string for this RestorePlan.\n"
+ "description": "User specified descriptive string for this BackupPlan.\n"
},
"effectiveLabels": {
"type": "object",
@@ -216283,23 +217533,32 @@
"description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
"secret": true
},
+ "etag": {
+ "type": "string",
+ "description": "etag is used for optimistic concurrency control as a way to help prevent simultaneous\nupdates of a backup plan from overwriting each other. It is strongly suggested that\nsystems make use of the 'etag' in the read-modify-write cycle to perform BackupPlan updates\nin order to avoid race conditions: An etag is returned in the response to backupPlans.get,\nand systems are expected to put that etag in the request to backupPlans.patch or\nbackupPlans.delete to ensure that their change will be applied to the same version of the resource.\n"
+ },
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
- "description": "Description: A set of custom labels supplied by the user. A list of key-\u003evalue pairs. Example: { \"name\": \"wrench\",\n\"mass\": \"1.3kg\", \"count\": \"3\" }. **Note**: This field is non-authoritative, and will only manage the labels present in\nyour configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.\n"
+ "description": "Description: A set of custom labels supplied by the user.\nA list of key-\u003evalue pairs.\nExample: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\n"
+ "description": "The region of the Backup Plan.\n\n\n- - -\n"
},
"name": {
"type": "string",
"description": "The full name of the BackupPlan Resource.\n"
},
"project": {
- "type": "string"
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
+ },
+ "protectedPodCount": {
+ "type": "integer",
+ "description": "The number of Kubernetes Pods backed up in the last successful Backup created via this BackupPlan.\n"
},
"pulumiLabels": {
"type": "object",
@@ -216309,17 +217568,17 @@
"description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
"secret": true
},
- "restoreConfig": {
- "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfig:RestorePlanRestoreConfig",
- "description": "Defines the configuration of Restores created via this RestorePlan.\nStructure is documented below.\n"
+ "retentionPolicy": {
+ "$ref": "#/types/gcp:gkebackup/BackupPlanRetentionPolicy:BackupPlanRetentionPolicy",
+ "description": "RetentionPolicy governs lifecycle of Backups created under this plan.\nStructure is documented below.\n"
},
"state": {
"type": "string",
- "description": "The State of the RestorePlan.\n"
+ "description": "The State of the BackupPlan.\n"
},
"stateReason": {
"type": "string",
- "description": "Detailed description of why RestorePlan is in its current state.\n"
+ "description": "Detailed description of why BackupPlan is in its current state.\n"
},
"uid": {
"type": "string",
@@ -216327,43 +217586,51 @@
}
},
"required": [
- "backupPlan",
"cluster",
+ "deactivated",
"effectiveLabels",
+ "etag",
"location",
"name",
"project",
- "restoreConfig",
+ "protectedPodCount",
"state",
"stateReason",
"pulumiLabels",
"uid"
],
"inputProperties": {
- "backupPlan": {
- "type": "string",
- "description": "A reference to the BackupPlan from which Backups may be used\nas the source for Restores created via this RestorePlan.\n",
- "willReplaceOnChanges": true
+ "backupConfig": {
+ "$ref": "#/types/gcp:gkebackup/BackupPlanBackupConfig:BackupPlanBackupConfig",
+ "description": "Defines the configuration of Backups created via this BackupPlan.\nStructure is documented below.\n"
+ },
+ "backupSchedule": {
+ "$ref": "#/types/gcp:gkebackup/BackupPlanBackupSchedule:BackupPlanBackupSchedule",
+ "description": "Defines a schedule for automatic Backup creation via this BackupPlan.\nStructure is documented below.\n"
},
"cluster": {
"type": "string",
- "description": "The source cluster from which Restores will be created via this RestorePlan.\n",
+ "description": "The source cluster from which Backups will be created via this BackupPlan.\n",
"willReplaceOnChanges": true
},
+ "deactivated": {
+ "type": "boolean",
+ "description": "This flag indicates whether this BackupPlan has been deactivated.\nSetting this field to True locks the BackupPlan such that no further updates will be allowed\n(except deletes), including the deactivated field itself. It also prevents any new Backups\nfrom being created via this BackupPlan (including scheduled Backups).\n"
+ },
"description": {
"type": "string",
- "description": "User specified descriptive string for this RestorePlan.\n"
+ "description": "User specified descriptive string for this BackupPlan.\n"
},
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
- "description": "Description: A set of custom labels supplied by the user. A list of key-\u003evalue pairs. Example: { \"name\": \"wrench\",\n\"mass\": \"1.3kg\", \"count\": \"3\" }. **Note**: This field is non-authoritative, and will only manage the labels present in\nyour configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.\n"
+ "description": "Description: A set of custom labels supplied by the user.\nA list of key-\u003evalue pairs.\nExample: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\n",
+ "description": "The region of the Backup Plan.\n\n\n- - -\n",
"willReplaceOnChanges": true
},
"name": {
@@ -216373,35 +217640,41 @@
},
"project": {
"type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
},
- "restoreConfig": {
- "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfig:RestorePlanRestoreConfig",
- "description": "Defines the configuration of Restores created via this RestorePlan.\nStructure is documented below.\n"
+ "retentionPolicy": {
+ "$ref": "#/types/gcp:gkebackup/BackupPlanRetentionPolicy:BackupPlanRetentionPolicy",
+ "description": "RetentionPolicy governs lifecycle of Backups created under this plan.\nStructure is documented below.\n"
}
},
"requiredInputs": [
- "backupPlan",
"cluster",
- "location",
- "restoreConfig"
+ "location"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering RestorePlan resources.\n",
+ "description": "Input properties used for looking up and filtering BackupPlan resources.\n",
"properties": {
- "backupPlan": {
- "type": "string",
- "description": "A reference to the BackupPlan from which Backups may be used\nas the source for Restores created via this RestorePlan.\n",
- "willReplaceOnChanges": true
+ "backupConfig": {
+ "$ref": "#/types/gcp:gkebackup/BackupPlanBackupConfig:BackupPlanBackupConfig",
+ "description": "Defines the configuration of Backups created via this BackupPlan.\nStructure is documented below.\n"
+ },
+ "backupSchedule": {
+ "$ref": "#/types/gcp:gkebackup/BackupPlanBackupSchedule:BackupPlanBackupSchedule",
+ "description": "Defines a schedule for automatic Backup creation via this BackupPlan.\nStructure is documented below.\n"
},
"cluster": {
"type": "string",
- "description": "The source cluster from which Restores will be created via this RestorePlan.\n",
+ "description": "The source cluster from which Backups will be created via this BackupPlan.\n",
"willReplaceOnChanges": true
},
+ "deactivated": {
+ "type": "boolean",
+ "description": "This flag indicates whether this BackupPlan has been deactivated.\nSetting this field to True locks the BackupPlan such that no further updates will be allowed\n(except deletes), including the deactivated field itself. It also prevents any new Backups\nfrom being created via this BackupPlan (including scheduled Backups).\n"
+ },
"description": {
"type": "string",
- "description": "User specified descriptive string for this RestorePlan.\n"
+ "description": "User specified descriptive string for this BackupPlan.\n"
},
"effectiveLabels": {
"type": "object",
@@ -216411,16 +217684,20 @@
"description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
"secret": true
},
+ "etag": {
+ "type": "string",
+ "description": "etag is used for optimistic concurrency control as a way to help prevent simultaneous\nupdates of a backup plan from overwriting each other. It is strongly suggested that\nsystems make use of the 'etag' in the read-modify-write cycle to perform BackupPlan updates\nin order to avoid race conditions: An etag is returned in the response to backupPlans.get,\nand systems are expected to put that etag in the request to backupPlans.patch or\nbackupPlans.delete to ensure that their change will be applied to the same version of the resource.\n"
+ },
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
- "description": "Description: A set of custom labels supplied by the user. A list of key-\u003evalue pairs. Example: { \"name\": \"wrench\",\n\"mass\": \"1.3kg\", \"count\": \"3\" }. **Note**: This field is non-authoritative, and will only manage the labels present in\nyour configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.\n"
+ "description": "Description: A set of custom labels supplied by the user.\nA list of key-\u003evalue pairs.\nExample: { \"name\": \"wrench\", \"mass\": \"1.3kg\", \"count\": \"3\" }.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\n",
+ "description": "The region of the Backup Plan.\n\n\n- - -\n",
"willReplaceOnChanges": true
},
"name": {
@@ -216430,8 +217707,13 @@
},
"project": {
"type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
},
+ "protectedPodCount": {
+ "type": "integer",
+ "description": "The number of Kubernetes Pods backed up in the last successful Backup created via this BackupPlan.\n"
+ },
"pulumiLabels": {
"type": "object",
"additionalProperties": {
@@ -216440,17 +217722,17 @@
"description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
"secret": true
},
- "restoreConfig": {
- "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfig:RestorePlanRestoreConfig",
- "description": "Defines the configuration of Restores created via this RestorePlan.\nStructure is documented below.\n"
+ "retentionPolicy": {
+ "$ref": "#/types/gcp:gkebackup/BackupPlanRetentionPolicy:BackupPlanRetentionPolicy",
+ "description": "RetentionPolicy governs lifecycle of Backups created under this plan.\nStructure is documented below.\n"
},
"state": {
"type": "string",
- "description": "The State of the RestorePlan.\n"
+ "description": "The State of the BackupPlan.\n"
},
"stateReason": {
"type": "string",
- "description": "Detailed description of why RestorePlan is in its current state.\n"
+ "description": "Detailed description of why BackupPlan is in its current state.\n"
},
"uid": {
"type": "string",
@@ -216460,11 +217742,11 @@
"type": "object"
}
},
- "gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding": {
- "description": "Three different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE RestorePlan\nThree different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE restoreplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding editor projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "gcp:gkebackup/backupPlanIamBinding:BackupPlanIamBinding": {
+ "description": "Three different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE BackupPlan\nThree different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE backupplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamBinding:BackupPlanIamBinding editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamBinding:BackupPlanIamBinding editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamBinding:BackupPlanIamBinding editor projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
"properties": {
"condition": {
- "$ref": "#/types/gcp:gkebackup/RestorePlanIamBindingCondition:RestorePlanIamBindingCondition"
+ "$ref": "#/types/gcp:gkebackup/BackupPlanIamBindingCondition:BackupPlanIamBindingCondition"
},
"etag": {
"type": "string",
@@ -216472,7 +217754,7 @@
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
},
"members": {
"type": "array",
@@ -216491,7 +217773,7 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
}
},
"required": [
@@ -216504,12 +217786,12 @@
],
"inputProperties": {
"condition": {
- "$ref": "#/types/gcp:gkebackup/RestorePlanIamBindingCondition:RestorePlanIamBindingCondition",
+ "$ref": "#/types/gcp:gkebackup/BackupPlanIamBindingCondition:BackupPlanIamBindingCondition",
"willReplaceOnChanges": true
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"members": {
@@ -216531,7 +217813,7 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
@@ -216540,10 +217822,10 @@
"role"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering RestorePlanIamBinding resources.\n",
+ "description": "Input properties used for looking up and filtering BackupPlanIamBinding resources.\n",
"properties": {
"condition": {
- "$ref": "#/types/gcp:gkebackup/RestorePlanIamBindingCondition:RestorePlanIamBindingCondition",
+ "$ref": "#/types/gcp:gkebackup/BackupPlanIamBindingCondition:BackupPlanIamBindingCondition",
"willReplaceOnChanges": true
},
"etag": {
@@ -216552,7 +217834,7 @@
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"members": {
@@ -216574,18 +217856,18 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
"type": "object"
}
},
- "gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember": {
- "description": "Three different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE RestorePlan\nThree different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE restoreplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember editor projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "gcp:gkebackup/backupPlanIamMember:BackupPlanIamMember": {
+ "description": "Three different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE BackupPlan\nThree different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE backupplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamMember:BackupPlanIamMember editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamMember:BackupPlanIamMember editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamMember:BackupPlanIamMember editor projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
"properties": {
"condition": {
- "$ref": "#/types/gcp:gkebackup/RestorePlanIamMemberCondition:RestorePlanIamMemberCondition"
+ "$ref": "#/types/gcp:gkebackup/BackupPlanIamMemberCondition:BackupPlanIamMemberCondition"
},
"etag": {
"type": "string",
@@ -216593,7 +217875,7 @@
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
},
"member": {
"type": "string",
@@ -216609,7 +217891,7 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
}
},
"required": [
@@ -216622,12 +217904,12 @@
],
"inputProperties": {
"condition": {
- "$ref": "#/types/gcp:gkebackup/RestorePlanIamMemberCondition:RestorePlanIamMemberCondition",
+ "$ref": "#/types/gcp:gkebackup/BackupPlanIamMemberCondition:BackupPlanIamMemberCondition",
"willReplaceOnChanges": true
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"member": {
@@ -216647,7 +217929,7 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
@@ -216656,10 +217938,10 @@
"role"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering RestorePlanIamMember resources.\n",
+ "description": "Input properties used for looking up and filtering BackupPlanIamMember resources.\n",
"properties": {
"condition": {
- "$ref": "#/types/gcp:gkebackup/RestorePlanIamMemberCondition:RestorePlanIamMemberCondition",
+ "$ref": "#/types/gcp:gkebackup/BackupPlanIamMemberCondition:BackupPlanIamMemberCondition",
"willReplaceOnChanges": true
},
"etag": {
@@ -216668,7 +217950,7 @@
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"member": {
@@ -216688,15 +217970,15 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.BackupPlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
"type": "object"
}
},
- "gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy": {
- "description": "Three different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE RestorePlan\nThree different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE restoreplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy editor projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "gcp:gkebackup/backupPlanIamPolicy:BackupPlanIamPolicy": {
+ "description": "Three different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE BackupPlan\nThree different resources help you manage your IAM policy for Backup for GKE BackupPlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Authoritative. Sets the IAM policy for the backupplan and replaces any existing policy already attached.\n* `gcp.gkebackup.BackupPlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the backupplan are preserved.\n* `gcp.gkebackup.BackupPlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the backupplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.BackupPlanIamPolicy`: Retrieves the IAM policy for the backupplan\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.BackupPlanIamBinding` and `gcp.gkebackup.BackupPlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.BackupPlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.BackupPlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.BackupPlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.BackupPlanIamPolicy(\"policy\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.BackupPlanIamPolicy(\"policy\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.BackupPlanIamPolicy(\"policy\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewBackupPlanIamPolicy(ctx, \"policy\", \u0026gkebackup.BackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new BackupPlanIamPolicy(\"policy\", BackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:BackupPlanIamPolicy\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.BackupPlanIamBinding(\"binding\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.BackupPlanIamBinding(\"binding\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.BackupPlanIamBinding(\"binding\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamBinding(ctx, \"binding\", \u0026gkebackup.BackupPlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBinding;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new BackupPlanIamBinding(\"binding\", BackupPlanIamBindingArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:BackupPlanIamBinding\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.BackupPlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.BackupPlanIamMember(\"member\", {\n project: basic.project,\n location: basic.location,\n name: basic.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.BackupPlanIamMember(\"member\",\n project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.BackupPlanIamMember(\"member\", new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewBackupPlanIamMember(ctx, \"member\", \u0026gkebackup.BackupPlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(basic.Project),\n\t\t\tLocation: pulumi.Any(basic.Location),\n\t\t\tName: pulumi.Any(basic.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMember;\nimport com.pulumi.gcp.gkebackup.BackupPlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new BackupPlanIamMember(\"member\", BackupPlanIamMemberArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:BackupPlanIamMember\n properties:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/backupPlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE backupplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamPolicy:BackupPlanIamPolicy editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamPolicy:BackupPlanIamPolicy editor \"projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/backupPlanIamPolicy:BackupPlanIamPolicy editor projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
"properties": {
"etag": {
"type": "string",
@@ -216704,7 +217986,7 @@
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
},
"name": {
"type": "string",
@@ -216729,7 +218011,7 @@
"inputProperties": {
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"name": {
@@ -216751,7 +218033,7 @@
"policyData"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering RestorePlanIamPolicy resources.\n",
+ "description": "Input properties used for looking up and filtering BackupPlanIamPolicy resources.\n",
"properties": {
"etag": {
"type": "string",
@@ -216759,7 +218041,7 @@
},
"location": {
"type": "string",
- "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Backup Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"name": {
@@ -216780,16 +218062,20 @@
"type": "object"
}
},
- "gcp:gkehub/feature:Feature": {
- "description": "Feature represents the settings and status of any Hub Feature.\n\n\nTo get more information about Feature, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.features)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Feature Multi Cluster Ingress\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cluster = new gcp.container.Cluster(\"cluster\", {\n name: \"my-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"my-membership\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${cluster.id}`,\n },\n },\n});\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"multiclusteringress\",\n location: \"global\",\n spec: {\n multiclusteringress: {\n configMembership: membership.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncluster = gcp.container.Cluster(\"cluster\",\n name=\"my-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1)\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"my-membership\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": cluster.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n })\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"multiclusteringress\",\n location=\"global\",\n spec={\n \"multiclusteringress\": {\n \"config_membership\": membership.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cluster = new Gcp.Container.Cluster(\"cluster\", new()\n {\n Name = \"my-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"my-membership\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = cluster.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n });\n\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"multiclusteringress\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Multiclusteringress = new Gcp.GkeHub.Inputs.FeatureSpecMulticlusteringressArgs\n {\n ConfigMembership = membership.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcluster, err := container.NewCluster(ctx, \"cluster\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"my-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"my-membership\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: cluster.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"multiclusteringress\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tMulticlusteringress: \u0026gkehub.FeatureSpecMulticlusteringressArgs{\n\t\t\t\t\tConfigMembership: membership.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecMulticlusteringressArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cluster = new Cluster(\"cluster\", ClusterArgs.builder()\n .name(\"my-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"my-membership\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(cluster.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build());\n\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"multiclusteringress\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .multiclusteringress(FeatureSpecMulticlusteringressArgs.builder()\n .configMembership(membership.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster:\n type: gcp:container:Cluster\n properties:\n name: my-cluster\n location: us-central1-a\n initialNodeCount: 1\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: my-membership\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${cluster.id}\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: multiclusteringress\n location: global\n spec:\n multiclusteringress:\n configMembership: ${membership.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkehub Feature Multi Cluster Service Discovery\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"multiclusterservicediscovery\",\n location: \"global\",\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"multiclusterservicediscovery\",\n location=\"global\",\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"multiclusterservicediscovery\",\n Location = \"global\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"multiclusterservicediscovery\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"multiclusterservicediscovery\")\n .location(\"global\")\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: multiclusterservicediscovery\n location: global\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkehub Feature Anthos Service Mesh\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"servicemesh\",\n location: \"global\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"servicemesh\",\n location=\"global\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"servicemesh\",\n Location = \"global\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"servicemesh\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"servicemesh\")\n .location(\"global\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: servicemesh\n location: global\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Observability For Default Logs With Copy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"fleetobservability\",\n location: \"global\",\n spec: {\n fleetobservability: {\n loggingConfig: {\n defaultConfig: {\n mode: \"COPY\",\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"fleetobservability\",\n location=\"global\",\n spec={\n \"fleetobservability\": {\n \"logging_config\": {\n \"default_config\": {\n \"mode\": \"COPY\",\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"fleetobservability\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Fleetobservability = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityArgs\n {\n LoggingConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigArgs\n {\n DefaultConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs\n {\n Mode = \"COPY\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"fleetobservability\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tFleetobservability: \u0026gkehub.FeatureSpecFleetobservabilityArgs{\n\t\t\t\t\tLoggingConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigArgs{\n\t\t\t\t\t\tDefaultConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs{\n\t\t\t\t\t\t\tMode: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"fleetobservability\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .fleetobservability(FeatureSpecFleetobservabilityArgs.builder()\n .loggingConfig(FeatureSpecFleetobservabilityLoggingConfigArgs.builder()\n .defaultConfig(FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs.builder()\n .mode(\"COPY\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: fleetobservability\n location: global\n spec:\n fleetobservability:\n loggingConfig:\n defaultConfig:\n mode: COPY\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Observability For Scope Logs With Move\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"fleetobservability\",\n location: \"global\",\n spec: {\n fleetobservability: {\n loggingConfig: {\n fleetScopeLogsConfig: {\n mode: \"MOVE\",\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"fleetobservability\",\n location=\"global\",\n spec={\n \"fleetobservability\": {\n \"logging_config\": {\n \"fleet_scope_logs_config\": {\n \"mode\": \"MOVE\",\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"fleetobservability\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Fleetobservability = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityArgs\n {\n LoggingConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigArgs\n {\n FleetScopeLogsConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs\n {\n Mode = \"MOVE\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"fleetobservability\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tFleetobservability: \u0026gkehub.FeatureSpecFleetobservabilityArgs{\n\t\t\t\t\tLoggingConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigArgs{\n\t\t\t\t\t\tFleetScopeLogsConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs{\n\t\t\t\t\t\t\tMode: pulumi.String(\"MOVE\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"fleetobservability\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .fleetobservability(FeatureSpecFleetobservabilityArgs.builder()\n .loggingConfig(FeatureSpecFleetobservabilityLoggingConfigArgs.builder()\n .fleetScopeLogsConfig(FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs.builder()\n .mode(\"MOVE\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: fleetobservability\n location: global\n spec:\n fleetobservability:\n loggingConfig:\n fleetScopeLogsConfig:\n mode: MOVE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Observability For Both Default And Scope Logs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"fleetobservability\",\n location: \"global\",\n spec: {\n fleetobservability: {\n loggingConfig: {\n defaultConfig: {\n mode: \"COPY\",\n },\n fleetScopeLogsConfig: {\n mode: \"MOVE\",\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"fleetobservability\",\n location=\"global\",\n spec={\n \"fleetobservability\": {\n \"logging_config\": {\n \"default_config\": {\n \"mode\": \"COPY\",\n },\n \"fleet_scope_logs_config\": {\n \"mode\": \"MOVE\",\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"fleetobservability\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Fleetobservability = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityArgs\n {\n LoggingConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigArgs\n {\n DefaultConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs\n {\n Mode = \"COPY\",\n },\n FleetScopeLogsConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs\n {\n Mode = \"MOVE\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"fleetobservability\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tFleetobservability: \u0026gkehub.FeatureSpecFleetobservabilityArgs{\n\t\t\t\t\tLoggingConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigArgs{\n\t\t\t\t\t\tDefaultConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs{\n\t\t\t\t\t\t\tMode: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFleetScopeLogsConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs{\n\t\t\t\t\t\t\tMode: pulumi.String(\"MOVE\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"fleetobservability\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .fleetobservability(FeatureSpecFleetobservabilityArgs.builder()\n .loggingConfig(FeatureSpecFleetobservabilityLoggingConfigArgs.builder()\n .defaultConfig(FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs.builder()\n .mode(\"COPY\")\n .build())\n .fleetScopeLogsConfig(FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs.builder()\n .mode(\"MOVE\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: fleetobservability\n location: global\n spec:\n fleetobservability:\n loggingConfig:\n defaultConfig:\n mode: COPY\n fleetScopeLogsConfig:\n mode: MOVE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Service Mesh\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"servicemesh\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n mesh: {\n management: \"MANAGEMENT_AUTOMATIC\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"servicemesh\",\n location=\"global\",\n fleet_default_member_config={\n \"mesh\": {\n \"management\": \"MANAGEMENT_AUTOMATIC\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"servicemesh\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Mesh = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigMeshArgs\n {\n Management = \"MANAGEMENT_AUTOMATIC\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"servicemesh\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tMesh: \u0026gkehub.FeatureFleetDefaultMemberConfigMeshArgs{\n\t\t\t\t\tManagement: pulumi.String(\"MANAGEMENT_AUTOMATIC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigMeshArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"servicemesh\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .mesh(FeatureFleetDefaultMemberConfigMeshArgs.builder()\n .management(\"MANAGEMENT_AUTOMATIC\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: servicemesh\n location: global\n fleetDefaultMemberConfig:\n mesh:\n management: MANAGEMENT_AUTOMATIC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Configmanagement\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"configmanagement\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n configmanagement: {\n configSync: {\n git: {\n syncRepo: \"https://github.com/hashicorp/terraform\",\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"configmanagement\",\n location=\"global\",\n fleet_default_member_config={\n \"configmanagement\": {\n \"config_sync\": {\n \"git\": {\n \"sync_repo\": \"https://github.com/hashicorp/terraform\",\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"configmanagement\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Configmanagement = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigConfigmanagementArgs\n {\n ConfigSync = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncArgs\n {\n Git = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncGitArgs\n {\n SyncRepo = \"https://github.com/hashicorp/terraform\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"configmanagement\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tConfigmanagement: \u0026gkehub.FeatureFleetDefaultMemberConfigConfigmanagementArgs{\n\t\t\t\t\tConfigSync: \u0026gkehub.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncArgs{\n\t\t\t\t\t\tGit: \u0026gkehub.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncGitArgs{\n\t\t\t\t\t\t\tSyncRepo: pulumi.String(\"https://github.com/hashicorp/terraform\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigConfigmanagementArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncGitArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"configmanagement\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .configmanagement(FeatureFleetDefaultMemberConfigConfigmanagementArgs.builder()\n .configSync(FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncArgs.builder()\n .git(FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncGitArgs.builder()\n .syncRepo(\"https://github.com/hashicorp/terraform\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: configmanagement\n location: global\n fleetDefaultMemberConfig:\n configmanagement:\n configSync:\n git:\n syncRepo: https://github.com/hashicorp/terraform\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Policycontroller\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"policycontroller\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n policycontroller: {\n policyControllerHubConfig: {\n installSpec: \"INSTALL_SPEC_ENABLED\",\n exemptableNamespaces: [\"foo\"],\n policyContent: {\n bundles: [{\n bundle: \"policy-essentials-v2022\",\n exemptedNamespaces: [\n \"foo\",\n \"bar\",\n ],\n }],\n templateLibrary: {\n installation: \"ALL\",\n },\n },\n auditIntervalSeconds: 30,\n referentialRulesEnabled: true,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"policycontroller\",\n location=\"global\",\n fleet_default_member_config={\n \"policycontroller\": {\n \"policy_controller_hub_config\": {\n \"install_spec\": \"INSTALL_SPEC_ENABLED\",\n \"exemptable_namespaces\": [\"foo\"],\n \"policy_content\": {\n \"bundles\": [{\n \"bundle\": \"policy-essentials-v2022\",\n \"exempted_namespaces\": [\n \"foo\",\n \"bar\",\n ],\n }],\n \"template_library\": {\n \"installation\": \"ALL\",\n },\n },\n \"audit_interval_seconds\": 30,\n \"referential_rules_enabled\": True,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"policycontroller\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Policycontroller = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs\n {\n PolicyControllerHubConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs\n {\n InstallSpec = \"INSTALL_SPEC_ENABLED\",\n ExemptableNamespaces = new[]\n {\n \"foo\",\n },\n PolicyContent = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs\n {\n Bundles = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs\n {\n Bundle = \"policy-essentials-v2022\",\n ExemptedNamespaces = new[]\n {\n \"foo\",\n \"bar\",\n },\n },\n },\n TemplateLibrary = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs\n {\n Installation = \"ALL\",\n },\n },\n AuditIntervalSeconds = 30,\n ReferentialRulesEnabled = true,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"policycontroller\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tPolicycontroller: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerArgs{\n\t\t\t\t\tPolicyControllerHubConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs{\n\t\t\t\t\t\tInstallSpec: pulumi.String(\"INSTALL_SPEC_ENABLED\"),\n\t\t\t\t\t\tExemptableNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPolicyContent: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs{\n\t\t\t\t\t\t\tBundles: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArray{\n\t\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs{\n\t\t\t\t\t\t\t\t\tBundle: pulumi.String(\"policy-essentials-v2022\"),\n\t\t\t\t\t\t\t\t\tExemptedNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tTemplateLibrary: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs{\n\t\t\t\t\t\t\t\tInstallation: pulumi.String(\"ALL\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tAuditIntervalSeconds: pulumi.Int(30),\n\t\t\t\t\t\tReferentialRulesEnabled: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"policycontroller\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .policycontroller(FeatureFleetDefaultMemberConfigPolicycontrollerArgs.builder()\n .policyControllerHubConfig(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs.builder()\n .installSpec(\"INSTALL_SPEC_ENABLED\")\n .exemptableNamespaces(\"foo\")\n .policyContent(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs.builder()\n .bundles(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs.builder()\n .bundle(\"policy-essentials-v2022\")\n .exemptedNamespaces( \n \"foo\",\n \"bar\")\n .build())\n .templateLibrary(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.builder()\n .installation(\"ALL\")\n .build())\n .build())\n .auditIntervalSeconds(30)\n .referentialRulesEnabled(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: policycontroller\n location: global\n fleetDefaultMemberConfig:\n policycontroller:\n policyControllerHubConfig:\n installSpec: INSTALL_SPEC_ENABLED\n exemptableNamespaces:\n - foo\n policyContent:\n bundles:\n - bundle: policy-essentials-v2022\n exemptedNamespaces:\n - foo\n - bar\n templateLibrary:\n installation: ALL\n auditIntervalSeconds: 30\n referentialRulesEnabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Policycontroller Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"policycontroller\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n policycontroller: {\n policyControllerHubConfig: {\n installSpec: \"INSTALL_SPEC_SUSPENDED\",\n policyContent: {\n bundles: [\n {\n bundle: \"pci-dss-v3.2.1\",\n exemptedNamespaces: [\n \"baz\",\n \"bar\",\n ],\n },\n {\n bundle: \"nist-sp-800-190\",\n exemptedNamespaces: [],\n },\n ],\n templateLibrary: {\n installation: \"ALL\",\n },\n },\n constraintViolationLimit: 50,\n referentialRulesEnabled: true,\n logDeniesEnabled: true,\n mutationEnabled: true,\n deploymentConfigs: [\n {\n component: \"admission\",\n replicaCount: 2,\n podAffinity: \"ANTI_AFFINITY\",\n },\n {\n component: \"audit\",\n containerResources: {\n limits: {\n memory: \"1Gi\",\n cpu: \"1.5\",\n },\n requests: {\n memory: \"500Mi\",\n cpu: \"150m\",\n },\n },\n podTolerations: [{\n key: \"key1\",\n operator: \"Equal\",\n value: \"value1\",\n effect: \"NoSchedule\",\n }],\n },\n ],\n monitoring: {\n backends: [\"PROMETHEUS\"],\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"policycontroller\",\n location=\"global\",\n fleet_default_member_config={\n \"policycontroller\": {\n \"policy_controller_hub_config\": {\n \"install_spec\": \"INSTALL_SPEC_SUSPENDED\",\n \"policy_content\": {\n \"bundles\": [\n {\n \"bundle\": \"pci-dss-v3.2.1\",\n \"exempted_namespaces\": [\n \"baz\",\n \"bar\",\n ],\n },\n {\n \"bundle\": \"nist-sp-800-190\",\n \"exempted_namespaces\": [],\n },\n ],\n \"template_library\": {\n \"installation\": \"ALL\",\n },\n },\n \"constraint_violation_limit\": 50,\n \"referential_rules_enabled\": True,\n \"log_denies_enabled\": True,\n \"mutation_enabled\": True,\n \"deployment_configs\": [\n {\n \"component\": \"admission\",\n \"replica_count\": 2,\n \"pod_affinity\": \"ANTI_AFFINITY\",\n },\n {\n \"component\": \"audit\",\n \"container_resources\": {\n \"limits\": {\n \"memory\": \"1Gi\",\n \"cpu\": \"1.5\",\n },\n \"requests\": {\n \"memory\": \"500Mi\",\n \"cpu\": \"150m\",\n },\n },\n \"pod_tolerations\": [{\n \"key\": \"key1\",\n \"operator\": \"Equal\",\n \"value\": \"value1\",\n \"effect\": \"NoSchedule\",\n }],\n },\n ],\n \"monitoring\": {\n \"backends\": [\"PROMETHEUS\"],\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"policycontroller\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Policycontroller = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs\n {\n PolicyControllerHubConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs\n {\n InstallSpec = \"INSTALL_SPEC_SUSPENDED\",\n PolicyContent = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs\n {\n Bundles = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs\n {\n Bundle = \"pci-dss-v3.2.1\",\n ExemptedNamespaces = new[]\n {\n \"baz\",\n \"bar\",\n },\n },\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs\n {\n Bundle = \"nist-sp-800-190\",\n ExemptedNamespaces = new() { },\n },\n },\n TemplateLibrary = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs\n {\n Installation = \"ALL\",\n },\n },\n ConstraintViolationLimit = 50,\n ReferentialRulesEnabled = true,\n LogDeniesEnabled = true,\n MutationEnabled = true,\n DeploymentConfigs = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs\n {\n Component = \"admission\",\n ReplicaCount = 2,\n PodAffinity = \"ANTI_AFFINITY\",\n },\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs\n {\n Component = \"audit\",\n ContainerResources = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesArgs\n {\n Limits = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesLimitsArgs\n {\n Memory = \"1Gi\",\n Cpu = \"1.5\",\n },\n Requests = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesRequestsArgs\n {\n Memory = \"500Mi\",\n Cpu = \"150m\",\n },\n },\n PodTolerations = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigPodTolerationArgs\n {\n Key = \"key1\",\n Operator = \"Equal\",\n Value = \"value1\",\n Effect = \"NoSchedule\",\n },\n },\n },\n },\n Monitoring = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs\n {\n Backends = new[]\n {\n \"PROMETHEUS\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"policycontroller\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tPolicycontroller: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerArgs{\n\t\t\t\t\tPolicyControllerHubConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs{\n\t\t\t\t\t\tInstallSpec: pulumi.String(\"INSTALL_SPEC_SUSPENDED\"),\n\t\t\t\t\t\tPolicyContent: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs{\n\t\t\t\t\t\t\tBundles: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArray{\n\t\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs{\n\t\t\t\t\t\t\t\t\tBundle: pulumi.String(\"pci-dss-v3.2.1\"),\n\t\t\t\t\t\t\t\t\tExemptedNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"baz\"),\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs{\n\t\t\t\t\t\t\t\t\tBundle: pulumi.String(\"nist-sp-800-190\"),\n\t\t\t\t\t\t\t\t\tExemptedNamespaces: pulumi.StringArray{},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tTemplateLibrary: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs{\n\t\t\t\t\t\t\t\tInstallation: pulumi.String(\"ALL\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tConstraintViolationLimit: pulumi.Int(50),\n\t\t\t\t\t\tReferentialRulesEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tLogDeniesEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tMutationEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tDeploymentConfigs: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArray{\n\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs{\n\t\t\t\t\t\t\t\tComponent: pulumi.String(\"admission\"),\n\t\t\t\t\t\t\t\tReplicaCount: pulumi.Int(2),\n\t\t\t\t\t\t\t\tPodAffinity: pulumi.String(\"ANTI_AFFINITY\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs{\n\t\t\t\t\t\t\t\tComponent: pulumi.String(\"audit\"),\n\t\t\t\t\t\t\t\tContainerResources: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesArgs{\n\t\t\t\t\t\t\t\t\tLimits: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesLimitsArgs{\n\t\t\t\t\t\t\t\t\t\tMemory: pulumi.String(\"1Gi\"),\n\t\t\t\t\t\t\t\t\t\tCpu: pulumi.String(\"1.5\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tRequests: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesRequestsArgs{\n\t\t\t\t\t\t\t\t\t\tMemory: pulumi.String(\"500Mi\"),\n\t\t\t\t\t\t\t\t\t\tCpu: pulumi.String(\"150m\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPodTolerations: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigPodTolerationArray{\n\t\t\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigPodTolerationArgs{\n\t\t\t\t\t\t\t\t\t\tKey: pulumi.String(\"key1\"),\n\t\t\t\t\t\t\t\t\t\tOperator: pulumi.String(\"Equal\"),\n\t\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"value1\"),\n\t\t\t\t\t\t\t\t\t\tEffect: pulumi.String(\"NoSchedule\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMonitoring: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs{\n\t\t\t\t\t\t\tBackends: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"PROMETHEUS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"policycontroller\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .policycontroller(FeatureFleetDefaultMemberConfigPolicycontrollerArgs.builder()\n .policyControllerHubConfig(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs.builder()\n .installSpec(\"INSTALL_SPEC_SUSPENDED\")\n .policyContent(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs.builder()\n .bundles( \n FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs.builder()\n .bundle(\"pci-dss-v3.2.1\")\n .exemptedNamespaces( \n \"baz\",\n \"bar\")\n .build(),\n FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs.builder()\n .bundle(\"nist-sp-800-190\")\n .exemptedNamespaces()\n .build())\n .templateLibrary(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.builder()\n .installation(\"ALL\")\n .build())\n .build())\n .constraintViolationLimit(50)\n .referentialRulesEnabled(true)\n .logDeniesEnabled(true)\n .mutationEnabled(true)\n .deploymentConfigs( \n FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs.builder()\n .component(\"admission\")\n .replicaCount(2)\n .podAffinity(\"ANTI_AFFINITY\")\n .build(),\n FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs.builder()\n .component(\"audit\")\n .containerResources(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesArgs.builder()\n .limits(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesLimitsArgs.builder()\n .memory(\"1Gi\")\n .cpu(\"1.5\")\n .build())\n .requests(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesRequestsArgs.builder()\n .memory(\"500Mi\")\n .cpu(\"150m\")\n .build())\n .build())\n .podTolerations(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigPodTolerationArgs.builder()\n .key(\"key1\")\n .operator(\"Equal\")\n .value(\"value1\")\n .effect(\"NoSchedule\")\n .build())\n .build())\n .monitoring(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs.builder()\n .backends(\"PROMETHEUS\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: policycontroller\n location: global\n fleetDefaultMemberConfig:\n policycontroller:\n policyControllerHubConfig:\n installSpec: INSTALL_SPEC_SUSPENDED\n policyContent:\n bundles:\n - bundle: pci-dss-v3.2.1\n exemptedNamespaces:\n - baz\n - bar\n - bundle: nist-sp-800-190\n exemptedNamespaces: []\n templateLibrary:\n installation: ALL\n constraintViolationLimit: 50\n referentialRulesEnabled: true\n logDeniesEnabled: true\n mutationEnabled: true\n deploymentConfigs:\n - component: admission\n replicaCount: 2\n podAffinity: ANTI_AFFINITY\n - component: audit\n containerResources:\n limits:\n memory: 1Gi\n cpu: '1.5'\n requests:\n memory: 500Mi\n cpu: 150m\n podTolerations:\n - key: key1\n operator: Equal\n value: value1\n effect: NoSchedule\n monitoring:\n backends:\n - PROMETHEUS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Policycontroller Minimal\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"policycontroller\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n policycontroller: {\n policyControllerHubConfig: {\n installSpec: \"INSTALL_SPEC_ENABLED\",\n policyContent: {},\n constraintViolationLimit: 50,\n referentialRulesEnabled: true,\n logDeniesEnabled: true,\n mutationEnabled: true,\n deploymentConfigs: [{\n component: \"admission\",\n }],\n monitoring: {},\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"policycontroller\",\n location=\"global\",\n fleet_default_member_config={\n \"policycontroller\": {\n \"policy_controller_hub_config\": {\n \"install_spec\": \"INSTALL_SPEC_ENABLED\",\n \"policy_content\": {},\n \"constraint_violation_limit\": 50,\n \"referential_rules_enabled\": True,\n \"log_denies_enabled\": True,\n \"mutation_enabled\": True,\n \"deployment_configs\": [{\n \"component\": \"admission\",\n }],\n \"monitoring\": {},\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"policycontroller\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Policycontroller = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs\n {\n PolicyControllerHubConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs\n {\n InstallSpec = \"INSTALL_SPEC_ENABLED\",\n PolicyContent = null,\n ConstraintViolationLimit = 50,\n ReferentialRulesEnabled = true,\n LogDeniesEnabled = true,\n MutationEnabled = true,\n DeploymentConfigs = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs\n {\n Component = \"admission\",\n },\n },\n Monitoring = null,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"policycontroller\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tPolicycontroller: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerArgs{\n\t\t\t\t\tPolicyControllerHubConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs{\n\t\t\t\t\t\tInstallSpec: pulumi.String(\"INSTALL_SPEC_ENABLED\"),\n\t\t\t\t\t\tPolicyContent: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs{},\n\t\t\t\t\t\tConstraintViolationLimit: pulumi.Int(50),\n\t\t\t\t\t\tReferentialRulesEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tLogDeniesEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tMutationEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tDeploymentConfigs: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArray{\n\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs{\n\t\t\t\t\t\t\t\tComponent: pulumi.String(\"admission\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMonitoring: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"policycontroller\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .policycontroller(FeatureFleetDefaultMemberConfigPolicycontrollerArgs.builder()\n .policyControllerHubConfig(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs.builder()\n .installSpec(\"INSTALL_SPEC_ENABLED\")\n .policyContent()\n .constraintViolationLimit(50)\n .referentialRulesEnabled(true)\n .logDeniesEnabled(true)\n .mutationEnabled(true)\n .deploymentConfigs(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs.builder()\n .component(\"admission\")\n .build())\n .monitoring()\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: policycontroller\n location: global\n fleetDefaultMemberConfig:\n policycontroller:\n policyControllerHubConfig:\n installSpec: INSTALL_SPEC_ENABLED\n policyContent: {}\n constraintViolationLimit: 50\n referentialRulesEnabled: true\n logDeniesEnabled: true\n mutationEnabled: true\n deploymentConfigs:\n - component: admission\n monitoring: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkehub Feature Clusterupgrade\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"clusterupgrade\",\n location: \"global\",\n spec: {\n clusterupgrade: {\n upstreamFleets: [],\n postConditions: {\n soaking: \"60s\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"clusterupgrade\",\n location=\"global\",\n spec={\n \"clusterupgrade\": {\n \"upstream_fleets\": [],\n \"post_conditions\": {\n \"soaking\": \"60s\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"clusterupgrade\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Clusterupgrade = new Gcp.GkeHub.Inputs.FeatureSpecClusterupgradeArgs\n {\n UpstreamFleets = new() { },\n PostConditions = new Gcp.GkeHub.Inputs.FeatureSpecClusterupgradePostConditionsArgs\n {\n Soaking = \"60s\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"clusterupgrade\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tClusterupgrade: \u0026gkehub.FeatureSpecClusterupgradeArgs{\n\t\t\t\t\tUpstreamFleets: pulumi.StringArray{},\n\t\t\t\t\tPostConditions: \u0026gkehub.FeatureSpecClusterupgradePostConditionsArgs{\n\t\t\t\t\t\tSoaking: pulumi.String(\"60s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecClusterupgradeArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecClusterupgradePostConditionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"clusterupgrade\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .clusterupgrade(FeatureSpecClusterupgradeArgs.builder()\n .upstreamFleets()\n .postConditions(FeatureSpecClusterupgradePostConditionsArgs.builder()\n .soaking(\"60s\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: clusterupgrade\n location: global\n spec:\n clusterupgrade:\n upstreamFleets: []\n postConditions:\n soaking: 60s\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFeature can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/features/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Feature can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/feature:Feature default projects/{{project}}/locations/{{location}}/features/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/feature:Feature default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/feature:Feature default {{location}}/{{name}}\n```\n\n",
+ "gcp:gkebackup/restorePlan:RestorePlan": {
+ "description": "Represents a Restore Plan instance.\n\n\nTo get more information about RestorePlan, see:\n\n* [API documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/reference/rest/v1/projects.locations.restorePlans)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke)\n\n## Example Usage\n\n### Gkebackup Restoreplan All Namespaces\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-all-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-all-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allNs = new gcp.gkebackup.RestorePlan(\"all_ns\", {\n name: \"restore-all-ns\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-all-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-all-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nall_ns = gcp.gkebackup.RestorePlan(\"all_ns\",\n name=\"restore-all-ns\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"all_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-all-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-all-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allNs = new Gcp.GkeBackup.RestorePlan(\"all_ns\", new()\n {\n Name = \"restore-all-ns\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-all-ns\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-all-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-all-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allNs = new RestorePlan(\"allNs\", RestorePlanArgs.builder()\n .name(\"restore-all-ns\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-all-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-all-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allNs:\n type: gcp:gkebackup:RestorePlan\n name: all_ns\n properties:\n name: restore-all-ns\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rollback Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackNs = new gcp.gkebackup.RestorePlan(\"rollback_ns\", {\n name: \"rollback-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n selectedGroupKinds: [\n {\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n },\n {\n resourceGroup: \"storage.k8s.io\",\n resourceKind: \"StorageClass\",\n },\n ],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nrollback_ns = gcp.gkebackup.RestorePlan(\"rollback_ns\",\n name=\"rollback-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"selected_namespaces\": {\n \"namespaces\": [\"my-ns\"],\n },\n \"namespaced_resource_restore_mode\": \"DELETE_AND_RESTORE\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"selected_group_kinds\": [\n {\n \"resource_group\": \"apiextension.k8s.io\",\n \"resource_kind\": \"CustomResourceDefinition\",\n },\n {\n \"resource_group\": \"storage.k8s.io\",\n \"resource_kind\": \"StorageClass\",\n },\n ],\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackNs = new Gcp.GkeBackup.RestorePlan(\"rollback_ns\", new()\n {\n Name = \"rollback-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n SelectedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs\n {\n ResourceGroup = \"storage.k8s.io\",\n ResourceKind = \"StorageClass\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tSelectedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"storage.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"StorageClass\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackNs = new RestorePlan(\"rollbackNs\", RestorePlanArgs.builder()\n .name(\"rollback-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .selectedGroupKinds( \n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build(),\n RestorePlanRestoreConfigClusterResourceRestoreScopeSelectedGroupKindArgs.builder()\n .resourceGroup(\"storage.k8s.io\")\n .resourceKind(\"StorageClass\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackNs:\n type: gcp:gkebackup:RestorePlan\n name: rollback_ns\n properties:\n name: rollback-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n selectedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n - resourceGroup: storage.k8s.io\n resourceKind: StorageClass\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Protected Application\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rollback-app-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rollback-app\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst rollbackApp = new gcp.gkebackup.RestorePlan(\"rollback_app\", {\n name: \"rollback-app-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedApplications: {\n namespacedNames: [{\n name: \"my-app\",\n namespace: \"my-ns\",\n }],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rollback-app-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rollback-app\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nrollback_app = gcp.gkebackup.RestorePlan(\"rollback_app\",\n name=\"rollback-app-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"selected_applications\": {\n \"namespaced_names\": [{\n \"name\": \"my-app\",\n \"namespace\": \"my-ns\",\n }],\n },\n \"namespaced_resource_restore_mode\": \"DELETE_AND_RESTORE\",\n \"volume_data_restore_policy\": \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"no_group_kinds\": True,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rollback-app-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rollback-app\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var rollbackApp = new Gcp.GkeBackup.RestorePlan(\"rollback_app\", new()\n {\n Name = \"rollback-app-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedApplications = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsArgs\n {\n NamespacedNames = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs\n {\n Name = \"my-app\",\n Namespace = \"my-ns\",\n },\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rollback-app-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rollback_app\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rollback-app-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedApplications: \u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsArgs{\n\t\t\t\t\tNamespacedNames: gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"my-app\"),\n\t\t\t\t\t\t\tNamespace: pulumi.String(\"my-ns\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedApplicationsArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rollback-app-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rollback-app\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var rollbackApp = new RestorePlan(\"rollbackApp\", RestorePlanArgs.builder()\n .name(\"rollback-app-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedApplications(RestorePlanRestoreConfigSelectedApplicationsArgs.builder()\n .namespacedNames(RestorePlanRestoreConfigSelectedApplicationsNamespacedNameArgs.builder()\n .name(\"my-app\")\n .namespace(\"my-ns\")\n .build())\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rollback-app-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rollback-app\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n rollbackApp:\n type: gcp:gkebackup:RestorePlan\n name: rollback_app\n properties:\n name: rollback-app-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedApplications:\n namespacedNames:\n - name: my-app\n namespace: my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan All Cluster Resources\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"all-groupkinds-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"all-groupkinds\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst allClusterResources = new gcp.gkebackup.RestorePlan(\"all_cluster_resources\", {\n name: \"all-groupkinds-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n noNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"all-groupkinds-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"all-groupkinds\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nall_cluster_resources = gcp.gkebackup.RestorePlan(\"all_cluster_resources\",\n name=\"all-groupkinds-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"no_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"all-groupkinds-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"all-groupkinds\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var allClusterResources = new Gcp.GkeBackup.RestorePlan(\"all_cluster_resources\", new()\n {\n Name = \"all-groupkinds-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n NoNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"all_cluster_resources\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"all-groupkinds-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tNoNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"all-groupkinds-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"all-groupkinds\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var allClusterResources = new RestorePlan(\"allClusterResources\", RestorePlanArgs.builder()\n .name(\"all-groupkinds-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .noNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: all-groupkinds-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: all-groupkinds\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n allClusterResources:\n type: gcp:gkebackup:RestorePlan\n name: all_cluster_resources\n properties:\n name: all-groupkinds-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n noNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Rename Namespace\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"rename-ns-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"rename-ns\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst renameNs = new gcp.gkebackup.RestorePlan(\"rename_ns\", {\n name: \"rename-ns-rp\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n selectedNamespaces: {\n namespaces: [\"ns1\"],\n },\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n noGroupKinds: true,\n },\n transformationRules: [\n {\n description: \"rename namespace from ns1 to ns2\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Namespace\",\n }],\n jsonPath: \".metadata[?(@.name == 'ns1')]\",\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/name\",\n value: \"ns2\",\n }],\n },\n {\n description: \"move all resources from ns1 to ns2\",\n resourceFilter: {\n namespaces: [\"ns1\"],\n },\n fieldActions: [{\n op: \"REPLACE\",\n path: \"/metadata/namespace\",\n value: \"ns2\",\n }],\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"rename-ns-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"rename-ns\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nrename_ns = gcp.gkebackup.RestorePlan(\"rename_ns\",\n name=\"rename-ns-rp\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"selected_namespaces\": {\n \"namespaces\": [\"ns1\"],\n },\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"no_group_kinds\": True,\n },\n \"transformation_rules\": [\n {\n \"description\": \"rename namespace from ns1 to ns2\",\n \"resource_filter\": {\n \"group_kinds\": [{\n \"resource_kind\": \"Namespace\",\n }],\n \"json_path\": \".metadata[?(@.name == 'ns1')]\",\n },\n \"field_actions\": [{\n \"op\": \"REPLACE\",\n \"path\": \"/metadata/name\",\n \"value\": \"ns2\",\n }],\n },\n {\n \"description\": \"move all resources from ns1 to ns2\",\n \"resource_filter\": {\n \"namespaces\": [\"ns1\"],\n },\n \"field_actions\": [{\n \"op\": \"REPLACE\",\n \"path\": \"/metadata/namespace\",\n \"value\": \"ns2\",\n }],\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"rename-ns-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"rename-ns\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var renameNs = new Gcp.GkeBackup.RestorePlan(\"rename_ns\", new()\n {\n Name = \"rename-ns-rp\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n SelectedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigSelectedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"REUSE_VOLUME_HANDLE_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n NoGroupKinds = true,\n },\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"rename namespace from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Namespace\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'ns1')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/name\",\n Value = \"ns2\",\n },\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"move all resources from ns1 to ns2\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n Namespaces = new[]\n {\n \"ns1\",\n },\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"REPLACE\",\n Path = \"/metadata/namespace\",\n Value = \"ns2\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"rename-ns-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"rename_ns\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"rename-ns-rp\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tSelectedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigSelectedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tNoGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"rename namespace from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Namespace\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'ns1')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/name\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"move all resources from ns1 to ns2\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"ns1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"REPLACE\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/metadata/namespace\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"ns2\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigSelectedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"rename-ns-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"rename-ns\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var renameNs = new RestorePlan(\"renameNs\", RestorePlanArgs.builder()\n .name(\"rename-ns-rp\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .selectedNamespaces(RestorePlanRestoreConfigSelectedNamespacesArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"REUSE_VOLUME_HANDLE_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .noGroupKinds(true)\n .build())\n .transformationRules( \n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"rename namespace from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Namespace\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'ns1')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/name\")\n .value(\"ns2\")\n .build())\n .build(),\n RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"move all resources from ns1 to ns2\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .namespaces(\"ns1\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"REPLACE\")\n .path(\"/metadata/namespace\")\n .value(\"ns2\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: rename-ns-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: rename-ns\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n renameNs:\n type: gcp:gkebackup:RestorePlan\n name: rename_ns\n properties:\n name: rename-ns-rp\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n selectedNamespaces:\n namespaces:\n - ns1\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: REUSE_VOLUME_HANDLE_FROM_BACKUP\n clusterResourceRestoreScope:\n noGroupKinds: true\n transformationRules:\n - description: rename namespace from ns1 to ns2\n resourceFilter:\n groupKinds:\n - resourceKind: Namespace\n jsonPath: .metadata[?(@.name == 'ns1')]\n fieldActions:\n - op: REPLACE\n path: /metadata/name\n value: ns2\n - description: move all resources from ns1 to ns2\n resourceFilter:\n namespaces:\n - ns1\n fieldActions:\n - op: REPLACE\n path: /metadata/namespace\n value: ns2\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Second Transformation\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"transform-rule-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"transform-rule\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst transformRule = new gcp.gkebackup.RestorePlan(\"transform_rule\", {\n name: \"transform-rule-rp\",\n description: \"copy nginx env variables\",\n labels: {\n app: \"nginx\",\n },\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n excludedNamespaces: {\n namespaces: [\"my-ns\"],\n },\n namespacedResourceRestoreMode: \"DELETE_AND_RESTORE\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n excludedGroupKinds: [{\n resourceGroup: \"apiextension.k8s.io\",\n resourceKind: \"CustomResourceDefinition\",\n }],\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n transformationRules: [{\n description: \"Copy environment variables from the nginx container to the install init container.\",\n resourceFilter: {\n groupKinds: [{\n resourceKind: \"Pod\",\n resourceGroup: \"\",\n }],\n jsonPath: \".metadata[?(@.name == 'nginx')]\",\n },\n fieldActions: [{\n op: \"COPY\",\n path: \"/spec/initContainers/0/env\",\n fromPath: \"/spec/containers/0/env\",\n }],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"transform-rule-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"transform-rule\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\ntransform_rule = gcp.gkebackup.RestorePlan(\"transform_rule\",\n name=\"transform-rule-rp\",\n description=\"copy nginx env variables\",\n labels={\n \"app\": \"nginx\",\n },\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"excluded_namespaces\": {\n \"namespaces\": [\"my-ns\"],\n },\n \"namespaced_resource_restore_mode\": \"DELETE_AND_RESTORE\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"excluded_group_kinds\": [{\n \"resource_group\": \"apiextension.k8s.io\",\n \"resource_kind\": \"CustomResourceDefinition\",\n }],\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n \"transformation_rules\": [{\n \"description\": \"Copy environment variables from the nginx container to the install init container.\",\n \"resource_filter\": {\n \"group_kinds\": [{\n \"resource_kind\": \"Pod\",\n \"resource_group\": \"\",\n }],\n \"json_path\": \".metadata[?(@.name == 'nginx')]\",\n },\n \"field_actions\": [{\n \"op\": \"COPY\",\n \"path\": \"/spec/initContainers/0/env\",\n \"from_path\": \"/spec/containers/0/env\",\n }],\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"transform-rule-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"transform-rule\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var transformRule = new Gcp.GkeBackup.RestorePlan(\"transform_rule\", new()\n {\n Name = \"transform-rule-rp\",\n Description = \"copy nginx env variables\",\n Labels = \n {\n { \"app\", \"nginx\" },\n },\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n ExcludedNamespaces = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigExcludedNamespacesArgs\n {\n Namespaces = new[]\n {\n \"my-ns\",\n },\n },\n NamespacedResourceRestoreMode = \"DELETE_AND_RESTORE\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n ExcludedGroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs\n {\n ResourceGroup = \"apiextension.k8s.io\",\n ResourceKind = \"CustomResourceDefinition\",\n },\n },\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n TransformationRules = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleArgs\n {\n Description = \"Copy environment variables from the nginx container to the install init container.\",\n ResourceFilter = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs\n {\n GroupKinds = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs\n {\n ResourceKind = \"Pod\",\n ResourceGroup = \"\",\n },\n },\n JsonPath = \".metadata[?(@.name == 'nginx')]\",\n },\n FieldActions = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigTransformationRuleFieldActionArgs\n {\n Op = \"COPY\",\n Path = \"/spec/initContainers/0/env\",\n FromPath = \"/spec/containers/0/env\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"transform-rule-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"transform_rule\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"transform-rule-rp\"),\n\t\t\tDescription: pulumi.String(\"copy nginx env variables\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"app\": pulumi.String(\"nginx\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tExcludedNamespaces: \u0026gkebackup.RestorePlanRestoreConfigExcludedNamespacesArgs{\n\t\t\t\t\tNamespaces: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"my-ns\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"DELETE_AND_RESTORE\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tExcludedGroupKinds: gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs{\n\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"apiextension.k8s.io\"),\n\t\t\t\t\t\t\tResourceKind: pulumi.String(\"CustomResourceDefinition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tTransformationRules: gkebackup.RestorePlanRestoreConfigTransformationRuleArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleArgs{\n\t\t\t\t\t\tDescription: pulumi.String(\"Copy environment variables from the nginx container to the install init container.\"),\n\t\t\t\t\t\tResourceFilter: \u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterArgs{\n\t\t\t\t\t\t\tGroupKinds: gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArray{\n\t\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs{\n\t\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"Pod\"),\n\t\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tJsonPath: pulumi.String(\".metadata[?(@.name == 'nginx')]\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFieldActions: gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArray{\n\t\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigTransformationRuleFieldActionArgs{\n\t\t\t\t\t\t\t\tOp: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/spec/initContainers/0/env\"),\n\t\t\t\t\t\t\t\tFromPath: pulumi.String(\"/spec/containers/0/env\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigExcludedNamespacesArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"transform-rule-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"transform-rule\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var transformRule = new RestorePlan(\"transformRule\", RestorePlanArgs.builder()\n .name(\"transform-rule-rp\")\n .description(\"copy nginx env variables\")\n .labels(Map.of(\"app\", \"nginx\"))\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .excludedNamespaces(RestorePlanRestoreConfigExcludedNamespacesArgs.builder()\n .namespaces(\"my-ns\")\n .build())\n .namespacedResourceRestoreMode(\"DELETE_AND_RESTORE\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .excludedGroupKinds(RestorePlanRestoreConfigClusterResourceRestoreScopeExcludedGroupKindArgs.builder()\n .resourceGroup(\"apiextension.k8s.io\")\n .resourceKind(\"CustomResourceDefinition\")\n .build())\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .transformationRules(RestorePlanRestoreConfigTransformationRuleArgs.builder()\n .description(\"Copy environment variables from the nginx container to the install init container.\")\n .resourceFilter(RestorePlanRestoreConfigTransformationRuleResourceFilterArgs.builder()\n .groupKinds(RestorePlanRestoreConfigTransformationRuleResourceFilterGroupKindArgs.builder()\n .resourceKind(\"Pod\")\n .resourceGroup(\"\")\n .build())\n .jsonPath(\".metadata[?(@.name == 'nginx')]\")\n .build())\n .fieldActions(RestorePlanRestoreConfigTransformationRuleFieldActionArgs.builder()\n .op(\"COPY\")\n .path(\"/spec/initContainers/0/env\")\n .fromPath(\"/spec/containers/0/env\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: transform-rule-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: transform-rule\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n transformRule:\n type: gcp:gkebackup:RestorePlan\n name: transform_rule\n properties:\n name: transform-rule-rp\n description: copy nginx env variables\n labels:\n app: nginx\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n excludedNamespaces:\n namespaces:\n - my-ns\n namespacedResourceRestoreMode: DELETE_AND_RESTORE\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n excludedGroupKinds:\n - resourceGroup: apiextension.k8s.io\n resourceKind: CustomResourceDefinition\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n transformationRules:\n - description: Copy environment variables from the nginx container to the install init container.\n resourceFilter:\n groupKinds:\n - resourceKind: Pod\n resourceGroup: \"\"\n jsonPath: .metadata[?(@.name == 'nginx')]\n fieldActions:\n - op: COPY\n path: /spec/initContainers/0/env\n fromPath: /spec/containers/0/env\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Gitops Mode\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"gitops-mode-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"gitops-mode\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst gitopsMode = new gcp.gkebackup.RestorePlan(\"gitops_mode\", {\n name: \"gitops-mode\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"MERGE_SKIP_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"gitops-mode-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"gitops-mode\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\ngitops_mode = gcp.gkebackup.RestorePlan(\"gitops_mode\",\n name=\"gitops-mode\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"all_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"MERGE_SKIP_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"gitops-mode-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"gitops-mode\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var gitopsMode = new Gcp.GkeBackup.RestorePlan(\"gitops_mode\", new()\n {\n Name = \"gitops-mode\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"MERGE_SKIP_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"gitops-mode-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"gitops_mode\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"gitops-mode\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"MERGE_SKIP_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"gitops-mode-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"gitops-mode\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var gitopsMode = new RestorePlan(\"gitopsMode\", RestorePlanArgs.builder()\n .name(\"gitops-mode\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"MERGE_SKIP_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: gitops-mode-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: gitops-mode\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n gitopsMode:\n type: gcp:gkebackup:RestorePlan\n name: gitops_mode\n properties:\n name: gitops-mode\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: MERGE_SKIP_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Restore Order\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"restore-order-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"restore-order\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst restoreOrder = new gcp.gkebackup.RestorePlan(\"restore_order\", {\n name: \"restore-order\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n restoreOrder: {\n groupKindDependencies: [\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindA\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n },\n {\n satisfying: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindB\",\n },\n requiring: {\n resourceGroup: \"stable.example.com\",\n resourceKind: \"kindC\",\n },\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"restore-order-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"restore-order\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nrestore_order = gcp.gkebackup.RestorePlan(\"restore_order\",\n name=\"restore-order\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"all_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n \"restore_order\": {\n \"group_kind_dependencies\": [\n {\n \"satisfying\": {\n \"resource_group\": \"stable.example.com\",\n \"resource_kind\": \"kindA\",\n },\n \"requiring\": {\n \"resource_group\": \"stable.example.com\",\n \"resource_kind\": \"kindB\",\n },\n },\n {\n \"satisfying\": {\n \"resource_group\": \"stable.example.com\",\n \"resource_kind\": \"kindB\",\n },\n \"requiring\": {\n \"resource_group\": \"stable.example.com\",\n \"resource_kind\": \"kindC\",\n },\n },\n ],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"restore-order-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"restore-order\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var restoreOrder = new Gcp.GkeBackup.RestorePlan(\"restore_order\", new()\n {\n Name = \"restore-order\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n RestoreOrder = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderArgs\n {\n GroupKindDependencies = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindA\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n },\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs\n {\n Satisfying = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindB\",\n },\n Requiring = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs\n {\n ResourceGroup = \"stable.example.com\",\n ResourceKind = \"kindC\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"restore-order-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"restore_order\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"restore-order\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tRestoreOrder: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderArgs{\n\t\t\t\t\tGroupKindDependencies: gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArray{\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindA\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs{\n\t\t\t\t\t\t\tSatisfying: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindB\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tRequiring: \u0026gkebackup.RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs{\n\t\t\t\t\t\t\t\tResourceGroup: pulumi.String(\"stable.example.com\"),\n\t\t\t\t\t\t\t\tResourceKind: pulumi.String(\"kindC\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigRestoreOrderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"restore-order-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"restore-order\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var restoreOrder = new RestorePlan(\"restoreOrder\", RestorePlanArgs.builder()\n .name(\"restore-order\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .restoreOrder(RestorePlanRestoreConfigRestoreOrderArgs.builder()\n .groupKindDependencies( \n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindA\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .build(),\n RestorePlanRestoreConfigRestoreOrderGroupKindDependencyArgs.builder()\n .satisfying(RestorePlanRestoreConfigRestoreOrderGroupKindDependencySatisfyingArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindB\")\n .build())\n .requiring(RestorePlanRestoreConfigRestoreOrderGroupKindDependencyRequiringArgs.builder()\n .resourceGroup(\"stable.example.com\")\n .resourceKind(\"kindC\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: restore-order-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: restore-order\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n restoreOrder:\n type: gcp:gkebackup:RestorePlan\n name: restore_order\n properties:\n name: restore-order\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: RESTORE_VOLUME_DATA_FROM_BACKUP\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n restoreOrder:\n groupKindDependencies:\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindA\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindB\n - satisfying:\n resourceGroup: stable.example.com\n resourceKind: kindB\n requiring:\n resourceGroup: stable.example.com\n resourceKind: kindC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkebackup Restoreplan Volume Res\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"volume-res-cluster\",\n location: \"us-central1\",\n initialNodeCount: 1,\n workloadIdentityConfig: {\n workloadPool: \"my-project-name.svc.id.goog\",\n },\n addonsConfig: {\n gkeBackupAgentConfig: {\n enabled: true,\n },\n },\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst basic = new gcp.gkebackup.BackupPlan(\"basic\", {\n name: \"volume-res\",\n cluster: primary.id,\n location: \"us-central1\",\n backupConfig: {\n includeVolumeData: true,\n includeSecrets: true,\n allNamespaces: true,\n },\n});\nconst volumeRes = new gcp.gkebackup.RestorePlan(\"volume_res\", {\n name: \"volume-res\",\n location: \"us-central1\",\n backupPlan: basic.id,\n cluster: primary.id,\n restoreConfig: {\n allNamespaces: true,\n namespacedResourceRestoreMode: \"FAIL_ON_CONFLICT\",\n volumeDataRestorePolicy: \"NO_VOLUME_DATA_RESTORATION\",\n clusterResourceRestoreScope: {\n allGroupKinds: true,\n },\n clusterResourceConflictPolicy: \"USE_EXISTING_VERSION\",\n volumeDataRestorePolicyBindings: [{\n policy: \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n volumeType: \"GCE_PERSISTENT_DISK\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"volume-res-cluster\",\n location=\"us-central1\",\n initial_node_count=1,\n workload_identity_config={\n \"workload_pool\": \"my-project-name.svc.id.goog\",\n },\n addons_config={\n \"gke_backup_agent_config\": {\n \"enabled\": True,\n },\n },\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nbasic = gcp.gkebackup.BackupPlan(\"basic\",\n name=\"volume-res\",\n cluster=primary.id,\n location=\"us-central1\",\n backup_config={\n \"include_volume_data\": True,\n \"include_secrets\": True,\n \"all_namespaces\": True,\n })\nvolume_res = gcp.gkebackup.RestorePlan(\"volume_res\",\n name=\"volume-res\",\n location=\"us-central1\",\n backup_plan=basic.id,\n cluster=primary.id,\n restore_config={\n \"all_namespaces\": True,\n \"namespaced_resource_restore_mode\": \"FAIL_ON_CONFLICT\",\n \"volume_data_restore_policy\": \"NO_VOLUME_DATA_RESTORATION\",\n \"cluster_resource_restore_scope\": {\n \"all_group_kinds\": True,\n },\n \"cluster_resource_conflict_policy\": \"USE_EXISTING_VERSION\",\n \"volume_data_restore_policy_bindings\": [{\n \"policy\": \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n \"volume_type\": \"GCE_PERSISTENT_DISK\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"volume-res-cluster\",\n Location = \"us-central1\",\n InitialNodeCount = 1,\n WorkloadIdentityConfig = new Gcp.Container.Inputs.ClusterWorkloadIdentityConfigArgs\n {\n WorkloadPool = \"my-project-name.svc.id.goog\",\n },\n AddonsConfig = new Gcp.Container.Inputs.ClusterAddonsConfigArgs\n {\n GkeBackupAgentConfig = new Gcp.Container.Inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs\n {\n Enabled = true,\n },\n },\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var basic = new Gcp.GkeBackup.BackupPlan(\"basic\", new()\n {\n Name = \"volume-res\",\n Cluster = primary.Id,\n Location = \"us-central1\",\n BackupConfig = new Gcp.GkeBackup.Inputs.BackupPlanBackupConfigArgs\n {\n IncludeVolumeData = true,\n IncludeSecrets = true,\n AllNamespaces = true,\n },\n });\n\n var volumeRes = new Gcp.GkeBackup.RestorePlan(\"volume_res\", new()\n {\n Name = \"volume-res\",\n Location = \"us-central1\",\n BackupPlan = basic.Id,\n Cluster = primary.Id,\n RestoreConfig = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigArgs\n {\n AllNamespaces = true,\n NamespacedResourceRestoreMode = \"FAIL_ON_CONFLICT\",\n VolumeDataRestorePolicy = \"NO_VOLUME_DATA_RESTORATION\",\n ClusterResourceRestoreScope = new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs\n {\n AllGroupKinds = true,\n },\n ClusterResourceConflictPolicy = \"USE_EXISTING_VERSION\",\n VolumeDataRestorePolicyBindings = new[]\n {\n new Gcp.GkeBackup.Inputs.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs\n {\n Policy = \"RESTORE_VOLUME_DATA_FROM_BACKUP\",\n VolumeType = \"GCE_PERSISTENT_DISK\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"volume-res-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tWorkloadIdentityConfig: \u0026container.ClusterWorkloadIdentityConfigArgs{\n\t\t\t\tWorkloadPool: pulumi.String(\"my-project-name.svc.id.goog\"),\n\t\t\t},\n\t\t\tAddonsConfig: \u0026container.ClusterAddonsConfigArgs{\n\t\t\t\tGkeBackupAgentConfig: \u0026container.ClusterAddonsConfigGkeBackupAgentConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasic, err := gkebackup.NewBackupPlan(ctx, \"basic\", \u0026gkebackup.BackupPlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tCluster: primary.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupConfig: \u0026gkebackup.BackupPlanBackupConfigArgs{\n\t\t\t\tIncludeVolumeData: pulumi.Bool(true),\n\t\t\t\tIncludeSecrets: pulumi.Bool(true),\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlan(ctx, \"volume_res\", \u0026gkebackup.RestorePlanArgs{\n\t\t\tName: pulumi.String(\"volume-res\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlan: basic.ID(),\n\t\t\tCluster: primary.ID(),\n\t\t\tRestoreConfig: \u0026gkebackup.RestorePlanRestoreConfigArgs{\n\t\t\t\tAllNamespaces: pulumi.Bool(true),\n\t\t\t\tNamespacedResourceRestoreMode: pulumi.String(\"FAIL_ON_CONFLICT\"),\n\t\t\t\tVolumeDataRestorePolicy: pulumi.String(\"NO_VOLUME_DATA_RESTORATION\"),\n\t\t\t\tClusterResourceRestoreScope: \u0026gkebackup.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs{\n\t\t\t\t\tAllGroupKinds: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tClusterResourceConflictPolicy: pulumi.String(\"USE_EXISTING_VERSION\"),\n\t\t\t\tVolumeDataRestorePolicyBindings: gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArray{\n\t\t\t\t\t\u0026gkebackup.RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs{\n\t\t\t\t\t\tPolicy: pulumi.String(\"RESTORE_VOLUME_DATA_FROM_BACKUP\"),\n\t\t\t\t\t\tVolumeType: pulumi.String(\"GCE_PERSISTENT_DISK\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterWorkloadIdentityConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterAddonsConfigGkeBackupAgentConfigArgs;\nimport com.pulumi.gcp.gkebackup.BackupPlan;\nimport com.pulumi.gcp.gkebackup.BackupPlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.BackupPlanBackupConfigArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlan;\nimport com.pulumi.gcp.gkebackup.RestorePlanArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigArgs;\nimport com.pulumi.gcp.gkebackup.inputs.RestorePlanRestoreConfigClusterResourceRestoreScopeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"volume-res-cluster\")\n .location(\"us-central1\")\n .initialNodeCount(1)\n .workloadIdentityConfig(ClusterWorkloadIdentityConfigArgs.builder()\n .workloadPool(\"my-project-name.svc.id.goog\")\n .build())\n .addonsConfig(ClusterAddonsConfigArgs.builder()\n .gkeBackupAgentConfig(ClusterAddonsConfigGkeBackupAgentConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var basic = new BackupPlan(\"basic\", BackupPlanArgs.builder()\n .name(\"volume-res\")\n .cluster(primary.id())\n .location(\"us-central1\")\n .backupConfig(BackupPlanBackupConfigArgs.builder()\n .includeVolumeData(true)\n .includeSecrets(true)\n .allNamespaces(true)\n .build())\n .build());\n\n var volumeRes = new RestorePlan(\"volumeRes\", RestorePlanArgs.builder()\n .name(\"volume-res\")\n .location(\"us-central1\")\n .backupPlan(basic.id())\n .cluster(primary.id())\n .restoreConfig(RestorePlanRestoreConfigArgs.builder()\n .allNamespaces(true)\n .namespacedResourceRestoreMode(\"FAIL_ON_CONFLICT\")\n .volumeDataRestorePolicy(\"NO_VOLUME_DATA_RESTORATION\")\n .clusterResourceRestoreScope(RestorePlanRestoreConfigClusterResourceRestoreScopeArgs.builder()\n .allGroupKinds(true)\n .build())\n .clusterResourceConflictPolicy(\"USE_EXISTING_VERSION\")\n .volumeDataRestorePolicyBindings(RestorePlanRestoreConfigVolumeDataRestorePolicyBindingArgs.builder()\n .policy(\"RESTORE_VOLUME_DATA_FROM_BACKUP\")\n .volumeType(\"GCE_PERSISTENT_DISK\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: volume-res-cluster\n location: us-central1\n initialNodeCount: 1\n workloadIdentityConfig:\n workloadPool: my-project-name.svc.id.goog\n addonsConfig:\n gkeBackupAgentConfig:\n enabled: true\n deletionProtection: true\n network: default\n subnetwork: default\n basic:\n type: gcp:gkebackup:BackupPlan\n properties:\n name: volume-res\n cluster: ${primary.id}\n location: us-central1\n backupConfig:\n includeVolumeData: true\n includeSecrets: true\n allNamespaces: true\n volumeRes:\n type: gcp:gkebackup:RestorePlan\n name: volume_res\n properties:\n name: volume-res\n location: us-central1\n backupPlan: ${basic.id}\n cluster: ${primary.id}\n restoreConfig:\n allNamespaces: true\n namespacedResourceRestoreMode: FAIL_ON_CONFLICT\n volumeDataRestorePolicy: NO_VOLUME_DATA_RESTORATION\n clusterResourceRestoreScope:\n allGroupKinds: true\n clusterResourceConflictPolicy: USE_EXISTING_VERSION\n volumeDataRestorePolicyBindings:\n - policy: RESTORE_VOLUME_DATA_FROM_BACKUP\n volumeType: GCE_PERSISTENT_DISK\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRestorePlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/restorePlans/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RestorePlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlan:RestorePlan default {{location}}/{{name}}\n```\n\n",
"properties": {
- "createTime": {
+ "backupPlan": {
"type": "string",
- "description": "Output only. When the Feature resource was created.\n"
+ "description": "A reference to the BackupPlan from which Backups may be used\nas the source for Restores created via this RestorePlan.\n"
},
- "deleteTime": {
+ "cluster": {
"type": "string",
- "description": "Output only. When the Feature resource was deleted.\n"
+ "description": "The source cluster from which Restores will be created via this RestorePlan.\n"
+ },
+ "description": {
+ "type": "string",
+ "description": "User specified descriptive string for this RestorePlan.\n"
},
"effectiveLabels": {
"type": "object",
@@ -216799,28 +218085,23 @@
"description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
"secret": true
},
- "fleetDefaultMemberConfig": {
- "$ref": "#/types/gcp:gkehub/FeatureFleetDefaultMemberConfig:FeatureFleetDefaultMemberConfig",
- "description": "Optional. Fleet Default Membership Configuration.\nStructure is documented below.\n"
- },
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
- "description": "GCP labels for this Feature.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ "description": "Description: A set of custom labels supplied by the user. A list of key-\u003evalue pairs. Example: { \"name\": \"wrench\",\n\"mass\": \"1.3kg\", \"count\": \"3\" }. **Note**: This field is non-authoritative, and will only manage the labels present in\nyour configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.\n"
},
"location": {
"type": "string",
- "description": "The location for the resource\n\n\n- - -\n"
+ "description": "The region of the Restore Plan.\n"
},
"name": {
"type": "string",
- "description": "The full, unique name of this Feature resource\n"
+ "description": "The full name of the BackupPlan Resource.\n"
},
"project": {
- "type": "string",
- "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
+ "type": "string"
},
"pulumiLabels": {
"type": "object",
@@ -216830,86 +218111,99 @@
"description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
"secret": true
},
- "resourceStates": {
- "type": "array",
- "items": {
- "$ref": "#/types/gcp:gkehub/FeatureResourceState:FeatureResourceState"
- },
- "description": "State of the Feature resource itself.\nStructure is documented below.\n"
+ "restoreConfig": {
+ "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfig:RestorePlanRestoreConfig",
+ "description": "Defines the configuration of Restores created via this RestorePlan.\nStructure is documented below.\n"
},
- "spec": {
- "$ref": "#/types/gcp:gkehub/FeatureSpec:FeatureSpec",
- "description": "Optional. Hub-wide Feature configuration. If this Feature does not support any Hub-wide configuration, this field may be unused.\nStructure is documented below.\n"
+ "state": {
+ "type": "string",
+ "description": "The State of the RestorePlan.\n"
},
- "states": {
- "type": "array",
- "items": {
- "$ref": "#/types/gcp:gkehub/FeatureState:FeatureState"
- },
- "description": "(Output)\nOutput only. The \"running state\" of the Feature in this Hub.\nStructure is documented below.\n"
+ "stateReason": {
+ "type": "string",
+ "description": "Detailed description of why RestorePlan is in its current state.\n"
},
- "updateTime": {
+ "uid": {
"type": "string",
- "description": "(Output)\nThe time this status and any related Feature-specific details were updated. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\"\n"
+ "description": "Server generated, unique identifier of UUID format.\n"
}
},
"required": [
- "createTime",
- "deleteTime",
+ "backupPlan",
+ "cluster",
"effectiveLabels",
"location",
"name",
"project",
- "resourceStates",
- "states",
+ "restoreConfig",
+ "state",
+ "stateReason",
"pulumiLabels",
- "updateTime"
+ "uid"
],
"inputProperties": {
- "fleetDefaultMemberConfig": {
- "$ref": "#/types/gcp:gkehub/FeatureFleetDefaultMemberConfig:FeatureFleetDefaultMemberConfig",
- "description": "Optional. Fleet Default Membership Configuration.\nStructure is documented below.\n"
+ "backupPlan": {
+ "type": "string",
+ "description": "A reference to the BackupPlan from which Backups may be used\nas the source for Restores created via this RestorePlan.\n",
+ "willReplaceOnChanges": true
+ },
+ "cluster": {
+ "type": "string",
+ "description": "The source cluster from which Restores will be created via this RestorePlan.\n",
+ "willReplaceOnChanges": true
+ },
+ "description": {
+ "type": "string",
+ "description": "User specified descriptive string for this RestorePlan.\n"
},
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
- "description": "GCP labels for this Feature.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ "description": "Description: A set of custom labels supplied by the user. A list of key-\u003evalue pairs. Example: { \"name\": \"wrench\",\n\"mass\": \"1.3kg\", \"count\": \"3\" }. **Note**: This field is non-authoritative, and will only manage the labels present in\nyour configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.\n"
},
"location": {
"type": "string",
- "description": "The location for the resource\n\n\n- - -\n",
+ "description": "The region of the Restore Plan.\n",
"willReplaceOnChanges": true
},
"name": {
"type": "string",
- "description": "The full, unique name of this Feature resource\n",
+ "description": "The full name of the BackupPlan Resource.\n",
"willReplaceOnChanges": true
},
"project": {
"type": "string",
- "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
},
- "spec": {
- "$ref": "#/types/gcp:gkehub/FeatureSpec:FeatureSpec",
- "description": "Optional. Hub-wide Feature configuration. If this Feature does not support any Hub-wide configuration, this field may be unused.\nStructure is documented below.\n"
+ "restoreConfig": {
+ "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfig:RestorePlanRestoreConfig",
+ "description": "Defines the configuration of Restores created via this RestorePlan.\nStructure is documented below.\n"
}
},
"requiredInputs": [
- "location"
+ "backupPlan",
+ "cluster",
+ "location",
+ "restoreConfig"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering Feature resources.\n",
+ "description": "Input properties used for looking up and filtering RestorePlan resources.\n",
"properties": {
- "createTime": {
+ "backupPlan": {
"type": "string",
- "description": "Output only. When the Feature resource was created.\n"
+ "description": "A reference to the BackupPlan from which Backups may be used\nas the source for Restores created via this RestorePlan.\n",
+ "willReplaceOnChanges": true
},
- "deleteTime": {
+ "cluster": {
"type": "string",
- "description": "Output only. When the Feature resource was deleted.\n"
+ "description": "The source cluster from which Restores will be created via this RestorePlan.\n",
+ "willReplaceOnChanges": true
+ },
+ "description": {
+ "type": "string",
+ "description": "User specified descriptive string for this RestorePlan.\n"
},
"effectiveLabels": {
"type": "object",
@@ -216919,30 +218213,25 @@
"description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
"secret": true
},
- "fleetDefaultMemberConfig": {
- "$ref": "#/types/gcp:gkehub/FeatureFleetDefaultMemberConfig:FeatureFleetDefaultMemberConfig",
- "description": "Optional. Fleet Default Membership Configuration.\nStructure is documented below.\n"
- },
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
- "description": "GCP labels for this Feature.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ "description": "Description: A set of custom labels supplied by the user. A list of key-\u003evalue pairs. Example: { \"name\": \"wrench\",\n\"mass\": \"1.3kg\", \"count\": \"3\" }. **Note**: This field is non-authoritative, and will only manage the labels present in\nyour configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.\n"
},
"location": {
"type": "string",
- "description": "The location for the resource\n\n\n- - -\n",
+ "description": "The region of the Restore Plan.\n",
"willReplaceOnChanges": true
},
"name": {
"type": "string",
- "description": "The full, unique name of this Feature resource\n",
+ "description": "The full name of the BackupPlan Resource.\n",
"willReplaceOnChanges": true
},
"project": {
"type": "string",
- "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
"willReplaceOnChanges": true
},
"pulumiLabels": {
@@ -216953,37 +218242,31 @@
"description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
"secret": true
},
- "resourceStates": {
- "type": "array",
- "items": {
- "$ref": "#/types/gcp:gkehub/FeatureResourceState:FeatureResourceState"
- },
- "description": "State of the Feature resource itself.\nStructure is documented below.\n"
+ "restoreConfig": {
+ "$ref": "#/types/gcp:gkebackup/RestorePlanRestoreConfig:RestorePlanRestoreConfig",
+ "description": "Defines the configuration of Restores created via this RestorePlan.\nStructure is documented below.\n"
},
- "spec": {
- "$ref": "#/types/gcp:gkehub/FeatureSpec:FeatureSpec",
- "description": "Optional. Hub-wide Feature configuration. If this Feature does not support any Hub-wide configuration, this field may be unused.\nStructure is documented below.\n"
+ "state": {
+ "type": "string",
+ "description": "The State of the RestorePlan.\n"
},
- "states": {
- "type": "array",
- "items": {
- "$ref": "#/types/gcp:gkehub/FeatureState:FeatureState"
- },
- "description": "(Output)\nOutput only. The \"running state\" of the Feature in this Hub.\nStructure is documented below.\n"
+ "stateReason": {
+ "type": "string",
+ "description": "Detailed description of why RestorePlan is in its current state.\n"
},
- "updateTime": {
+ "uid": {
"type": "string",
- "description": "(Output)\nThe time this status and any related Feature-specific details were updated. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\"\n"
+ "description": "Server generated, unique identifier of UUID format.\n"
}
},
"type": "object"
}
},
- "gcp:gkehub/featureIamBinding:FeatureIamBinding": {
- "description": "Three different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for GKEHub Feature\nThree different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/features/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nGKEHub feature IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamBinding:FeatureIamBinding editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamBinding:FeatureIamBinding editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamBinding:FeatureIamBinding editor projects/{{project}}/locations/{{location}}/features/{{feature}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding": {
+ "description": "Three different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE RestorePlan\nThree different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE restoreplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamBinding:RestorePlanIamBinding editor projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
"properties": {
"condition": {
- "$ref": "#/types/gcp:gkehub/FeatureIamBindingCondition:FeatureIamBindingCondition"
+ "$ref": "#/types/gcp:gkebackup/RestorePlanIamBindingCondition:RestorePlanIamBindingCondition"
},
"etag": {
"type": "string",
@@ -216991,7 +218274,7 @@
},
"location": {
"type": "string",
- "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
},
"members": {
"type": "array",
@@ -217010,7 +218293,7 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
}
},
"required": [
@@ -217023,12 +218306,12 @@
],
"inputProperties": {
"condition": {
- "$ref": "#/types/gcp:gkehub/FeatureIamBindingCondition:FeatureIamBindingCondition",
+ "$ref": "#/types/gcp:gkebackup/RestorePlanIamBindingCondition:RestorePlanIamBindingCondition",
"willReplaceOnChanges": true
},
"location": {
"type": "string",
- "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"members": {
@@ -217050,7 +218333,7 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
@@ -217059,10 +218342,10 @@
"role"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering FeatureIamBinding resources.\n",
+ "description": "Input properties used for looking up and filtering RestorePlanIamBinding resources.\n",
"properties": {
"condition": {
- "$ref": "#/types/gcp:gkehub/FeatureIamBindingCondition:FeatureIamBindingCondition",
+ "$ref": "#/types/gcp:gkebackup/RestorePlanIamBindingCondition:RestorePlanIamBindingCondition",
"willReplaceOnChanges": true
},
"etag": {
@@ -217071,7 +218354,7 @@
},
"location": {
"type": "string",
- "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"members": {
@@ -217093,18 +218376,18 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
"type": "object"
}
},
- "gcp:gkehub/featureIamMember:FeatureIamMember": {
- "description": "Three different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for GKEHub Feature\nThree different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/features/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nGKEHub feature IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamMember:FeatureIamMember editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamMember:FeatureIamMember editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamMember:FeatureIamMember editor projects/{{project}}/locations/{{location}}/features/{{feature}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember": {
+ "description": "Three different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE RestorePlan\nThree different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE restoreplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamMember:RestorePlanIamMember editor projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
"properties": {
"condition": {
- "$ref": "#/types/gcp:gkehub/FeatureIamMemberCondition:FeatureIamMemberCondition"
+ "$ref": "#/types/gcp:gkebackup/RestorePlanIamMemberCondition:RestorePlanIamMemberCondition"
},
"etag": {
"type": "string",
@@ -217112,7 +218395,7 @@
},
"location": {
"type": "string",
- "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
},
"member": {
"type": "string",
@@ -217128,7 +218411,7 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
}
},
"required": [
@@ -217141,12 +218424,12 @@
],
"inputProperties": {
"condition": {
- "$ref": "#/types/gcp:gkehub/FeatureIamMemberCondition:FeatureIamMemberCondition",
+ "$ref": "#/types/gcp:gkebackup/RestorePlanIamMemberCondition:RestorePlanIamMemberCondition",
"willReplaceOnChanges": true
},
"location": {
"type": "string",
- "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"member": {
@@ -217166,7 +218449,7 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
@@ -217175,10 +218458,10 @@
"role"
],
"stateInputs": {
- "description": "Input properties used for looking up and filtering FeatureIamMember resources.\n",
+ "description": "Input properties used for looking up and filtering RestorePlanIamMember resources.\n",
"properties": {
"condition": {
- "$ref": "#/types/gcp:gkehub/FeatureIamMemberCondition:FeatureIamMemberCondition",
+ "$ref": "#/types/gcp:gkebackup/RestorePlanIamMemberCondition:RestorePlanIamMemberCondition",
"willReplaceOnChanges": true
},
"etag": {
@@ -217187,7 +218470,7 @@
},
"location": {
"type": "string",
- "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
"willReplaceOnChanges": true
},
"member": {
@@ -217207,15 +218490,15 @@
},
"role": {
"type": "string",
- "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "description": "The role that should be applied. Only one\n`gcp.gkebackup.RestorePlanIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
"willReplaceOnChanges": true
}
},
"type": "object"
}
},
- "gcp:gkehub/featureIamPolicy:FeatureIamPolicy": {
- "description": "Three different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for GKEHub Feature\nThree different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/features/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nGKEHub feature IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamPolicy:FeatureIamPolicy editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamPolicy:FeatureIamPolicy editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamPolicy:FeatureIamPolicy editor projects/{{project}}/locations/{{location}}/features/{{feature}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy": {
+ "description": "Three different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for Backup for GKE RestorePlan\nThree different resources help you manage your IAM policy for Backup for GKE RestorePlan. Each of these resources serves a different use case:\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Authoritative. Sets the IAM policy for the restoreplan and replaces any existing policy already attached.\n* `gcp.gkebackup.RestorePlanIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the restoreplan are preserved.\n* `gcp.gkebackup.RestorePlanIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the restoreplan are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkebackup.RestorePlanIamPolicy`: Retrieves the IAM policy for the restoreplan\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamPolicy` **cannot** be used in conjunction with `gcp.gkebackup.RestorePlanIamBinding` and `gcp.gkebackup.RestorePlanIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkebackup.RestorePlanIamBinding` resources **can be** used in conjunction with `gcp.gkebackup.RestorePlanIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkebackup.RestorePlanIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkebackup.RestorePlanIamPolicy(\"policy\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkebackup.RestorePlanIamPolicy(\"policy\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeBackup.RestorePlanIamPolicy(\"policy\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkebackup.NewRestorePlanIamPolicy(ctx, \"policy\", \u0026gkebackup.RestorePlanIamPolicyArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicy;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RestorePlanIamPolicy(\"policy\", RestorePlanIamPolicyArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkebackup:RestorePlanIamPolicy\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkebackup.RestorePlanIamBinding(\"binding\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkebackup.RestorePlanIamBinding(\"binding\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeBackup.RestorePlanIamBinding(\"binding\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamBinding(ctx, \"binding\", \u0026gkebackup.RestorePlanIamBindingArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBinding;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new RestorePlanIamBinding(\"binding\", RestorePlanIamBindingArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkebackup:RestorePlanIamBinding\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkebackup.RestorePlanIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkebackup.RestorePlanIamMember(\"member\", {\n project: allNs.project,\n location: allNs.location,\n name: allNs.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkebackup.RestorePlanIamMember(\"member\",\n project=all_ns[\"project\"],\n location=all_ns[\"location\"],\n name=all_ns[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeBackup.RestorePlanIamMember(\"member\", new()\n {\n Project = allNs.Project,\n Location = allNs.Location,\n Name = allNs.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.NewRestorePlanIamMember(ctx, \"member\", \u0026gkebackup.RestorePlanIamMemberArgs{\n\t\t\tProject: pulumi.Any(allNs.Project),\n\t\t\tLocation: pulumi.Any(allNs.Location),\n\t\t\tName: pulumi.Any(allNs.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMember;\nimport com.pulumi.gcp.gkebackup.RestorePlanIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new RestorePlanIamMember(\"member\", RestorePlanIamMemberArgs.builder()\n .project(allNs.project())\n .location(allNs.location())\n .name(allNs.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkebackup:RestorePlanIamMember\n properties:\n project: ${allNs.project}\n location: ${allNs.location}\n name: ${allNs.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/restorePlans/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nBackup for GKE restoreplan IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy editor \"projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkebackup/restorePlanIamPolicy:RestorePlanIamPolicy editor projects/{{project}}/locations/{{location}}/restorePlans/{{restore_plan}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
"properties": {
"etag": {
"type": "string",
@@ -217223,7 +218506,526 @@
},
"location": {
"type": "string",
- "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n"
+ },
+ "policyData": {
+ "type": "string",
+ "description": "The policy data generated by\na `gcp.organizations.getIAMPolicy` data source.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n"
+ }
+ },
+ "required": [
+ "etag",
+ "location",
+ "name",
+ "policyData",
+ "project"
+ ],
+ "inputProperties": {
+ "location": {
+ "type": "string",
+ "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ },
+ "policyData": {
+ "type": "string",
+ "description": "The policy data generated by\na `gcp.organizations.getIAMPolicy` data source.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "policyData"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering RestorePlanIamPolicy resources.\n",
+ "properties": {
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The region of the Restore Plan.\nUsed to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ },
+ "policyData": {
+ "type": "string",
+ "description": "The policy data generated by\na `gcp.organizations.getIAMPolicy` data source.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:gkehub/feature:Feature": {
+ "description": "Feature represents the settings and status of any Hub Feature.\n\n\nTo get more information about Feature, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.features)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Feature Multi Cluster Ingress\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cluster = new gcp.container.Cluster(\"cluster\", {\n name: \"my-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"my-membership\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${cluster.id}`,\n },\n },\n});\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"multiclusteringress\",\n location: \"global\",\n spec: {\n multiclusteringress: {\n configMembership: membership.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncluster = gcp.container.Cluster(\"cluster\",\n name=\"my-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1)\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"my-membership\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": cluster.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n })\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"multiclusteringress\",\n location=\"global\",\n spec={\n \"multiclusteringress\": {\n \"config_membership\": membership.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cluster = new Gcp.Container.Cluster(\"cluster\", new()\n {\n Name = \"my-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"my-membership\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = cluster.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n });\n\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"multiclusteringress\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Multiclusteringress = new Gcp.GkeHub.Inputs.FeatureSpecMulticlusteringressArgs\n {\n ConfigMembership = membership.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcluster, err := container.NewCluster(ctx, \"cluster\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"my-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"my-membership\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: cluster.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"multiclusteringress\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tMulticlusteringress: \u0026gkehub.FeatureSpecMulticlusteringressArgs{\n\t\t\t\t\tConfigMembership: membership.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecMulticlusteringressArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cluster = new Cluster(\"cluster\", ClusterArgs.builder()\n .name(\"my-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"my-membership\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(cluster.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build());\n\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"multiclusteringress\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .multiclusteringress(FeatureSpecMulticlusteringressArgs.builder()\n .configMembership(membership.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster:\n type: gcp:container:Cluster\n properties:\n name: my-cluster\n location: us-central1-a\n initialNodeCount: 1\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: my-membership\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${cluster.id}\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: multiclusteringress\n location: global\n spec:\n multiclusteringress:\n configMembership: ${membership.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkehub Feature Multi Cluster Service Discovery\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"multiclusterservicediscovery\",\n location: \"global\",\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"multiclusterservicediscovery\",\n location=\"global\",\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"multiclusterservicediscovery\",\n Location = \"global\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"multiclusterservicediscovery\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"multiclusterservicediscovery\")\n .location(\"global\")\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: multiclusterservicediscovery\n location: global\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkehub Feature Anthos Service Mesh\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"servicemesh\",\n location: \"global\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"servicemesh\",\n location=\"global\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"servicemesh\",\n Location = \"global\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"servicemesh\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"servicemesh\")\n .location(\"global\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: servicemesh\n location: global\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Observability For Default Logs With Copy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"fleetobservability\",\n location: \"global\",\n spec: {\n fleetobservability: {\n loggingConfig: {\n defaultConfig: {\n mode: \"COPY\",\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"fleetobservability\",\n location=\"global\",\n spec={\n \"fleetobservability\": {\n \"logging_config\": {\n \"default_config\": {\n \"mode\": \"COPY\",\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"fleetobservability\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Fleetobservability = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityArgs\n {\n LoggingConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigArgs\n {\n DefaultConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs\n {\n Mode = \"COPY\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"fleetobservability\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tFleetobservability: \u0026gkehub.FeatureSpecFleetobservabilityArgs{\n\t\t\t\t\tLoggingConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigArgs{\n\t\t\t\t\t\tDefaultConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs{\n\t\t\t\t\t\t\tMode: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"fleetobservability\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .fleetobservability(FeatureSpecFleetobservabilityArgs.builder()\n .loggingConfig(FeatureSpecFleetobservabilityLoggingConfigArgs.builder()\n .defaultConfig(FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs.builder()\n .mode(\"COPY\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: fleetobservability\n location: global\n spec:\n fleetobservability:\n loggingConfig:\n defaultConfig:\n mode: COPY\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Observability For Scope Logs With Move\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"fleetobservability\",\n location: \"global\",\n spec: {\n fleetobservability: {\n loggingConfig: {\n fleetScopeLogsConfig: {\n mode: \"MOVE\",\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"fleetobservability\",\n location=\"global\",\n spec={\n \"fleetobservability\": {\n \"logging_config\": {\n \"fleet_scope_logs_config\": {\n \"mode\": \"MOVE\",\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"fleetobservability\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Fleetobservability = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityArgs\n {\n LoggingConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigArgs\n {\n FleetScopeLogsConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs\n {\n Mode = \"MOVE\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"fleetobservability\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tFleetobservability: \u0026gkehub.FeatureSpecFleetobservabilityArgs{\n\t\t\t\t\tLoggingConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigArgs{\n\t\t\t\t\t\tFleetScopeLogsConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs{\n\t\t\t\t\t\t\tMode: pulumi.String(\"MOVE\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"fleetobservability\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .fleetobservability(FeatureSpecFleetobservabilityArgs.builder()\n .loggingConfig(FeatureSpecFleetobservabilityLoggingConfigArgs.builder()\n .fleetScopeLogsConfig(FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs.builder()\n .mode(\"MOVE\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: fleetobservability\n location: global\n spec:\n fleetobservability:\n loggingConfig:\n fleetScopeLogsConfig:\n mode: MOVE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Observability For Both Default And Scope Logs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"fleetobservability\",\n location: \"global\",\n spec: {\n fleetobservability: {\n loggingConfig: {\n defaultConfig: {\n mode: \"COPY\",\n },\n fleetScopeLogsConfig: {\n mode: \"MOVE\",\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"fleetobservability\",\n location=\"global\",\n spec={\n \"fleetobservability\": {\n \"logging_config\": {\n \"default_config\": {\n \"mode\": \"COPY\",\n },\n \"fleet_scope_logs_config\": {\n \"mode\": \"MOVE\",\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"fleetobservability\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Fleetobservability = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityArgs\n {\n LoggingConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigArgs\n {\n DefaultConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs\n {\n Mode = \"COPY\",\n },\n FleetScopeLogsConfig = new Gcp.GkeHub.Inputs.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs\n {\n Mode = \"MOVE\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"fleetobservability\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tFleetobservability: \u0026gkehub.FeatureSpecFleetobservabilityArgs{\n\t\t\t\t\tLoggingConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigArgs{\n\t\t\t\t\t\tDefaultConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs{\n\t\t\t\t\t\t\tMode: pulumi.String(\"COPY\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tFleetScopeLogsConfig: \u0026gkehub.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs{\n\t\t\t\t\t\t\tMode: pulumi.String(\"MOVE\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"fleetobservability\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .fleetobservability(FeatureSpecFleetobservabilityArgs.builder()\n .loggingConfig(FeatureSpecFleetobservabilityLoggingConfigArgs.builder()\n .defaultConfig(FeatureSpecFleetobservabilityLoggingConfigDefaultConfigArgs.builder()\n .mode(\"COPY\")\n .build())\n .fleetScopeLogsConfig(FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfigArgs.builder()\n .mode(\"MOVE\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: fleetobservability\n location: global\n spec:\n fleetobservability:\n loggingConfig:\n defaultConfig:\n mode: COPY\n fleetScopeLogsConfig:\n mode: MOVE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Service Mesh\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"servicemesh\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n mesh: {\n management: \"MANAGEMENT_AUTOMATIC\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"servicemesh\",\n location=\"global\",\n fleet_default_member_config={\n \"mesh\": {\n \"management\": \"MANAGEMENT_AUTOMATIC\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"servicemesh\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Mesh = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigMeshArgs\n {\n Management = \"MANAGEMENT_AUTOMATIC\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"servicemesh\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tMesh: \u0026gkehub.FeatureFleetDefaultMemberConfigMeshArgs{\n\t\t\t\t\tManagement: pulumi.String(\"MANAGEMENT_AUTOMATIC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigMeshArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"servicemesh\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .mesh(FeatureFleetDefaultMemberConfigMeshArgs.builder()\n .management(\"MANAGEMENT_AUTOMATIC\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: servicemesh\n location: global\n fleetDefaultMemberConfig:\n mesh:\n management: MANAGEMENT_AUTOMATIC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Configmanagement\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"configmanagement\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n configmanagement: {\n configSync: {\n git: {\n syncRepo: \"https://github.com/hashicorp/terraform\",\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"configmanagement\",\n location=\"global\",\n fleet_default_member_config={\n \"configmanagement\": {\n \"config_sync\": {\n \"git\": {\n \"sync_repo\": \"https://github.com/hashicorp/terraform\",\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"configmanagement\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Configmanagement = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigConfigmanagementArgs\n {\n ConfigSync = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncArgs\n {\n Git = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncGitArgs\n {\n SyncRepo = \"https://github.com/hashicorp/terraform\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"configmanagement\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tConfigmanagement: \u0026gkehub.FeatureFleetDefaultMemberConfigConfigmanagementArgs{\n\t\t\t\t\tConfigSync: \u0026gkehub.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncArgs{\n\t\t\t\t\t\tGit: \u0026gkehub.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncGitArgs{\n\t\t\t\t\t\t\tSyncRepo: pulumi.String(\"https://github.com/hashicorp/terraform\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigConfigmanagementArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncGitArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"configmanagement\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .configmanagement(FeatureFleetDefaultMemberConfigConfigmanagementArgs.builder()\n .configSync(FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncArgs.builder()\n .git(FeatureFleetDefaultMemberConfigConfigmanagementConfigSyncGitArgs.builder()\n .syncRepo(\"https://github.com/hashicorp/terraform\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: configmanagement\n location: global\n fleetDefaultMemberConfig:\n configmanagement:\n configSync:\n git:\n syncRepo: https://github.com/hashicorp/terraform\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Policycontroller\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"policycontroller\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n policycontroller: {\n policyControllerHubConfig: {\n installSpec: \"INSTALL_SPEC_ENABLED\",\n exemptableNamespaces: [\"foo\"],\n policyContent: {\n bundles: [{\n bundle: \"policy-essentials-v2022\",\n exemptedNamespaces: [\n \"foo\",\n \"bar\",\n ],\n }],\n templateLibrary: {\n installation: \"ALL\",\n },\n },\n auditIntervalSeconds: 30,\n referentialRulesEnabled: true,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"policycontroller\",\n location=\"global\",\n fleet_default_member_config={\n \"policycontroller\": {\n \"policy_controller_hub_config\": {\n \"install_spec\": \"INSTALL_SPEC_ENABLED\",\n \"exemptable_namespaces\": [\"foo\"],\n \"policy_content\": {\n \"bundles\": [{\n \"bundle\": \"policy-essentials-v2022\",\n \"exempted_namespaces\": [\n \"foo\",\n \"bar\",\n ],\n }],\n \"template_library\": {\n \"installation\": \"ALL\",\n },\n },\n \"audit_interval_seconds\": 30,\n \"referential_rules_enabled\": True,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"policycontroller\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Policycontroller = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs\n {\n PolicyControllerHubConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs\n {\n InstallSpec = \"INSTALL_SPEC_ENABLED\",\n ExemptableNamespaces = new[]\n {\n \"foo\",\n },\n PolicyContent = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs\n {\n Bundles = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs\n {\n Bundle = \"policy-essentials-v2022\",\n ExemptedNamespaces = new[]\n {\n \"foo\",\n \"bar\",\n },\n },\n },\n TemplateLibrary = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs\n {\n Installation = \"ALL\",\n },\n },\n AuditIntervalSeconds = 30,\n ReferentialRulesEnabled = true,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"policycontroller\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tPolicycontroller: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerArgs{\n\t\t\t\t\tPolicyControllerHubConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs{\n\t\t\t\t\t\tInstallSpec: pulumi.String(\"INSTALL_SPEC_ENABLED\"),\n\t\t\t\t\t\tExemptableNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPolicyContent: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs{\n\t\t\t\t\t\t\tBundles: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArray{\n\t\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs{\n\t\t\t\t\t\t\t\t\tBundle: pulumi.String(\"policy-essentials-v2022\"),\n\t\t\t\t\t\t\t\t\tExemptedNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tTemplateLibrary: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs{\n\t\t\t\t\t\t\t\tInstallation: pulumi.String(\"ALL\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tAuditIntervalSeconds: pulumi.Int(30),\n\t\t\t\t\t\tReferentialRulesEnabled: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"policycontroller\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .policycontroller(FeatureFleetDefaultMemberConfigPolicycontrollerArgs.builder()\n .policyControllerHubConfig(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs.builder()\n .installSpec(\"INSTALL_SPEC_ENABLED\")\n .exemptableNamespaces(\"foo\")\n .policyContent(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs.builder()\n .bundles(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs.builder()\n .bundle(\"policy-essentials-v2022\")\n .exemptedNamespaces( \n \"foo\",\n \"bar\")\n .build())\n .templateLibrary(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.builder()\n .installation(\"ALL\")\n .build())\n .build())\n .auditIntervalSeconds(30)\n .referentialRulesEnabled(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: policycontroller\n location: global\n fleetDefaultMemberConfig:\n policycontroller:\n policyControllerHubConfig:\n installSpec: INSTALL_SPEC_ENABLED\n exemptableNamespaces:\n - foo\n policyContent:\n bundles:\n - bundle: policy-essentials-v2022\n exemptedNamespaces:\n - foo\n - bar\n templateLibrary:\n installation: ALL\n auditIntervalSeconds: 30\n referentialRulesEnabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Policycontroller Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"policycontroller\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n policycontroller: {\n policyControllerHubConfig: {\n installSpec: \"INSTALL_SPEC_SUSPENDED\",\n policyContent: {\n bundles: [\n {\n bundle: \"pci-dss-v3.2.1\",\n exemptedNamespaces: [\n \"baz\",\n \"bar\",\n ],\n },\n {\n bundle: \"nist-sp-800-190\",\n exemptedNamespaces: [],\n },\n ],\n templateLibrary: {\n installation: \"ALL\",\n },\n },\n constraintViolationLimit: 50,\n referentialRulesEnabled: true,\n logDeniesEnabled: true,\n mutationEnabled: true,\n deploymentConfigs: [\n {\n component: \"admission\",\n replicaCount: 2,\n podAffinity: \"ANTI_AFFINITY\",\n },\n {\n component: \"audit\",\n containerResources: {\n limits: {\n memory: \"1Gi\",\n cpu: \"1.5\",\n },\n requests: {\n memory: \"500Mi\",\n cpu: \"150m\",\n },\n },\n podTolerations: [{\n key: \"key1\",\n operator: \"Equal\",\n value: \"value1\",\n effect: \"NoSchedule\",\n }],\n },\n ],\n monitoring: {\n backends: [\"PROMETHEUS\"],\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"policycontroller\",\n location=\"global\",\n fleet_default_member_config={\n \"policycontroller\": {\n \"policy_controller_hub_config\": {\n \"install_spec\": \"INSTALL_SPEC_SUSPENDED\",\n \"policy_content\": {\n \"bundles\": [\n {\n \"bundle\": \"pci-dss-v3.2.1\",\n \"exempted_namespaces\": [\n \"baz\",\n \"bar\",\n ],\n },\n {\n \"bundle\": \"nist-sp-800-190\",\n \"exempted_namespaces\": [],\n },\n ],\n \"template_library\": {\n \"installation\": \"ALL\",\n },\n },\n \"constraint_violation_limit\": 50,\n \"referential_rules_enabled\": True,\n \"log_denies_enabled\": True,\n \"mutation_enabled\": True,\n \"deployment_configs\": [\n {\n \"component\": \"admission\",\n \"replica_count\": 2,\n \"pod_affinity\": \"ANTI_AFFINITY\",\n },\n {\n \"component\": \"audit\",\n \"container_resources\": {\n \"limits\": {\n \"memory\": \"1Gi\",\n \"cpu\": \"1.5\",\n },\n \"requests\": {\n \"memory\": \"500Mi\",\n \"cpu\": \"150m\",\n },\n },\n \"pod_tolerations\": [{\n \"key\": \"key1\",\n \"operator\": \"Equal\",\n \"value\": \"value1\",\n \"effect\": \"NoSchedule\",\n }],\n },\n ],\n \"monitoring\": {\n \"backends\": [\"PROMETHEUS\"],\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"policycontroller\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Policycontroller = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs\n {\n PolicyControllerHubConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs\n {\n InstallSpec = \"INSTALL_SPEC_SUSPENDED\",\n PolicyContent = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs\n {\n Bundles = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs\n {\n Bundle = \"pci-dss-v3.2.1\",\n ExemptedNamespaces = new[]\n {\n \"baz\",\n \"bar\",\n },\n },\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs\n {\n Bundle = \"nist-sp-800-190\",\n ExemptedNamespaces = new() { },\n },\n },\n TemplateLibrary = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs\n {\n Installation = \"ALL\",\n },\n },\n ConstraintViolationLimit = 50,\n ReferentialRulesEnabled = true,\n LogDeniesEnabled = true,\n MutationEnabled = true,\n DeploymentConfigs = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs\n {\n Component = \"admission\",\n ReplicaCount = 2,\n PodAffinity = \"ANTI_AFFINITY\",\n },\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs\n {\n Component = \"audit\",\n ContainerResources = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesArgs\n {\n Limits = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesLimitsArgs\n {\n Memory = \"1Gi\",\n Cpu = \"1.5\",\n },\n Requests = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesRequestsArgs\n {\n Memory = \"500Mi\",\n Cpu = \"150m\",\n },\n },\n PodTolerations = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigPodTolerationArgs\n {\n Key = \"key1\",\n Operator = \"Equal\",\n Value = \"value1\",\n Effect = \"NoSchedule\",\n },\n },\n },\n },\n Monitoring = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs\n {\n Backends = new[]\n {\n \"PROMETHEUS\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"policycontroller\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tPolicycontroller: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerArgs{\n\t\t\t\t\tPolicyControllerHubConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs{\n\t\t\t\t\t\tInstallSpec: pulumi.String(\"INSTALL_SPEC_SUSPENDED\"),\n\t\t\t\t\t\tPolicyContent: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs{\n\t\t\t\t\t\t\tBundles: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArray{\n\t\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs{\n\t\t\t\t\t\t\t\t\tBundle: pulumi.String(\"pci-dss-v3.2.1\"),\n\t\t\t\t\t\t\t\t\tExemptedNamespaces: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"baz\"),\n\t\t\t\t\t\t\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs{\n\t\t\t\t\t\t\t\t\tBundle: pulumi.String(\"nist-sp-800-190\"),\n\t\t\t\t\t\t\t\t\tExemptedNamespaces: pulumi.StringArray{},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tTemplateLibrary: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs{\n\t\t\t\t\t\t\t\tInstallation: pulumi.String(\"ALL\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tConstraintViolationLimit: pulumi.Int(50),\n\t\t\t\t\t\tReferentialRulesEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tLogDeniesEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tMutationEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tDeploymentConfigs: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArray{\n\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs{\n\t\t\t\t\t\t\t\tComponent: pulumi.String(\"admission\"),\n\t\t\t\t\t\t\t\tReplicaCount: pulumi.Int(2),\n\t\t\t\t\t\t\t\tPodAffinity: pulumi.String(\"ANTI_AFFINITY\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs{\n\t\t\t\t\t\t\t\tComponent: pulumi.String(\"audit\"),\n\t\t\t\t\t\t\t\tContainerResources: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesArgs{\n\t\t\t\t\t\t\t\t\tLimits: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesLimitsArgs{\n\t\t\t\t\t\t\t\t\t\tMemory: pulumi.String(\"1Gi\"),\n\t\t\t\t\t\t\t\t\t\tCpu: pulumi.String(\"1.5\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tRequests: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesRequestsArgs{\n\t\t\t\t\t\t\t\t\t\tMemory: pulumi.String(\"500Mi\"),\n\t\t\t\t\t\t\t\t\t\tCpu: pulumi.String(\"150m\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tPodTolerations: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigPodTolerationArray{\n\t\t\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigPodTolerationArgs{\n\t\t\t\t\t\t\t\t\t\tKey: pulumi.String(\"key1\"),\n\t\t\t\t\t\t\t\t\t\tOperator: pulumi.String(\"Equal\"),\n\t\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"value1\"),\n\t\t\t\t\t\t\t\t\t\tEffect: pulumi.String(\"NoSchedule\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMonitoring: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs{\n\t\t\t\t\t\t\tBackends: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"PROMETHEUS\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"policycontroller\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .policycontroller(FeatureFleetDefaultMemberConfigPolicycontrollerArgs.builder()\n .policyControllerHubConfig(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs.builder()\n .installSpec(\"INSTALL_SPEC_SUSPENDED\")\n .policyContent(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs.builder()\n .bundles( \n FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs.builder()\n .bundle(\"pci-dss-v3.2.1\")\n .exemptedNamespaces( \n \"baz\",\n \"bar\")\n .build(),\n FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentBundleArgs.builder()\n .bundle(\"nist-sp-800-190\")\n .exemptedNamespaces()\n .build())\n .templateLibrary(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.builder()\n .installation(\"ALL\")\n .build())\n .build())\n .constraintViolationLimit(50)\n .referentialRulesEnabled(true)\n .logDeniesEnabled(true)\n .mutationEnabled(true)\n .deploymentConfigs( \n FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs.builder()\n .component(\"admission\")\n .replicaCount(2)\n .podAffinity(\"ANTI_AFFINITY\")\n .build(),\n FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs.builder()\n .component(\"audit\")\n .containerResources(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesArgs.builder()\n .limits(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesLimitsArgs.builder()\n .memory(\"1Gi\")\n .cpu(\"1.5\")\n .build())\n .requests(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigContainerResourcesRequestsArgs.builder()\n .memory(\"500Mi\")\n .cpu(\"150m\")\n .build())\n .build())\n .podTolerations(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigPodTolerationArgs.builder()\n .key(\"key1\")\n .operator(\"Equal\")\n .value(\"value1\")\n .effect(\"NoSchedule\")\n .build())\n .build())\n .monitoring(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs.builder()\n .backends(\"PROMETHEUS\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: policycontroller\n location: global\n fleetDefaultMemberConfig:\n policycontroller:\n policyControllerHubConfig:\n installSpec: INSTALL_SPEC_SUSPENDED\n policyContent:\n bundles:\n - bundle: pci-dss-v3.2.1\n exemptedNamespaces:\n - baz\n - bar\n - bundle: nist-sp-800-190\n exemptedNamespaces: []\n templateLibrary:\n installation: ALL\n constraintViolationLimit: 50\n referentialRulesEnabled: true\n logDeniesEnabled: true\n mutationEnabled: true\n deploymentConfigs:\n - component: admission\n replicaCount: 2\n podAffinity: ANTI_AFFINITY\n - component: audit\n containerResources:\n limits:\n memory: 1Gi\n cpu: '1.5'\n requests:\n memory: 500Mi\n cpu: 150m\n podTolerations:\n - key: key1\n operator: Equal\n value: value1\n effect: NoSchedule\n monitoring:\n backends:\n - PROMETHEUS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Enable Fleet Default Member Config Policycontroller Minimal\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"policycontroller\",\n location: \"global\",\n fleetDefaultMemberConfig: {\n policycontroller: {\n policyControllerHubConfig: {\n installSpec: \"INSTALL_SPEC_ENABLED\",\n policyContent: {},\n constraintViolationLimit: 50,\n referentialRulesEnabled: true,\n logDeniesEnabled: true,\n mutationEnabled: true,\n deploymentConfigs: [{\n component: \"admission\",\n }],\n monitoring: {},\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"policycontroller\",\n location=\"global\",\n fleet_default_member_config={\n \"policycontroller\": {\n \"policy_controller_hub_config\": {\n \"install_spec\": \"INSTALL_SPEC_ENABLED\",\n \"policy_content\": {},\n \"constraint_violation_limit\": 50,\n \"referential_rules_enabled\": True,\n \"log_denies_enabled\": True,\n \"mutation_enabled\": True,\n \"deployment_configs\": [{\n \"component\": \"admission\",\n }],\n \"monitoring\": {},\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"policycontroller\",\n Location = \"global\",\n FleetDefaultMemberConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigArgs\n {\n Policycontroller = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs\n {\n PolicyControllerHubConfig = new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs\n {\n InstallSpec = \"INSTALL_SPEC_ENABLED\",\n PolicyContent = null,\n ConstraintViolationLimit = 50,\n ReferentialRulesEnabled = true,\n LogDeniesEnabled = true,\n MutationEnabled = true,\n DeploymentConfigs = new[]\n {\n new Gcp.GkeHub.Inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs\n {\n Component = \"admission\",\n },\n },\n Monitoring = null,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"policycontroller\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tFleetDefaultMemberConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigArgs{\n\t\t\t\tPolicycontroller: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerArgs{\n\t\t\t\t\tPolicyControllerHubConfig: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs{\n\t\t\t\t\t\tInstallSpec: pulumi.String(\"INSTALL_SPEC_ENABLED\"),\n\t\t\t\t\t\tPolicyContent: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs{},\n\t\t\t\t\t\tConstraintViolationLimit: pulumi.Int(50),\n\t\t\t\t\t\tReferentialRulesEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tLogDeniesEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tMutationEnabled: pulumi.Bool(true),\n\t\t\t\t\t\tDeploymentConfigs: gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArray{\n\t\t\t\t\t\t\t\u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs{\n\t\t\t\t\t\t\t\tComponent: pulumi.String(\"admission\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMonitoring: \u0026gkehub.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigMonitoringArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"policycontroller\")\n .location(\"global\")\n .fleetDefaultMemberConfig(FeatureFleetDefaultMemberConfigArgs.builder()\n .policycontroller(FeatureFleetDefaultMemberConfigPolicycontrollerArgs.builder()\n .policyControllerHubConfig(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigArgs.builder()\n .installSpec(\"INSTALL_SPEC_ENABLED\")\n .policyContent()\n .constraintViolationLimit(50)\n .referentialRulesEnabled(true)\n .logDeniesEnabled(true)\n .mutationEnabled(true)\n .deploymentConfigs(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigDeploymentConfigArgs.builder()\n .component(\"admission\")\n .build())\n .monitoring()\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: policycontroller\n location: global\n fleetDefaultMemberConfig:\n policycontroller:\n policyControllerHubConfig:\n installSpec: INSTALL_SPEC_ENABLED\n policyContent: {}\n constraintViolationLimit: 50\n referentialRulesEnabled: true\n logDeniesEnabled: true\n mutationEnabled: true\n deploymentConfigs:\n - component: admission\n monitoring: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Gkehub Feature Clusterupgrade\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst feature = new gcp.gkehub.Feature(\"feature\", {\n name: \"clusterupgrade\",\n location: \"global\",\n spec: {\n clusterupgrade: {\n upstreamFleets: [],\n postConditions: {\n soaking: \"60s\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeature = gcp.gkehub.Feature(\"feature\",\n name=\"clusterupgrade\",\n location=\"global\",\n spec={\n \"clusterupgrade\": {\n \"upstream_fleets\": [],\n \"post_conditions\": {\n \"soaking\": \"60s\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var feature = new Gcp.GkeHub.Feature(\"feature\", new()\n {\n Name = \"clusterupgrade\",\n Location = \"global\",\n Spec = new Gcp.GkeHub.Inputs.FeatureSpecArgs\n {\n Clusterupgrade = new Gcp.GkeHub.Inputs.FeatureSpecClusterupgradeArgs\n {\n UpstreamFleets = new() { },\n PostConditions = new Gcp.GkeHub.Inputs.FeatureSpecClusterupgradePostConditionsArgs\n {\n Soaking = \"60s\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeature(ctx, \"feature\", \u0026gkehub.FeatureArgs{\n\t\t\tName: pulumi.String(\"clusterupgrade\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tSpec: \u0026gkehub.FeatureSpecArgs{\n\t\t\t\tClusterupgrade: \u0026gkehub.FeatureSpecClusterupgradeArgs{\n\t\t\t\t\tUpstreamFleets: pulumi.StringArray{},\n\t\t\t\t\tPostConditions: \u0026gkehub.FeatureSpecClusterupgradePostConditionsArgs{\n\t\t\t\t\t\tSoaking: pulumi.String(\"60s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Feature;\nimport com.pulumi.gcp.gkehub.FeatureArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecClusterupgradeArgs;\nimport com.pulumi.gcp.gkehub.inputs.FeatureSpecClusterupgradePostConditionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var feature = new Feature(\"feature\", FeatureArgs.builder()\n .name(\"clusterupgrade\")\n .location(\"global\")\n .spec(FeatureSpecArgs.builder()\n .clusterupgrade(FeatureSpecClusterupgradeArgs.builder()\n .upstreamFleets()\n .postConditions(FeatureSpecClusterupgradePostConditionsArgs.builder()\n .soaking(\"60s\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n feature:\n type: gcp:gkehub:Feature\n properties:\n name: clusterupgrade\n location: global\n spec:\n clusterupgrade:\n upstreamFleets: []\n postConditions:\n soaking: 60s\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFeature can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/features/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Feature can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/feature:Feature default projects/{{project}}/locations/{{location}}/features/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/feature:Feature default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/feature:Feature default {{location}}/{{name}}\n```\n\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "Output only. When the Feature resource was created.\n"
+ },
+ "deleteTime": {
+ "type": "string",
+ "description": "Output only. When the Feature resource was deleted.\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "fleetDefaultMemberConfig": {
+ "$ref": "#/types/gcp:gkehub/FeatureFleetDefaultMemberConfig:FeatureFleetDefaultMemberConfig",
+ "description": "Optional. Fleet Default Membership Configuration.\nStructure is documented below.\n"
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "GCP labels for this Feature.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource\n\n\n- - -\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The full, unique name of this Feature resource\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "resourceStates": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:gkehub/FeatureResourceState:FeatureResourceState"
+ },
+ "description": "State of the Feature resource itself.\nStructure is documented below.\n"
+ },
+ "spec": {
+ "$ref": "#/types/gcp:gkehub/FeatureSpec:FeatureSpec",
+ "description": "Optional. Hub-wide Feature configuration. If this Feature does not support any Hub-wide configuration, this field may be unused.\nStructure is documented below.\n"
+ },
+ "states": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:gkehub/FeatureState:FeatureState"
+ },
+ "description": "(Output)\nOutput only. The \"running state\" of the Feature in this Hub.\nStructure is documented below.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "(Output)\nThe time this status and any related Feature-specific details were updated. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\"\n"
+ }
+ },
+ "required": [
+ "createTime",
+ "deleteTime",
+ "effectiveLabels",
+ "location",
+ "name",
+ "project",
+ "resourceStates",
+ "states",
+ "pulumiLabels",
+ "updateTime"
+ ],
+ "inputProperties": {
+ "fleetDefaultMemberConfig": {
+ "$ref": "#/types/gcp:gkehub/FeatureFleetDefaultMemberConfig:FeatureFleetDefaultMemberConfig",
+ "description": "Optional. Fleet Default Membership Configuration.\nStructure is documented below.\n"
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "GCP labels for this Feature.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "The full, unique name of this Feature resource\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "spec": {
+ "$ref": "#/types/gcp:gkehub/FeatureSpec:FeatureSpec",
+ "description": "Optional. Hub-wide Feature configuration. If this Feature does not support any Hub-wide configuration, this field may be unused.\nStructure is documented below.\n"
+ }
+ },
+ "requiredInputs": [
+ "location"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering Feature resources.\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "Output only. When the Feature resource was created.\n"
+ },
+ "deleteTime": {
+ "type": "string",
+ "description": "Output only. When the Feature resource was deleted.\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "fleetDefaultMemberConfig": {
+ "$ref": "#/types/gcp:gkehub/FeatureFleetDefaultMemberConfig:FeatureFleetDefaultMemberConfig",
+ "description": "Optional. Fleet Default Membership Configuration.\nStructure is documented below.\n"
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "GCP labels for this Feature.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "The full, unique name of this Feature resource\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "resourceStates": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:gkehub/FeatureResourceState:FeatureResourceState"
+ },
+ "description": "State of the Feature resource itself.\nStructure is documented below.\n"
+ },
+ "spec": {
+ "$ref": "#/types/gcp:gkehub/FeatureSpec:FeatureSpec",
+ "description": "Optional. Hub-wide Feature configuration. If this Feature does not support any Hub-wide configuration, this field may be unused.\nStructure is documented below.\n"
+ },
+ "states": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:gkehub/FeatureState:FeatureState"
+ },
+ "description": "(Output)\nOutput only. The \"running state\" of the Feature in this Hub.\nStructure is documented below.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "(Output)\nThe time this status and any related Feature-specific details were updated. A timestamp in RFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional digits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\"\n"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:gkehub/featureIamBinding:FeatureIamBinding": {
+ "description": "Three different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for GKEHub Feature\nThree different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/features/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nGKEHub feature IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamBinding:FeatureIamBinding editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamBinding:FeatureIamBinding editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamBinding:FeatureIamBinding editor projects/{{project}}/locations/{{location}}/features/{{feature}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "properties": {
+ "condition": {
+ "$ref": "#/types/gcp:gkehub/FeatureIamBindingCondition:FeatureIamBindingCondition"
+ },
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ },
+ "members": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n"
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ }
+ },
+ "required": [
+ "etag",
+ "location",
+ "members",
+ "name",
+ "project",
+ "role"
+ ],
+ "inputProperties": {
+ "condition": {
+ "$ref": "#/types/gcp:gkehub/FeatureIamBindingCondition:FeatureIamBindingCondition",
+ "willReplaceOnChanges": true
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "willReplaceOnChanges": true
+ },
+ "members": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "members",
+ "role"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering FeatureIamBinding resources.\n",
+ "properties": {
+ "condition": {
+ "$ref": "#/types/gcp:gkehub/FeatureIamBindingCondition:FeatureIamBindingCondition",
+ "willReplaceOnChanges": true
+ },
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "willReplaceOnChanges": true
+ },
+ "members": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:gkehub/featureIamMember:FeatureIamMember": {
+ "description": "Three different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for GKEHub Feature\nThree different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/features/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nGKEHub feature IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamMember:FeatureIamMember editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamMember:FeatureIamMember editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamMember:FeatureIamMember editor projects/{{project}}/locations/{{location}}/features/{{feature}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "properties": {
+ "condition": {
+ "$ref": "#/types/gcp:gkehub/FeatureIamMemberCondition:FeatureIamMemberCondition"
+ },
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
+ },
+ "member": {
+ "type": "string",
+ "description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n"
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ }
+ },
+ "required": [
+ "etag",
+ "location",
+ "member",
+ "name",
+ "project",
+ "role"
+ ],
+ "inputProperties": {
+ "condition": {
+ "$ref": "#/types/gcp:gkehub/FeatureIamMemberCondition:FeatureIamMemberCondition",
+ "willReplaceOnChanges": true
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "willReplaceOnChanges": true
+ },
+ "member": {
+ "type": "string",
+ "description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "member",
+ "role"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering FeatureIamMember resources.\n",
+ "properties": {
+ "condition": {
+ "$ref": "#/types/gcp:gkehub/FeatureIamMemberCondition:FeatureIamMemberCondition",
+ "willReplaceOnChanges": true
+ },
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "willReplaceOnChanges": true
+ },
+ "member": {
+ "type": "string",
+ "description": "Identities that will be granted the privilege in `role`.\nEach entry can have one of the following values:\n* **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.\n* **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* **projectOwner:projectid**: Owners of the given project. For example, \"projectOwner:my-example-project\"\n* **projectEditor:projectid**: Editors of the given project. For example, \"projectEditor:my-example-project\"\n* **projectViewer:projectid**: Viewers of the given project. For example, \"projectViewer:my-example-project\"\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.gkehub.FeatureIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:gkehub/featureIamPolicy:FeatureIamPolicy": {
+ "description": "Three different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n## This resource supports User Project Overrides.\n\n-\n\n# IAM policy for GKEHub Feature\nThree different resources help you manage your IAM policy for GKEHub Feature. Each of these resources serves a different use case:\n\n* `gcp.gkehub.FeatureIamPolicy`: Authoritative. Sets the IAM policy for the feature and replaces any existing policy already attached.\n* `gcp.gkehub.FeatureIamBinding`: Authoritative for a given role. Updates the IAM policy to grant a role to a list of members. Other roles within the IAM policy for the feature are preserved.\n* `gcp.gkehub.FeatureIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the feature are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.gkehub.FeatureIamPolicy`: Retrieves the IAM policy for the feature\n\n\u003e **Note:** `gcp.gkehub.FeatureIamPolicy` **cannot** be used in conjunction with `gcp.gkehub.FeatureIamBinding` and `gcp.gkehub.FeatureIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.gkehub.FeatureIamBinding` resources **can be** used in conjunction with `gcp.gkehub.FeatureIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.gkehub.FeatureIamPolicy\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.gkehub.FeatureIamPolicy(\"policy\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[{\n \"role\": \"roles/viewer\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.gkehub.FeatureIamPolicy(\"policy\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.GkeHub.FeatureIamPolicy(\"policy\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/viewer\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewFeatureIamPolicy(ctx, \"policy\", \u0026gkehub.FeatureIamPolicyArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tPolicyData: pulumi.String(admin.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicy;\nimport com.pulumi.gcp.gkehub.FeatureIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new FeatureIamPolicy(\"policy\", FeatureIamPolicyArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:gkehub:FeatureIamPolicy\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n function: gcp:organizations:getIAMPolicy\n arguments:\n bindings:\n - role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamBinding\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.gkehub.FeatureIamBinding(\"binding\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.gkehub.FeatureIamBinding(\"binding\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.GkeHub.FeatureIamBinding(\"binding\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamBinding(ctx, \"binding\", \u0026gkehub.FeatureIamBindingArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamBinding;\nimport com.pulumi.gcp.gkehub.FeatureIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var binding = new FeatureIamBinding(\"binding\", FeatureIamBindingArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:gkehub:FeatureIamBinding\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.gkehub.FeatureIamMember\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.gkehub.FeatureIamMember(\"member\", {\n project: feature.project,\n location: feature.location,\n name: feature.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.gkehub.FeatureIamMember(\"member\",\n project=feature[\"project\"],\n location=feature[\"location\"],\n name=feature[\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.GkeHub.FeatureIamMember(\"member\", new()\n {\n Project = feature.Project,\n Location = feature.Location,\n Name = feature.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkehub.NewFeatureIamMember(ctx, \"member\", \u0026gkehub.FeatureIamMemberArgs{\n\t\t\tProject: pulumi.Any(feature.Project),\n\t\t\tLocation: pulumi.Any(feature.Location),\n\t\t\tName: pulumi.Any(feature.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.FeatureIamMember;\nimport com.pulumi.gcp.gkehub.FeatureIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var member = new FeatureIamMember(\"member\", FeatureIamMemberArgs.builder()\n .project(feature.project())\n .location(feature.location())\n .name(feature.name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:gkehub:FeatureIamMember\n properties:\n project: ${feature.project}\n location: ${feature.location}\n name: ${feature.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* projects/{{project}}/locations/{{location}}/features/{{name}}\n\n* {{project}}/{{location}}/{{name}}\n\n* {{location}}/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nGKEHub feature IAM resources can be imported using the resource identifiers, role, and member.\n\nIAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamPolicy:FeatureIamPolicy editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer user:jane@example.com\"\n```\n\nIAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamPolicy:FeatureIamPolicy editor \"projects/{{project}}/locations/{{location}}/features/{{feature}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:gkehub/featureIamPolicy:FeatureIamPolicy editor projects/{{project}}/locations/{{location}}/features/{{feature}}\n```\n\n-\u003e **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the\n\n full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.\n\n",
+ "properties": {
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location for the resource Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n"
},
"name": {
"type": "string",
@@ -217702,7 +219504,7 @@
}
},
"gcp:gkehub/membershipBinding:MembershipBinding": {
- "description": "MembershipBinding is a subresource of a Membership, representing what Fleet Scopes (or other, future Fleet resources) a Membership is bound to.\n\n\nTo get more information about MembershipBinding, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.memberships.bindings)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Membership Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"tf-test-membership_9106\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`,\n },\n },\n}, {\n dependsOn: [primary],\n});\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_27169\"});\nconst membershipBinding = new gcp.gkehub.MembershipBinding(\"membership_binding\", {\n membershipBindingId: \"tf-test-membership-binding_75223\",\n scope: scope.name,\n membershipId: membership.membershipId,\n location: \"global\",\n labels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n}, {\n dependsOn: [\n membership,\n scope,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1,\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"tf-test-membership_9106\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": primary.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[primary]))\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_27169\")\nmembership_binding = gcp.gkehub.MembershipBinding(\"membership_binding\",\n membership_binding_id=\"tf-test-membership-binding_75223\",\n scope=scope.name,\n membership_id=membership.membership_id,\n location=\"global\",\n labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n opts = pulumi.ResourceOptions(depends_on=[\n membership,\n scope,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"tf-test-membership_9106\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = primary.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n primary,\n },\n });\n\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_27169\",\n });\n\n var membershipBinding = new Gcp.GkeHub.MembershipBinding(\"membership_binding\", new()\n {\n MembershipBindingId = \"tf-test-membership-binding_75223\",\n Scope = scope.Name,\n MembershipId = membership.MembershipId,\n Location = \"global\",\n Labels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n membership,\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"tf-test-membership_9106\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: primary.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_27169\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewMembershipBinding(ctx, \"membership_binding\", \u0026gkehub.MembershipBindingArgs{\n\t\t\tMembershipBindingId: pulumi.String(\"tf-test-membership-binding_75223\"),\n\t\t\tScope: scope.Name,\n\t\t\tMembershipId: membership.MembershipId,\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmembership,\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.MembershipBinding;\nimport com.pulumi.gcp.gkehub.MembershipBindingArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"tf-test-membership_9106\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(primary.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(primary)\n .build());\n\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_27169\")\n .build());\n\n var membershipBinding = new MembershipBinding(\"membershipBinding\", MembershipBindingArgs.builder()\n .membershipBindingId(\"tf-test-membership-binding_75223\")\n .scope(scope.name())\n .membershipId(membership.membershipId())\n .location(\"global\")\n .labels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n membership,\n scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1-a\n initialNodeCount: 1\n deletionProtection: true\n network: default\n subnetwork: default\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: tf-test-membership_9106\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${primary.id}\n options:\n dependsOn:\n - ${primary}\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_27169\n membershipBinding:\n type: gcp:gkehub:MembershipBinding\n name: membership_binding\n properties:\n membershipBindingId: tf-test-membership-binding_75223\n scope: ${scope.name}\n membershipId: ${membership.membershipId}\n location: global\n labels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n options:\n dependsOn:\n - ${membership}\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMembershipBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}`\n\n* `{{project}}/{{location}}/{{membership_id}}/{{membership_binding_id}}`\n\n* `{{location}}/{{membership_id}}/{{membership_binding_id}}`\n\nWhen using the `pulumi import` command, MembershipBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default {{project}}/{{location}}/{{membership_id}}/{{membership_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default {{location}}/{{membership_id}}/{{membership_binding_id}}\n```\n\n",
+ "description": "MembershipBinding is a subresource of a Membership, representing what Fleet Scopes (or other, future Fleet resources) a Membership is bound to.\n\n\nTo get more information about MembershipBinding, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.memberships.bindings)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Membership Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"tf-test-membership_27169\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`,\n },\n },\n}, {\n dependsOn: [primary],\n});\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_75223\"});\nconst membershipBinding = new gcp.gkehub.MembershipBinding(\"membership_binding\", {\n membershipBindingId: \"tf-test-membership-binding_41819\",\n scope: scope.name,\n membershipId: membership.membershipId,\n location: \"global\",\n labels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n}, {\n dependsOn: [\n membership,\n scope,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1,\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"tf-test-membership_27169\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": primary.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[primary]))\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_75223\")\nmembership_binding = gcp.gkehub.MembershipBinding(\"membership_binding\",\n membership_binding_id=\"tf-test-membership-binding_41819\",\n scope=scope.name,\n membership_id=membership.membership_id,\n location=\"global\",\n labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n opts = pulumi.ResourceOptions(depends_on=[\n membership,\n scope,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"tf-test-membership_27169\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = primary.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n primary,\n },\n });\n\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_75223\",\n });\n\n var membershipBinding = new Gcp.GkeHub.MembershipBinding(\"membership_binding\", new()\n {\n MembershipBindingId = \"tf-test-membership-binding_41819\",\n Scope = scope.Name,\n MembershipId = membership.MembershipId,\n Location = \"global\",\n Labels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n membership,\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"tf-test-membership_27169\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: primary.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_75223\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewMembershipBinding(ctx, \"membership_binding\", \u0026gkehub.MembershipBindingArgs{\n\t\t\tMembershipBindingId: pulumi.String(\"tf-test-membership-binding_41819\"),\n\t\t\tScope: scope.Name,\n\t\t\tMembershipId: membership.MembershipId,\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmembership,\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.MembershipBinding;\nimport com.pulumi.gcp.gkehub.MembershipBindingArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"tf-test-membership_27169\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(primary.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(primary)\n .build());\n\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_75223\")\n .build());\n\n var membershipBinding = new MembershipBinding(\"membershipBinding\", MembershipBindingArgs.builder()\n .membershipBindingId(\"tf-test-membership-binding_41819\")\n .scope(scope.name())\n .membershipId(membership.membershipId())\n .location(\"global\")\n .labels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n membership,\n scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1-a\n initialNodeCount: 1\n deletionProtection: true\n network: default\n subnetwork: default\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: tf-test-membership_27169\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${primary.id}\n options:\n dependsOn:\n - ${primary}\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_75223\n membershipBinding:\n type: gcp:gkehub:MembershipBinding\n name: membership_binding\n properties:\n membershipBindingId: tf-test-membership-binding_41819\n scope: ${scope.name}\n membershipId: ${membership.membershipId}\n location: global\n labels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n options:\n dependsOn:\n - ${membership}\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMembershipBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}`\n\n* `{{project}}/{{location}}/{{membership_id}}/{{membership_binding_id}}`\n\n* `{{location}}/{{membership_id}}/{{membership_binding_id}}`\n\nWhen using the `pulumi import` command, MembershipBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default {{project}}/{{location}}/{{membership_id}}/{{membership_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipBinding:MembershipBinding default {{location}}/{{membership_id}}/{{membership_binding_id}}\n```\n\n",
"properties": {
"createTime": {
"type": "string",
@@ -218225,7 +220027,7 @@
}
},
"gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding": {
- "description": "## Example Usage\n\n### Gkehub Membership Rbac Role Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"tf-test-membership_41819\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`,\n },\n },\n}, {\n dependsOn: [primary],\n});\nconst project = gcp.organizations.getProject({});\nconst membershipRbacRoleBinding = new gcp.gkehub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\", {\n membershipRbacRoleBindingId: \"tf-test-membership-rbac-role-binding_75092\",\n membershipId: membership.membershipId,\n user: project.then(project =\u003e `service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com`),\n role: {\n predefinedRole: \"ANTHOS_SUPPORT\",\n },\n location: \"global\",\n}, {\n dependsOn: [membership],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1,\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"tf-test-membership_41819\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": primary.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[primary]))\nproject = gcp.organizations.get_project()\nmembership_rbac_role_binding = gcp.gkehub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\",\n membership_rbac_role_binding_id=\"tf-test-membership-rbac-role-binding_75092\",\n membership_id=membership.membership_id,\n user=f\"service-{project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com\",\n role={\n \"predefined_role\": \"ANTHOS_SUPPORT\",\n },\n location=\"global\",\n opts = pulumi.ResourceOptions(depends_on=[membership]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"tf-test-membership_41819\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = primary.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n primary,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var membershipRbacRoleBinding = new Gcp.GkeHub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\", new()\n {\n MembershipRbacRoleBindingId = \"tf-test-membership-rbac-role-binding_75092\",\n MembershipId = membership.MembershipId,\n User = $\"service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-anthossupport.iam.gserviceaccount.com\",\n Role = new Gcp.GkeHub.Inputs.MembershipRbacRoleBindingRoleArgs\n {\n PredefinedRole = \"ANTHOS_SUPPORT\",\n },\n Location = \"global\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n membership,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"tf-test-membership_41819\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: primary.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewMembershipRbacRoleBinding(ctx, \"membership_rbac_role_binding\", \u0026gkehub.MembershipRbacRoleBindingArgs{\n\t\t\tMembershipRbacRoleBindingId: pulumi.String(\"tf-test-membership-rbac-role-binding_75092\"),\n\t\t\tMembershipId: membership.MembershipId,\n\t\t\tUser: pulumi.Sprintf(\"service-%v@gcp-sa-anthossupport.iam.gserviceaccount.com\", project.Number),\n\t\t\tRole: \u0026gkehub.MembershipRbacRoleBindingRoleArgs{\n\t\t\t\tPredefinedRole: pulumi.String(\"ANTHOS_SUPPORT\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmembership,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.gkehub.MembershipRbacRoleBinding;\nimport com.pulumi.gcp.gkehub.MembershipRbacRoleBindingArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipRbacRoleBindingRoleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"tf-test-membership_41819\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(primary.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(primary)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var membershipRbacRoleBinding = new MembershipRbacRoleBinding(\"membershipRbacRoleBinding\", MembershipRbacRoleBindingArgs.builder()\n .membershipRbacRoleBindingId(\"tf-test-membership-rbac-role-binding_75092\")\n .membershipId(membership.membershipId())\n .user(String.format(\"service-%s@gcp-sa-anthossupport.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .role(MembershipRbacRoleBindingRoleArgs.builder()\n .predefinedRole(\"ANTHOS_SUPPORT\")\n .build())\n .location(\"global\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(membership)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1-a\n initialNodeCount: 1\n deletionProtection: true\n network: default\n subnetwork: default\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: tf-test-membership_41819\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${primary.id}\n options:\n dependsOn:\n - ${primary}\n membershipRbacRoleBinding:\n type: gcp:gkehub:MembershipRbacRoleBinding\n name: membership_rbac_role_binding\n properties:\n membershipRbacRoleBindingId: tf-test-membership-rbac-role-binding_75092\n membershipId: ${membership.membershipId}\n user: service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com\n role:\n predefinedRole: ANTHOS_SUPPORT\n location: global\n options:\n dependsOn:\n - ${membership}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMembershipRBACRoleBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/rbacrolebindings/{{membership_rbac_role_binding_id}}`\n\n* `{{project}}/{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}`\n\n* `{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}`\n\nWhen using the `pulumi import` command, MembershipRBACRoleBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/rbacrolebindings/{{membership_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default {{project}}/{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default {{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}\n```\n\n",
+ "description": "## Example Usage\n\n### Gkehub Membership Rbac Role Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.container.Cluster(\"primary\", {\n name: \"basic-cluster\",\n location: \"us-central1-a\",\n initialNodeCount: 1,\n deletionProtection: true,\n network: \"default\",\n subnetwork: \"default\",\n});\nconst membership = new gcp.gkehub.Membership(\"membership\", {\n membershipId: \"tf-test-membership_75092\",\n endpoint: {\n gkeCluster: {\n resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`,\n },\n },\n}, {\n dependsOn: [primary],\n});\nconst project = gcp.organizations.getProject({});\nconst membershipRbacRoleBinding = new gcp.gkehub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\", {\n membershipRbacRoleBindingId: \"tf-test-membership-rbac-role-binding_2605\",\n membershipId: membership.membershipId,\n user: project.then(project =\u003e `service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com`),\n role: {\n predefinedRole: \"ANTHOS_SUPPORT\",\n },\n location: \"global\",\n}, {\n dependsOn: [membership],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.container.Cluster(\"primary\",\n name=\"basic-cluster\",\n location=\"us-central1-a\",\n initial_node_count=1,\n deletion_protection=True,\n network=\"default\",\n subnetwork=\"default\")\nmembership = gcp.gkehub.Membership(\"membership\",\n membership_id=\"tf-test-membership_75092\",\n endpoint={\n \"gke_cluster\": {\n \"resource_link\": primary.id.apply(lambda id: f\"//container.googleapis.com/{id}\"),\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[primary]))\nproject = gcp.organizations.get_project()\nmembership_rbac_role_binding = gcp.gkehub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\",\n membership_rbac_role_binding_id=\"tf-test-membership-rbac-role-binding_2605\",\n membership_id=membership.membership_id,\n user=f\"service-{project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com\",\n role={\n \"predefined_role\": \"ANTHOS_SUPPORT\",\n },\n location=\"global\",\n opts = pulumi.ResourceOptions(depends_on=[membership]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Name = \"basic-cluster\",\n Location = \"us-central1-a\",\n InitialNodeCount = 1,\n DeletionProtection = true,\n Network = \"default\",\n Subnetwork = \"default\",\n });\n\n var membership = new Gcp.GkeHub.Membership(\"membership\", new()\n {\n MembershipId = \"tf-test-membership_75092\",\n Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs\n {\n GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs\n {\n ResourceLink = primary.Id.Apply(id =\u003e $\"//container.googleapis.com/{id}\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n primary,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var membershipRbacRoleBinding = new Gcp.GkeHub.MembershipRbacRoleBinding(\"membership_rbac_role_binding\", new()\n {\n MembershipRbacRoleBindingId = \"tf-test-membership-rbac-role-binding_2605\",\n MembershipId = membership.MembershipId,\n User = $\"service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-anthossupport.iam.gserviceaccount.com\",\n Role = new Gcp.GkeHub.Inputs.MembershipRbacRoleBindingRoleArgs\n {\n PredefinedRole = \"ANTHOS_SUPPORT\",\n },\n Location = \"global\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n membership,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tName: pulumi.String(\"basic-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmembership, err := gkehub.NewMembership(ctx, \"membership\", \u0026gkehub.MembershipArgs{\n\t\t\tMembershipId: pulumi.String(\"tf-test-membership_75092\"),\n\t\t\tEndpoint: \u0026gkehub.MembershipEndpointArgs{\n\t\t\t\tGkeCluster: \u0026gkehub.MembershipEndpointGkeClusterArgs{\n\t\t\t\t\tResourceLink: primary.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//container.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprimary,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewMembershipRbacRoleBinding(ctx, \"membership_rbac_role_binding\", \u0026gkehub.MembershipRbacRoleBindingArgs{\n\t\t\tMembershipRbacRoleBindingId: pulumi.String(\"tf-test-membership-rbac-role-binding_2605\"),\n\t\t\tMembershipId: membership.MembershipId,\n\t\t\tUser: pulumi.Sprintf(\"service-%v@gcp-sa-anthossupport.iam.gserviceaccount.com\", project.Number),\n\t\t\tRole: \u0026gkehub.MembershipRbacRoleBindingRoleArgs{\n\t\t\t\tPredefinedRole: pulumi.String(\"ANTHOS_SUPPORT\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmembership,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.gkehub.Membership;\nimport com.pulumi.gcp.gkehub.MembershipArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipEndpointGkeClusterArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.gkehub.MembershipRbacRoleBinding;\nimport com.pulumi.gcp.gkehub.MembershipRbacRoleBindingArgs;\nimport com.pulumi.gcp.gkehub.inputs.MembershipRbacRoleBindingRoleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Cluster(\"primary\", ClusterArgs.builder()\n .name(\"basic-cluster\")\n .location(\"us-central1-a\")\n .initialNodeCount(1)\n .deletionProtection(true)\n .network(\"default\")\n .subnetwork(\"default\")\n .build());\n\n var membership = new Membership(\"membership\", MembershipArgs.builder()\n .membershipId(\"tf-test-membership_75092\")\n .endpoint(MembershipEndpointArgs.builder()\n .gkeCluster(MembershipEndpointGkeClusterArgs.builder()\n .resourceLink(primary.id().applyValue(id -\u003e String.format(\"//container.googleapis.com/%s\", id)))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(primary)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var membershipRbacRoleBinding = new MembershipRbacRoleBinding(\"membershipRbacRoleBinding\", MembershipRbacRoleBindingArgs.builder()\n .membershipRbacRoleBindingId(\"tf-test-membership-rbac-role-binding_2605\")\n .membershipId(membership.membershipId())\n .user(String.format(\"service-%s@gcp-sa-anthossupport.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .role(MembershipRbacRoleBindingRoleArgs.builder()\n .predefinedRole(\"ANTHOS_SUPPORT\")\n .build())\n .location(\"global\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(membership)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:Cluster\n properties:\n name: basic-cluster\n location: us-central1-a\n initialNodeCount: 1\n deletionProtection: true\n network: default\n subnetwork: default\n membership:\n type: gcp:gkehub:Membership\n properties:\n membershipId: tf-test-membership_75092\n endpoint:\n gkeCluster:\n resourceLink: //container.googleapis.com/${primary.id}\n options:\n dependsOn:\n - ${primary}\n membershipRbacRoleBinding:\n type: gcp:gkehub:MembershipRbacRoleBinding\n name: membership_rbac_role_binding\n properties:\n membershipRbacRoleBindingId: tf-test-membership-rbac-role-binding_2605\n membershipId: ${membership.membershipId}\n user: service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com\n role:\n predefinedRole: ANTHOS_SUPPORT\n location: global\n options:\n dependsOn:\n - ${membership}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMembershipRBACRoleBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/rbacrolebindings/{{membership_rbac_role_binding_id}}`\n\n* `{{project}}/{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}`\n\n* `{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}`\n\nWhen using the `pulumi import` command, MembershipRBACRoleBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/rbacrolebindings/{{membership_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default {{project}}/{{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/membershipRbacRoleBinding:MembershipRbacRoleBinding default {{location}}/{{membership_id}}/{{membership_rbac_role_binding_id}}\n```\n\n",
"properties": {
"createTime": {
"type": "string",
@@ -218394,7 +220196,7 @@
}
},
"gcp:gkehub/namespace:Namespace": {
- "description": "Namespace represents a namespace across the Fleet.\n\n\nTo get more information about Namespace, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.scopes.namespaces)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Namespace Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_2605\"});\nconst namespace = new gcp.gkehub.Namespace(\"namespace\", {\n scopeNamespaceId: \"tf-test-namespace_34535\",\n scopeId: scope.scopeId,\n scope: scope.name,\n namespaceLabels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n labels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n}, {\n dependsOn: [scope],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_2605\")\nnamespace = gcp.gkehub.Namespace(\"namespace\",\n scope_namespace_id=\"tf-test-namespace_34535\",\n scope_id=scope.scope_id,\n scope=scope.name,\n namespace_labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n opts = pulumi.ResourceOptions(depends_on=[scope]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_2605\",\n });\n\n var @namespace = new Gcp.GkeHub.Namespace(\"namespace\", new()\n {\n ScopeNamespaceId = \"tf-test-namespace_34535\",\n ScopeId = scope.ScopeId,\n Scope = scope.Name,\n NamespaceLabels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n Labels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_2605\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewNamespace(ctx, \"namespace\", \u0026gkehub.NamespaceArgs{\n\t\t\tScopeNamespaceId: pulumi.String(\"tf-test-namespace_34535\"),\n\t\t\tScopeId: scope.ScopeId,\n\t\t\tScope: scope.Name,\n\t\t\tNamespaceLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.Namespace;\nimport com.pulumi.gcp.gkehub.NamespaceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_2605\")\n .build());\n\n var namespace = new Namespace(\"namespace\", NamespaceArgs.builder()\n .scopeNamespaceId(\"tf-test-namespace_34535\")\n .scopeId(scope.scopeId())\n .scope(scope.name())\n .namespaceLabels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .labels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn(scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_2605\n namespace:\n type: gcp:gkehub:Namespace\n properties:\n scopeNamespaceId: tf-test-namespace_34535\n scopeId: ${scope.scopeId}\n scope: ${scope.name}\n namespaceLabels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n labels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n options:\n dependsOn:\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNamespace can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/scopes/{{scope_id}}/namespaces/{{scope_namespace_id}}`\n\n* `{{project}}/{{scope_id}}/{{scope_namespace_id}}`\n\n* `{{scope_id}}/{{scope_namespace_id}}`\n\nWhen using the `pulumi import` command, Namespace can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default projects/{{project}}/locations/global/scopes/{{scope_id}}/namespaces/{{scope_namespace_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default {{project}}/{{scope_id}}/{{scope_namespace_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default {{scope_id}}/{{scope_namespace_id}}\n```\n\n",
+ "description": "Namespace represents a namespace across the Fleet.\n\n\nTo get more information about Namespace, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.scopes.namespaces)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Namespace Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_34535\"});\nconst namespace = new gcp.gkehub.Namespace(\"namespace\", {\n scopeNamespaceId: \"tf-test-namespace_22375\",\n scopeId: scope.scopeId,\n scope: scope.name,\n namespaceLabels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n labels: {\n keyb: \"valueb\",\n keya: \"valuea\",\n keyc: \"valuec\",\n },\n}, {\n dependsOn: [scope],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_34535\")\nnamespace = gcp.gkehub.Namespace(\"namespace\",\n scope_namespace_id=\"tf-test-namespace_22375\",\n scope_id=scope.scope_id,\n scope=scope.name,\n namespace_labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n labels={\n \"keyb\": \"valueb\",\n \"keya\": \"valuea\",\n \"keyc\": \"valuec\",\n },\n opts = pulumi.ResourceOptions(depends_on=[scope]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_34535\",\n });\n\n var @namespace = new Gcp.GkeHub.Namespace(\"namespace\", new()\n {\n ScopeNamespaceId = \"tf-test-namespace_22375\",\n ScopeId = scope.ScopeId,\n Scope = scope.Name,\n NamespaceLabels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n Labels = \n {\n { \"keyb\", \"valueb\" },\n { \"keya\", \"valuea\" },\n { \"keyc\", \"valuec\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_34535\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewNamespace(ctx, \"namespace\", \u0026gkehub.NamespaceArgs{\n\t\t\tScopeNamespaceId: pulumi.String(\"tf-test-namespace_22375\"),\n\t\t\tScopeId: scope.ScopeId,\n\t\t\tScope: scope.Name,\n\t\t\tNamespaceLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"keyb\": pulumi.String(\"valueb\"),\n\t\t\t\t\"keya\": pulumi.String(\"valuea\"),\n\t\t\t\t\"keyc\": pulumi.String(\"valuec\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.Namespace;\nimport com.pulumi.gcp.gkehub.NamespaceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_34535\")\n .build());\n\n var namespace = new Namespace(\"namespace\", NamespaceArgs.builder()\n .scopeNamespaceId(\"tf-test-namespace_22375\")\n .scopeId(scope.scopeId())\n .scope(scope.name())\n .namespaceLabels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .labels(Map.ofEntries(\n Map.entry(\"keyb\", \"valueb\"),\n Map.entry(\"keya\", \"valuea\"),\n Map.entry(\"keyc\", \"valuec\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn(scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_34535\n namespace:\n type: gcp:gkehub:Namespace\n properties:\n scopeNamespaceId: tf-test-namespace_22375\n scopeId: ${scope.scopeId}\n scope: ${scope.name}\n namespaceLabels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n labels:\n keyb: valueb\n keya: valuea\n keyc: valuec\n options:\n dependsOn:\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNamespace can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/scopes/{{scope_id}}/namespaces/{{scope_namespace_id}}`\n\n* `{{project}}/{{scope_id}}/{{scope_namespace_id}}`\n\n* `{{scope_id}}/{{scope_namespace_id}}`\n\nWhen using the `pulumi import` command, Namespace can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default projects/{{project}}/locations/global/scopes/{{scope_id}}/namespaces/{{scope_namespace_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default {{project}}/{{scope_id}}/{{scope_namespace_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/namespace:Namespace default {{scope_id}}/{{scope_namespace_id}}\n```\n\n",
"properties": {
"createTime": {
"type": "string",
@@ -219063,7 +220865,7 @@
}
},
"gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding": {
- "description": "RBACRoleBinding represents a rbacrolebinding across the Fleet.\n\n\nTo get more information about ScopeRBACRoleBinding, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.scopes.rbacrolebindings)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Scope Rbac Role Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_22375\"});\nconst scopeRbacRoleBinding = new gcp.gkehub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\", {\n scopeRbacRoleBindingId: \"tf-test-scope-rbac-role-binding_29439\",\n scopeId: scope.scopeId,\n user: \"test-email@gmail.com\",\n role: {\n predefinedRole: \"ADMIN\",\n },\n labels: {\n key: \"value\",\n },\n}, {\n dependsOn: [scope],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_22375\")\nscope_rbac_role_binding = gcp.gkehub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\",\n scope_rbac_role_binding_id=\"tf-test-scope-rbac-role-binding_29439\",\n scope_id=scope.scope_id,\n user=\"test-email@gmail.com\",\n role={\n \"predefined_role\": \"ADMIN\",\n },\n labels={\n \"key\": \"value\",\n },\n opts = pulumi.ResourceOptions(depends_on=[scope]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_22375\",\n });\n\n var scopeRbacRoleBinding = new Gcp.GkeHub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\", new()\n {\n ScopeRbacRoleBindingId = \"tf-test-scope-rbac-role-binding_29439\",\n ScopeId = scope.ScopeId,\n User = \"test-email@gmail.com\",\n Role = new Gcp.GkeHub.Inputs.ScopeRbacRoleBindingRoleArgs\n {\n PredefinedRole = \"ADMIN\",\n },\n Labels = \n {\n { \"key\", \"value\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_22375\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewScopeRbacRoleBinding(ctx, \"scope_rbac_role_binding\", \u0026gkehub.ScopeRbacRoleBindingArgs{\n\t\t\tScopeRbacRoleBindingId: pulumi.String(\"tf-test-scope-rbac-role-binding_29439\"),\n\t\t\tScopeId: scope.ScopeId,\n\t\t\tUser: pulumi.String(\"test-email@gmail.com\"),\n\t\t\tRole: \u0026gkehub.ScopeRbacRoleBindingRoleArgs{\n\t\t\t\tPredefinedRole: pulumi.String(\"ADMIN\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.ScopeRbacRoleBinding;\nimport com.pulumi.gcp.gkehub.ScopeRbacRoleBindingArgs;\nimport com.pulumi.gcp.gkehub.inputs.ScopeRbacRoleBindingRoleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_22375\")\n .build());\n\n var scopeRbacRoleBinding = new ScopeRbacRoleBinding(\"scopeRbacRoleBinding\", ScopeRbacRoleBindingArgs.builder()\n .scopeRbacRoleBindingId(\"tf-test-scope-rbac-role-binding_29439\")\n .scopeId(scope.scopeId())\n .user(\"test-email@gmail.com\")\n .role(ScopeRbacRoleBindingRoleArgs.builder()\n .predefinedRole(\"ADMIN\")\n .build())\n .labels(Map.of(\"key\", \"value\"))\n .build(), CustomResourceOptions.builder()\n .dependsOn(scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_22375\n scopeRbacRoleBinding:\n type: gcp:gkehub:ScopeRbacRoleBinding\n name: scope_rbac_role_binding\n properties:\n scopeRbacRoleBindingId: tf-test-scope-rbac-role-binding_29439\n scopeId: ${scope.scopeId}\n user: test-email@gmail.com\n role:\n predefinedRole: ADMIN\n labels:\n key: value\n options:\n dependsOn:\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nScopeRBACRoleBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/scopes/{{scope_id}}/rbacrolebindings/{{scope_rbac_role_binding_id}}`\n\n* `{{project}}/{{scope_id}}/{{scope_rbac_role_binding_id}}`\n\n* `{{scope_id}}/{{scope_rbac_role_binding_id}}`\n\nWhen using the `pulumi import` command, ScopeRBACRoleBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default projects/{{project}}/locations/global/scopes/{{scope_id}}/rbacrolebindings/{{scope_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default {{project}}/{{scope_id}}/{{scope_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default {{scope_id}}/{{scope_rbac_role_binding_id}}\n```\n\n",
+ "description": "RBACRoleBinding represents a rbacrolebinding across the Fleet.\n\n\nTo get more information about ScopeRBACRoleBinding, see:\n\n* [API documentation](https://cloud.google.com/anthos/fleet-management/docs/reference/rest/v1/projects.locations.scopes.rbacrolebindings)\n* How-to Guides\n * [Registering a Cluster](https://cloud.google.com/anthos/multicluster-management/connect/registering-a-cluster#register_cluster)\n\n## Example Usage\n\n### Gkehub Scope Rbac Role Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scope = new gcp.gkehub.Scope(\"scope\", {scopeId: \"tf-test-scope_29439\"});\nconst scopeRbacRoleBinding = new gcp.gkehub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\", {\n scopeRbacRoleBindingId: \"tf-test-scope-rbac-role-binding_87786\",\n scopeId: scope.scopeId,\n user: \"test-email@gmail.com\",\n role: {\n predefinedRole: \"ADMIN\",\n },\n labels: {\n key: \"value\",\n },\n}, {\n dependsOn: [scope],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscope = gcp.gkehub.Scope(\"scope\", scope_id=\"tf-test-scope_29439\")\nscope_rbac_role_binding = gcp.gkehub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\",\n scope_rbac_role_binding_id=\"tf-test-scope-rbac-role-binding_87786\",\n scope_id=scope.scope_id,\n user=\"test-email@gmail.com\",\n role={\n \"predefined_role\": \"ADMIN\",\n },\n labels={\n \"key\": \"value\",\n },\n opts = pulumi.ResourceOptions(depends_on=[scope]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scope = new Gcp.GkeHub.Scope(\"scope\", new()\n {\n ScopeId = \"tf-test-scope_29439\",\n });\n\n var scopeRbacRoleBinding = new Gcp.GkeHub.ScopeRbacRoleBinding(\"scope_rbac_role_binding\", new()\n {\n ScopeRbacRoleBindingId = \"tf-test-scope-rbac-role-binding_87786\",\n ScopeId = scope.ScopeId,\n User = \"test-email@gmail.com\",\n Role = new Gcp.GkeHub.Inputs.ScopeRbacRoleBindingRoleArgs\n {\n PredefinedRole = \"ADMIN\",\n },\n Labels = \n {\n { \"key\", \"value\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n scope,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkehub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscope, err := gkehub.NewScope(ctx, \"scope\", \u0026gkehub.ScopeArgs{\n\t\t\tScopeId: pulumi.String(\"tf-test-scope_29439\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = gkehub.NewScopeRbacRoleBinding(ctx, \"scope_rbac_role_binding\", \u0026gkehub.ScopeRbacRoleBindingArgs{\n\t\t\tScopeRbacRoleBindingId: pulumi.String(\"tf-test-scope-rbac-role-binding_87786\"),\n\t\t\tScopeId: scope.ScopeId,\n\t\t\tUser: pulumi.String(\"test-email@gmail.com\"),\n\t\t\tRole: \u0026gkehub.ScopeRbacRoleBindingRoleArgs{\n\t\t\t\tPredefinedRole: pulumi.String(\"ADMIN\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tscope,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkehub.Scope;\nimport com.pulumi.gcp.gkehub.ScopeArgs;\nimport com.pulumi.gcp.gkehub.ScopeRbacRoleBinding;\nimport com.pulumi.gcp.gkehub.ScopeRbacRoleBindingArgs;\nimport com.pulumi.gcp.gkehub.inputs.ScopeRbacRoleBindingRoleArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var scope = new Scope(\"scope\", ScopeArgs.builder()\n .scopeId(\"tf-test-scope_29439\")\n .build());\n\n var scopeRbacRoleBinding = new ScopeRbacRoleBinding(\"scopeRbacRoleBinding\", ScopeRbacRoleBindingArgs.builder()\n .scopeRbacRoleBindingId(\"tf-test-scope-rbac-role-binding_87786\")\n .scopeId(scope.scopeId())\n .user(\"test-email@gmail.com\")\n .role(ScopeRbacRoleBindingRoleArgs.builder()\n .predefinedRole(\"ADMIN\")\n .build())\n .labels(Map.of(\"key\", \"value\"))\n .build(), CustomResourceOptions.builder()\n .dependsOn(scope)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scope:\n type: gcp:gkehub:Scope\n properties:\n scopeId: tf-test-scope_29439\n scopeRbacRoleBinding:\n type: gcp:gkehub:ScopeRbacRoleBinding\n name: scope_rbac_role_binding\n properties:\n scopeRbacRoleBindingId: tf-test-scope-rbac-role-binding_87786\n scopeId: ${scope.scopeId}\n user: test-email@gmail.com\n role:\n predefinedRole: ADMIN\n labels:\n key: value\n options:\n dependsOn:\n - ${scope}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nScopeRBACRoleBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/scopes/{{scope_id}}/rbacrolebindings/{{scope_rbac_role_binding_id}}`\n\n* `{{project}}/{{scope_id}}/{{scope_rbac_role_binding_id}}`\n\n* `{{scope_id}}/{{scope_rbac_role_binding_id}}`\n\nWhen using the `pulumi import` command, ScopeRBACRoleBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default projects/{{project}}/locations/global/scopes/{{scope_id}}/rbacrolebindings/{{scope_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default {{project}}/{{scope_id}}/{{scope_rbac_role_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:gkehub/scopeRbacRoleBinding:ScopeRbacRoleBinding default {{scope_id}}/{{scope_rbac_role_binding_id}}\n```\n\n",
"properties": {
"createTime": {
"type": "string",
@@ -223449,7 +225251,7 @@
}
},
"gcp:iam/foldersPolicyBinding:FoldersPolicyBinding": {
- "description": "## Example Usage\n\n### Iam Folders Policy Binding\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst pabPolicy = new gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test folder binding\",\n principalAccessBoundaryPolicyId: \"my-pab-policy\",\n});\nconst folder = new gcp.organizations.Folder(\"folder\", {\n displayName: \"test folder\",\n parent: \"organizations/123456789\",\n deletionProtection: false,\n});\nconst wait120s = new time.index.Sleep(\"wait_120s\", {createDuration: \"120s\"}, {\n dependsOn: [folder],\n});\nconst my_folder_binding = new gcp.iam.FoldersPolicyBinding(\"my-folder-binding\", {\n folder: folder.folderId,\n location: \"global\",\n displayName: \"test folder binding\",\n policyKind: \"PRINCIPAL_ACCESS_BOUNDARY\",\n policyBindingId: \"test-folder-binding\",\n policy: pulumi.interpolate`organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}`,\n target: {\n principalSet: pulumi.interpolate`//cloudresourcemanager.googleapis.com/folders/${folder.folderId}`,\n },\n}, {\n dependsOn: [wait120s],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\npab_policy = gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test folder binding\",\n principal_access_boundary_policy_id=\"my-pab-policy\")\nfolder = gcp.organizations.Folder(\"folder\",\n display_name=\"test folder\",\n parent=\"organizations/123456789\",\n deletion_protection=False)\nwait120s = time.index.Sleep(\"wait_120s\", create_duration=120s,\nopts = pulumi.ResourceOptions(depends_on=[folder]))\nmy_folder_binding = gcp.iam.FoldersPolicyBinding(\"my-folder-binding\",\n folder=folder.folder_id,\n location=\"global\",\n display_name=\"test folder binding\",\n policy_kind=\"PRINCIPAL_ACCESS_BOUNDARY\",\n policy_binding_id=\"test-folder-binding\",\n policy=pab_policy.principal_access_boundary_policy_id.apply(lambda principal_access_boundary_policy_id: f\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principal_access_boundary_policy_id}\"),\n target={\n \"principal_set\": folder.folder_id.apply(lambda folder_id: f\"//cloudresourcemanager.googleapis.com/folders/{folder_id}\"),\n },\n opts = pulumi.ResourceOptions(depends_on=[wait120s]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pabPolicy = new Gcp.Iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test folder binding\",\n PrincipalAccessBoundaryPolicyId = \"my-pab-policy\",\n });\n\n var folder = new Gcp.Organizations.Folder(\"folder\", new()\n {\n DisplayName = \"test folder\",\n Parent = \"organizations/123456789\",\n DeletionProtection = false,\n });\n\n var wait120s = new Time.Index.Sleep(\"wait_120s\", new()\n {\n CreateDuration = \"120s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n folder,\n },\n });\n\n var my_folder_binding = new Gcp.Iam.FoldersPolicyBinding(\"my-folder-binding\", new()\n {\n Folder = folder.FolderId,\n Location = \"global\",\n DisplayName = \"test folder binding\",\n PolicyKind = \"PRINCIPAL_ACCESS_BOUNDARY\",\n PolicyBindingId = \"test-folder-binding\",\n Policy = pabPolicy.PrincipalAccessBoundaryPolicyId.Apply(principalAccessBoundaryPolicyId =\u003e $\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principalAccessBoundaryPolicyId}\"),\n Target = new Gcp.Iam.Inputs.FoldersPolicyBindingTargetArgs\n {\n PrincipalSet = folder.FolderId.Apply(folderId =\u003e $\"//cloudresourcemanager.googleapis.com/folders/{folderId}\"),\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n wait120s,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpabPolicy, err := iam.NewPrincipalAccessBoundaryPolicy(ctx, \"pab_policy\", \u0026iam.PrincipalAccessBoundaryPolicyArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test folder binding\"),\n\t\t\tPrincipalAccessBoundaryPolicyId: pulumi.String(\"my-pab-policy\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfolder, err := organizations.NewFolder(ctx, \"folder\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"test folder\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait120s, err := time.NewSleep(ctx, \"wait_120s\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"120s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfolder,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewFoldersPolicyBinding(ctx, \"my-folder-binding\", \u0026iam.FoldersPolicyBindingArgs{\n\t\t\tFolder: folder.FolderId,\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test folder binding\"),\n\t\t\tPolicyKind: pulumi.String(\"PRINCIPAL_ACCESS_BOUNDARY\"),\n\t\t\tPolicyBindingId: pulumi.String(\"test-folder-binding\"),\n\t\t\tPolicy: pabPolicy.PrincipalAccessBoundaryPolicyId.ApplyT(func(principalAccessBoundaryPolicyId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%v\", principalAccessBoundaryPolicyId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTarget: \u0026iam.FoldersPolicyBindingTargetArgs{\n\t\t\t\tPrincipalSet: folder.FolderId.ApplyT(func(folderId string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"//cloudresourcemanager.googleapis.com/folders/%v\", folderId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twait120s,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicy;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicyArgs;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.iam.FoldersPolicyBinding;\nimport com.pulumi.gcp.iam.FoldersPolicyBindingArgs;\nimport com.pulumi.gcp.iam.inputs.FoldersPolicyBindingTargetArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pabPolicy = new PrincipalAccessBoundaryPolicy(\"pabPolicy\", PrincipalAccessBoundaryPolicyArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test folder binding\")\n .principalAccessBoundaryPolicyId(\"my-pab-policy\")\n .build());\n\n var folder = new Folder(\"folder\", FolderArgs.builder()\n .displayName(\"test folder\")\n .parent(\"organizations/123456789\")\n .deletionProtection(false)\n .build());\n\n var wait120s = new Sleep(\"wait120s\", SleepArgs.builder()\n .createDuration(\"120s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(folder)\n .build());\n\n var my_folder_binding = new FoldersPolicyBinding(\"my-folder-binding\", FoldersPolicyBindingArgs.builder()\n .folder(folder.folderId())\n .location(\"global\")\n .displayName(\"test folder binding\")\n .policyKind(\"PRINCIPAL_ACCESS_BOUNDARY\")\n .policyBindingId(\"test-folder-binding\")\n .policy(pabPolicy.principalAccessBoundaryPolicyId().applyValue(principalAccessBoundaryPolicyId -\u003e String.format(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%s\", principalAccessBoundaryPolicyId)))\n .target(FoldersPolicyBindingTargetArgs.builder()\n .principalSet(folder.folderId().applyValue(folderId -\u003e String.format(\"//cloudresourcemanager.googleapis.com/folders/%s\", folderId)))\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(wait120s)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pabPolicy:\n type: gcp:iam:PrincipalAccessBoundaryPolicy\n name: pab_policy\n properties:\n organization: '123456789'\n location: global\n displayName: test folder binding\n principalAccessBoundaryPolicyId: my-pab-policy\n folder:\n type: gcp:organizations:Folder\n properties:\n displayName: test folder\n parent: organizations/123456789\n deletionProtection: false\n wait120s:\n type: time:sleep\n name: wait_120s\n properties:\n createDuration: 120s\n options:\n dependsOn:\n - ${folder}\n my-folder-binding:\n type: gcp:iam:FoldersPolicyBinding\n properties:\n folder: ${folder.folderId}\n location: global\n displayName: test folder binding\n policyKind: PRINCIPAL_ACCESS_BOUNDARY\n policyBindingId: test-folder-binding\n policy: organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}\n target:\n principalSet: //cloudresourcemanager.googleapis.com/folders/${folder.folderId}\n options:\n dependsOn:\n - ${wait120s}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFoldersPolicyBinding can be imported using any of these accepted formats:\n\n* `folders/{{folder}}/locations/{{location}}/policyBindings/{{policy_binding_id}}`\n\n* `{{folder}}/{{location}}/{{policy_binding_id}}`\n\nWhen using the `pulumi import` command, FoldersPolicyBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/foldersPolicyBinding:FoldersPolicyBinding default folders/{{folder}}/locations/{{location}}/policyBindings/{{policy_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/foldersPolicyBinding:FoldersPolicyBinding default {{folder}}/{{location}}/{{policy_binding_id}}\n```\n\n",
+ "description": "A policy binding to a folder\n\n\nTo get more information about FoldersPolicyBinding, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/folders.locations.policyBindings)\n* How-to Guides\n * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding)\n\n## Example Usage\n\n### Iam Folders Policy Binding\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst pabPolicy = new gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test folder binding\",\n principalAccessBoundaryPolicyId: \"my-pab-policy\",\n});\nconst folder = new gcp.organizations.Folder(\"folder\", {\n displayName: \"test folder\",\n parent: \"organizations/123456789\",\n deletionProtection: false,\n});\nconst wait120s = new time.index.Sleep(\"wait_120s\", {createDuration: \"120s\"}, {\n dependsOn: [folder],\n});\nconst my_folder_binding = new gcp.iam.FoldersPolicyBinding(\"my-folder-binding\", {\n folder: folder.folderId,\n location: \"global\",\n displayName: \"test folder binding\",\n policyKind: \"PRINCIPAL_ACCESS_BOUNDARY\",\n policyBindingId: \"test-folder-binding\",\n policy: pulumi.interpolate`organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}`,\n target: {\n principalSet: pulumi.interpolate`//cloudresourcemanager.googleapis.com/folders/${folder.folderId}`,\n },\n}, {\n dependsOn: [wait120s],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\npab_policy = gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test folder binding\",\n principal_access_boundary_policy_id=\"my-pab-policy\")\nfolder = gcp.organizations.Folder(\"folder\",\n display_name=\"test folder\",\n parent=\"organizations/123456789\",\n deletion_protection=False)\nwait120s = time.index.Sleep(\"wait_120s\", create_duration=120s,\nopts = pulumi.ResourceOptions(depends_on=[folder]))\nmy_folder_binding = gcp.iam.FoldersPolicyBinding(\"my-folder-binding\",\n folder=folder.folder_id,\n location=\"global\",\n display_name=\"test folder binding\",\n policy_kind=\"PRINCIPAL_ACCESS_BOUNDARY\",\n policy_binding_id=\"test-folder-binding\",\n policy=pab_policy.principal_access_boundary_policy_id.apply(lambda principal_access_boundary_policy_id: f\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principal_access_boundary_policy_id}\"),\n target={\n \"principal_set\": folder.folder_id.apply(lambda folder_id: f\"//cloudresourcemanager.googleapis.com/folders/{folder_id}\"),\n },\n opts = pulumi.ResourceOptions(depends_on=[wait120s]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pabPolicy = new Gcp.Iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test folder binding\",\n PrincipalAccessBoundaryPolicyId = \"my-pab-policy\",\n });\n\n var folder = new Gcp.Organizations.Folder(\"folder\", new()\n {\n DisplayName = \"test folder\",\n Parent = \"organizations/123456789\",\n DeletionProtection = false,\n });\n\n var wait120s = new Time.Index.Sleep(\"wait_120s\", new()\n {\n CreateDuration = \"120s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n folder,\n },\n });\n\n var my_folder_binding = new Gcp.Iam.FoldersPolicyBinding(\"my-folder-binding\", new()\n {\n Folder = folder.FolderId,\n Location = \"global\",\n DisplayName = \"test folder binding\",\n PolicyKind = \"PRINCIPAL_ACCESS_BOUNDARY\",\n PolicyBindingId = \"test-folder-binding\",\n Policy = pabPolicy.PrincipalAccessBoundaryPolicyId.Apply(principalAccessBoundaryPolicyId =\u003e $\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principalAccessBoundaryPolicyId}\"),\n Target = new Gcp.Iam.Inputs.FoldersPolicyBindingTargetArgs\n {\n PrincipalSet = folder.FolderId.Apply(folderId =\u003e $\"//cloudresourcemanager.googleapis.com/folders/{folderId}\"),\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n wait120s,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpabPolicy, err := iam.NewPrincipalAccessBoundaryPolicy(ctx, \"pab_policy\", \u0026iam.PrincipalAccessBoundaryPolicyArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test folder binding\"),\n\t\t\tPrincipalAccessBoundaryPolicyId: pulumi.String(\"my-pab-policy\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfolder, err := organizations.NewFolder(ctx, \"folder\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"test folder\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait120s, err := time.NewSleep(ctx, \"wait_120s\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"120s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfolder,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewFoldersPolicyBinding(ctx, \"my-folder-binding\", \u0026iam.FoldersPolicyBindingArgs{\n\t\t\tFolder: folder.FolderId,\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test folder binding\"),\n\t\t\tPolicyKind: pulumi.String(\"PRINCIPAL_ACCESS_BOUNDARY\"),\n\t\t\tPolicyBindingId: pulumi.String(\"test-folder-binding\"),\n\t\t\tPolicy: pabPolicy.PrincipalAccessBoundaryPolicyId.ApplyT(func(principalAccessBoundaryPolicyId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%v\", principalAccessBoundaryPolicyId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTarget: \u0026iam.FoldersPolicyBindingTargetArgs{\n\t\t\t\tPrincipalSet: folder.FolderId.ApplyT(func(folderId string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"//cloudresourcemanager.googleapis.com/folders/%v\", folderId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twait120s,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicy;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicyArgs;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.iam.FoldersPolicyBinding;\nimport com.pulumi.gcp.iam.FoldersPolicyBindingArgs;\nimport com.pulumi.gcp.iam.inputs.FoldersPolicyBindingTargetArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pabPolicy = new PrincipalAccessBoundaryPolicy(\"pabPolicy\", PrincipalAccessBoundaryPolicyArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test folder binding\")\n .principalAccessBoundaryPolicyId(\"my-pab-policy\")\n .build());\n\n var folder = new Folder(\"folder\", FolderArgs.builder()\n .displayName(\"test folder\")\n .parent(\"organizations/123456789\")\n .deletionProtection(false)\n .build());\n\n var wait120s = new Sleep(\"wait120s\", SleepArgs.builder()\n .createDuration(\"120s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(folder)\n .build());\n\n var my_folder_binding = new FoldersPolicyBinding(\"my-folder-binding\", FoldersPolicyBindingArgs.builder()\n .folder(folder.folderId())\n .location(\"global\")\n .displayName(\"test folder binding\")\n .policyKind(\"PRINCIPAL_ACCESS_BOUNDARY\")\n .policyBindingId(\"test-folder-binding\")\n .policy(pabPolicy.principalAccessBoundaryPolicyId().applyValue(principalAccessBoundaryPolicyId -\u003e String.format(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%s\", principalAccessBoundaryPolicyId)))\n .target(FoldersPolicyBindingTargetArgs.builder()\n .principalSet(folder.folderId().applyValue(folderId -\u003e String.format(\"//cloudresourcemanager.googleapis.com/folders/%s\", folderId)))\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(wait120s)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pabPolicy:\n type: gcp:iam:PrincipalAccessBoundaryPolicy\n name: pab_policy\n properties:\n organization: '123456789'\n location: global\n displayName: test folder binding\n principalAccessBoundaryPolicyId: my-pab-policy\n folder:\n type: gcp:organizations:Folder\n properties:\n displayName: test folder\n parent: organizations/123456789\n deletionProtection: false\n wait120s:\n type: time:sleep\n name: wait_120s\n properties:\n createDuration: 120s\n options:\n dependsOn:\n - ${folder}\n my-folder-binding:\n type: gcp:iam:FoldersPolicyBinding\n properties:\n folder: ${folder.folderId}\n location: global\n displayName: test folder binding\n policyKind: PRINCIPAL_ACCESS_BOUNDARY\n policyBindingId: test-folder-binding\n policy: organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}\n target:\n principalSet: //cloudresourcemanager.googleapis.com/folders/${folder.folderId}\n options:\n dependsOn:\n - ${wait120s}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFoldersPolicyBinding can be imported using any of these accepted formats:\n\n* `folders/{{folder}}/locations/{{location}}/policyBindings/{{policy_binding_id}}`\n\n* `{{folder}}/{{location}}/{{policy_binding_id}}`\n\nWhen using the `pulumi import` command, FoldersPolicyBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/foldersPolicyBinding:FoldersPolicyBinding default folders/{{folder}}/locations/{{location}}/policyBindings/{{policy_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/foldersPolicyBinding:FoldersPolicyBinding default {{folder}}/{{location}}/{{policy_binding_id}}\n```\n\n",
"properties": {
"annotations": {
"type": "object",
@@ -223670,7 +225472,7 @@
}
},
"gcp:iam/organizationsPolicyBinding:OrganizationsPolicyBinding": {
- "description": "## Example Usage\n\n### Iam Organizations Policy Binding\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pabPolicy = new gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test org binding\",\n principalAccessBoundaryPolicyId: \"my-pab-policy\",\n});\nconst my_org_binding = new gcp.iam.OrganizationsPolicyBinding(\"my-org-binding\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test org binding\",\n policyKind: \"PRINCIPAL_ACCESS_BOUNDARY\",\n policyBindingId: \"test-org-binding\",\n policy: pulumi.interpolate`organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}`,\n target: {\n principalSet: \"//cloudresourcemanager.googleapis.com/organizations/123456789\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npab_policy = gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test org binding\",\n principal_access_boundary_policy_id=\"my-pab-policy\")\nmy_org_binding = gcp.iam.OrganizationsPolicyBinding(\"my-org-binding\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test org binding\",\n policy_kind=\"PRINCIPAL_ACCESS_BOUNDARY\",\n policy_binding_id=\"test-org-binding\",\n policy=pab_policy.principal_access_boundary_policy_id.apply(lambda principal_access_boundary_policy_id: f\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principal_access_boundary_policy_id}\"),\n target={\n \"principal_set\": \"//cloudresourcemanager.googleapis.com/organizations/123456789\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pabPolicy = new Gcp.Iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test org binding\",\n PrincipalAccessBoundaryPolicyId = \"my-pab-policy\",\n });\n\n var my_org_binding = new Gcp.Iam.OrganizationsPolicyBinding(\"my-org-binding\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test org binding\",\n PolicyKind = \"PRINCIPAL_ACCESS_BOUNDARY\",\n PolicyBindingId = \"test-org-binding\",\n Policy = pabPolicy.PrincipalAccessBoundaryPolicyId.Apply(principalAccessBoundaryPolicyId =\u003e $\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principalAccessBoundaryPolicyId}\"),\n Target = new Gcp.Iam.Inputs.OrganizationsPolicyBindingTargetArgs\n {\n PrincipalSet = \"//cloudresourcemanager.googleapis.com/organizations/123456789\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpabPolicy, err := iam.NewPrincipalAccessBoundaryPolicy(ctx, \"pab_policy\", \u0026iam.PrincipalAccessBoundaryPolicyArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test org binding\"),\n\t\t\tPrincipalAccessBoundaryPolicyId: pulumi.String(\"my-pab-policy\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewOrganizationsPolicyBinding(ctx, \"my-org-binding\", \u0026iam.OrganizationsPolicyBindingArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test org binding\"),\n\t\t\tPolicyKind: pulumi.String(\"PRINCIPAL_ACCESS_BOUNDARY\"),\n\t\t\tPolicyBindingId: pulumi.String(\"test-org-binding\"),\n\t\t\tPolicy: pabPolicy.PrincipalAccessBoundaryPolicyId.ApplyT(func(principalAccessBoundaryPolicyId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%v\", principalAccessBoundaryPolicyId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTarget: \u0026iam.OrganizationsPolicyBindingTargetArgs{\n\t\t\t\tPrincipalSet: pulumi.String(\"//cloudresourcemanager.googleapis.com/organizations/123456789\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicy;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicyArgs;\nimport com.pulumi.gcp.iam.OrganizationsPolicyBinding;\nimport com.pulumi.gcp.iam.OrganizationsPolicyBindingArgs;\nimport com.pulumi.gcp.iam.inputs.OrganizationsPolicyBindingTargetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pabPolicy = new PrincipalAccessBoundaryPolicy(\"pabPolicy\", PrincipalAccessBoundaryPolicyArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test org binding\")\n .principalAccessBoundaryPolicyId(\"my-pab-policy\")\n .build());\n\n var my_org_binding = new OrganizationsPolicyBinding(\"my-org-binding\", OrganizationsPolicyBindingArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test org binding\")\n .policyKind(\"PRINCIPAL_ACCESS_BOUNDARY\")\n .policyBindingId(\"test-org-binding\")\n .policy(pabPolicy.principalAccessBoundaryPolicyId().applyValue(principalAccessBoundaryPolicyId -\u003e String.format(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%s\", principalAccessBoundaryPolicyId)))\n .target(OrganizationsPolicyBindingTargetArgs.builder()\n .principalSet(\"//cloudresourcemanager.googleapis.com/organizations/123456789\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pabPolicy:\n type: gcp:iam:PrincipalAccessBoundaryPolicy\n name: pab_policy\n properties:\n organization: '123456789'\n location: global\n displayName: test org binding\n principalAccessBoundaryPolicyId: my-pab-policy\n my-org-binding:\n type: gcp:iam:OrganizationsPolicyBinding\n properties:\n organization: '123456789'\n location: global\n displayName: test org binding\n policyKind: PRINCIPAL_ACCESS_BOUNDARY\n policyBindingId: test-org-binding\n policy: organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}\n target:\n principalSet: //cloudresourcemanager.googleapis.com/organizations/123456789\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nOrganizationsPolicyBinding can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/locations/{{location}}/policyBindings/{{policy_binding_id}}`\n\n* `{{organization}}/{{location}}/{{policy_binding_id}}`\n\nWhen using the `pulumi import` command, OrganizationsPolicyBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/organizationsPolicyBinding:OrganizationsPolicyBinding default organizations/{{organization}}/locations/{{location}}/policyBindings/{{policy_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/organizationsPolicyBinding:OrganizationsPolicyBinding default {{organization}}/{{location}}/{{policy_binding_id}}\n```\n\n",
+ "description": "A policy binding to an organizations\n\n\nTo get more information about OrganizationsPolicyBinding, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.policyBindings)\n* How-to Guides\n * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding)\n\n## Example Usage\n\n### Iam Organizations Policy Binding\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pabPolicy = new gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test org binding\",\n principalAccessBoundaryPolicyId: \"my-pab-policy\",\n});\nconst my_org_binding = new gcp.iam.OrganizationsPolicyBinding(\"my-org-binding\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test org binding\",\n policyKind: \"PRINCIPAL_ACCESS_BOUNDARY\",\n policyBindingId: \"test-org-binding\",\n policy: pulumi.interpolate`organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}`,\n target: {\n principalSet: \"//cloudresourcemanager.googleapis.com/organizations/123456789\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npab_policy = gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test org binding\",\n principal_access_boundary_policy_id=\"my-pab-policy\")\nmy_org_binding = gcp.iam.OrganizationsPolicyBinding(\"my-org-binding\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test org binding\",\n policy_kind=\"PRINCIPAL_ACCESS_BOUNDARY\",\n policy_binding_id=\"test-org-binding\",\n policy=pab_policy.principal_access_boundary_policy_id.apply(lambda principal_access_boundary_policy_id: f\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principal_access_boundary_policy_id}\"),\n target={\n \"principal_set\": \"//cloudresourcemanager.googleapis.com/organizations/123456789\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pabPolicy = new Gcp.Iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test org binding\",\n PrincipalAccessBoundaryPolicyId = \"my-pab-policy\",\n });\n\n var my_org_binding = new Gcp.Iam.OrganizationsPolicyBinding(\"my-org-binding\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test org binding\",\n PolicyKind = \"PRINCIPAL_ACCESS_BOUNDARY\",\n PolicyBindingId = \"test-org-binding\",\n Policy = pabPolicy.PrincipalAccessBoundaryPolicyId.Apply(principalAccessBoundaryPolicyId =\u003e $\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principalAccessBoundaryPolicyId}\"),\n Target = new Gcp.Iam.Inputs.OrganizationsPolicyBindingTargetArgs\n {\n PrincipalSet = \"//cloudresourcemanager.googleapis.com/organizations/123456789\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpabPolicy, err := iam.NewPrincipalAccessBoundaryPolicy(ctx, \"pab_policy\", \u0026iam.PrincipalAccessBoundaryPolicyArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test org binding\"),\n\t\t\tPrincipalAccessBoundaryPolicyId: pulumi.String(\"my-pab-policy\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewOrganizationsPolicyBinding(ctx, \"my-org-binding\", \u0026iam.OrganizationsPolicyBindingArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test org binding\"),\n\t\t\tPolicyKind: pulumi.String(\"PRINCIPAL_ACCESS_BOUNDARY\"),\n\t\t\tPolicyBindingId: pulumi.String(\"test-org-binding\"),\n\t\t\tPolicy: pabPolicy.PrincipalAccessBoundaryPolicyId.ApplyT(func(principalAccessBoundaryPolicyId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%v\", principalAccessBoundaryPolicyId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTarget: \u0026iam.OrganizationsPolicyBindingTargetArgs{\n\t\t\t\tPrincipalSet: pulumi.String(\"//cloudresourcemanager.googleapis.com/organizations/123456789\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicy;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicyArgs;\nimport com.pulumi.gcp.iam.OrganizationsPolicyBinding;\nimport com.pulumi.gcp.iam.OrganizationsPolicyBindingArgs;\nimport com.pulumi.gcp.iam.inputs.OrganizationsPolicyBindingTargetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pabPolicy = new PrincipalAccessBoundaryPolicy(\"pabPolicy\", PrincipalAccessBoundaryPolicyArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test org binding\")\n .principalAccessBoundaryPolicyId(\"my-pab-policy\")\n .build());\n\n var my_org_binding = new OrganizationsPolicyBinding(\"my-org-binding\", OrganizationsPolicyBindingArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test org binding\")\n .policyKind(\"PRINCIPAL_ACCESS_BOUNDARY\")\n .policyBindingId(\"test-org-binding\")\n .policy(pabPolicy.principalAccessBoundaryPolicyId().applyValue(principalAccessBoundaryPolicyId -\u003e String.format(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%s\", principalAccessBoundaryPolicyId)))\n .target(OrganizationsPolicyBindingTargetArgs.builder()\n .principalSet(\"//cloudresourcemanager.googleapis.com/organizations/123456789\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pabPolicy:\n type: gcp:iam:PrincipalAccessBoundaryPolicy\n name: pab_policy\n properties:\n organization: '123456789'\n location: global\n displayName: test org binding\n principalAccessBoundaryPolicyId: my-pab-policy\n my-org-binding:\n type: gcp:iam:OrganizationsPolicyBinding\n properties:\n organization: '123456789'\n location: global\n displayName: test org binding\n policyKind: PRINCIPAL_ACCESS_BOUNDARY\n policyBindingId: test-org-binding\n policy: organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}\n target:\n principalSet: //cloudresourcemanager.googleapis.com/organizations/123456789\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nOrganizationsPolicyBinding can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/locations/{{location}}/policyBindings/{{policy_binding_id}}`\n\n* `{{organization}}/{{location}}/{{policy_binding_id}}`\n\nWhen using the `pulumi import` command, OrganizationsPolicyBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/organizationsPolicyBinding:OrganizationsPolicyBinding default organizations/{{organization}}/locations/{{location}}/policyBindings/{{policy_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/organizationsPolicyBinding:OrganizationsPolicyBinding default {{organization}}/{{location}}/{{policy_binding_id}}\n```\n\n",
"properties": {
"annotations": {
"type": "object",
@@ -223891,7 +225693,7 @@
}
},
"gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy": {
- "description": "## Example Usage\n\n### Iam Principal Access Boundary Policy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_pab_policy = new gcp.iam.PrincipalAccessBoundaryPolicy(\"my-pab-policy\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test pab policy\",\n principalAccessBoundaryPolicyId: \"test-pab-policy\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_pab_policy = gcp.iam.PrincipalAccessBoundaryPolicy(\"my-pab-policy\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test pab policy\",\n principal_access_boundary_policy_id=\"test-pab-policy\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_pab_policy = new Gcp.Iam.PrincipalAccessBoundaryPolicy(\"my-pab-policy\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test pab policy\",\n PrincipalAccessBoundaryPolicyId = \"test-pab-policy\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewPrincipalAccessBoundaryPolicy(ctx, \"my-pab-policy\", \u0026iam.PrincipalAccessBoundaryPolicyArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test pab policy\"),\n\t\t\tPrincipalAccessBoundaryPolicyId: pulumi.String(\"test-pab-policy\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicy;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_pab_policy = new PrincipalAccessBoundaryPolicy(\"my-pab-policy\", PrincipalAccessBoundaryPolicyArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test pab policy\")\n .principalAccessBoundaryPolicyId(\"test-pab-policy\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-pab-policy:\n type: gcp:iam:PrincipalAccessBoundaryPolicy\n properties:\n organization: '123456789'\n location: global\n displayName: test pab policy\n principalAccessBoundaryPolicyId: test-pab-policy\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPrincipalAccessBoundaryPolicy can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/locations/{{location}}/principalAccessBoundaryPolicies/{{principal_access_boundary_policy_id}}`\n\n* `{{organization}}/{{location}}/{{principal_access_boundary_policy_id}}`\n\nWhen using the `pulumi import` command, PrincipalAccessBoundaryPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy default organizations/{{organization}}/locations/{{location}}/principalAccessBoundaryPolicies/{{principal_access_boundary_policy_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy default {{organization}}/{{location}}/{{principal_access_boundary_policy_id}}\n```\n\n",
+ "description": "An IAM Principal Access Boundary Policy resource\n\n\nTo get more information about PrincipalAccessBoundaryPolicy, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.principalAccessBoundaryPolicies)\n* How-to Guides\n * [Create and apply Principal Access Boundaries](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create)\n\n## Example Usage\n\n### Iam Principal Access Boundary Policy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_pab_policy = new gcp.iam.PrincipalAccessBoundaryPolicy(\"my-pab-policy\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test pab policy\",\n principalAccessBoundaryPolicyId: \"test-pab-policy\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_pab_policy = gcp.iam.PrincipalAccessBoundaryPolicy(\"my-pab-policy\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test pab policy\",\n principal_access_boundary_policy_id=\"test-pab-policy\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_pab_policy = new Gcp.Iam.PrincipalAccessBoundaryPolicy(\"my-pab-policy\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test pab policy\",\n PrincipalAccessBoundaryPolicyId = \"test-pab-policy\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewPrincipalAccessBoundaryPolicy(ctx, \"my-pab-policy\", \u0026iam.PrincipalAccessBoundaryPolicyArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test pab policy\"),\n\t\t\tPrincipalAccessBoundaryPolicyId: pulumi.String(\"test-pab-policy\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicy;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_pab_policy = new PrincipalAccessBoundaryPolicy(\"my-pab-policy\", PrincipalAccessBoundaryPolicyArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test pab policy\")\n .principalAccessBoundaryPolicyId(\"test-pab-policy\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-pab-policy:\n type: gcp:iam:PrincipalAccessBoundaryPolicy\n properties:\n organization: '123456789'\n location: global\n displayName: test pab policy\n principalAccessBoundaryPolicyId: test-pab-policy\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPrincipalAccessBoundaryPolicy can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/locations/{{location}}/principalAccessBoundaryPolicies/{{principal_access_boundary_policy_id}}`\n\n* `{{organization}}/{{location}}/{{principal_access_boundary_policy_id}}`\n\nWhen using the `pulumi import` command, PrincipalAccessBoundaryPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy default organizations/{{organization}}/locations/{{location}}/principalAccessBoundaryPolicies/{{principal_access_boundary_policy_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy default {{organization}}/{{location}}/{{principal_access_boundary_policy_id}}\n```\n\n",
"properties": {
"annotations": {
"type": "object",
@@ -224059,6 +225861,223 @@
"type": "object"
}
},
+ "gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding": {
+ "description": "A policy binding to a Project\n\n\nTo get more information about ProjectsPolicyBinding, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/projects.locations.policyBindings)\n* How-to Guides\n * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding)\n\n## Example Usage\n\n### Iam Projects Policy Binding\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst pabPolicy = new gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test project binding\",\n principalAccessBoundaryPolicyId: \"my-pab-policy\",\n});\nconst my_project_binding = new gcp.iam.ProjectsPolicyBinding(\"my-project-binding\", {\n project: project.then(project =\u003e project.projectId),\n location: \"global\",\n displayName: \"test project binding\",\n policyKind: \"PRINCIPAL_ACCESS_BOUNDARY\",\n policyBindingId: \"test-project-binding\",\n policy: pulumi.interpolate`organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}`,\n target: {\n principalSet: project.then(project =\u003e `//cloudresourcemanager.googleapis.com/projects/${project.projectId}`),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\npab_policy = gcp.iam.PrincipalAccessBoundaryPolicy(\"pab_policy\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test project binding\",\n principal_access_boundary_policy_id=\"my-pab-policy\")\nmy_project_binding = gcp.iam.ProjectsPolicyBinding(\"my-project-binding\",\n project=project.project_id,\n location=\"global\",\n display_name=\"test project binding\",\n policy_kind=\"PRINCIPAL_ACCESS_BOUNDARY\",\n policy_binding_id=\"test-project-binding\",\n policy=pab_policy.principal_access_boundary_policy_id.apply(lambda principal_access_boundary_policy_id: f\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principal_access_boundary_policy_id}\"),\n target={\n \"principal_set\": f\"//cloudresourcemanager.googleapis.com/projects/{project.project_id}\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var pabPolicy = new Gcp.Iam.PrincipalAccessBoundaryPolicy(\"pab_policy\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test project binding\",\n PrincipalAccessBoundaryPolicyId = \"my-pab-policy\",\n });\n\n var my_project_binding = new Gcp.Iam.ProjectsPolicyBinding(\"my-project-binding\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Location = \"global\",\n DisplayName = \"test project binding\",\n PolicyKind = \"PRINCIPAL_ACCESS_BOUNDARY\",\n PolicyBindingId = \"test-project-binding\",\n Policy = pabPolicy.PrincipalAccessBoundaryPolicyId.Apply(principalAccessBoundaryPolicyId =\u003e $\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principalAccessBoundaryPolicyId}\"),\n Target = new Gcp.Iam.Inputs.ProjectsPolicyBindingTargetArgs\n {\n PrincipalSet = $\"//cloudresourcemanager.googleapis.com/projects/{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpabPolicy, err := iam.NewPrincipalAccessBoundaryPolicy(ctx, \"pab_policy\", \u0026iam.PrincipalAccessBoundaryPolicyArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test project binding\"),\n\t\t\tPrincipalAccessBoundaryPolicyId: pulumi.String(\"my-pab-policy\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewProjectsPolicyBinding(ctx, \"my-project-binding\", \u0026iam.ProjectsPolicyBindingArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test project binding\"),\n\t\t\tPolicyKind: pulumi.String(\"PRINCIPAL_ACCESS_BOUNDARY\"),\n\t\t\tPolicyBindingId: pulumi.String(\"test-project-binding\"),\n\t\t\tPolicy: pabPolicy.PrincipalAccessBoundaryPolicyId.ApplyT(func(principalAccessBoundaryPolicyId string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%v\", principalAccessBoundaryPolicyId), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTarget: \u0026iam.ProjectsPolicyBindingTargetArgs{\n\t\t\t\tPrincipalSet: pulumi.Sprintf(\"//cloudresourcemanager.googleapis.com/projects/%v\", project.ProjectId),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicy;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicyArgs;\nimport com.pulumi.gcp.iam.ProjectsPolicyBinding;\nimport com.pulumi.gcp.iam.ProjectsPolicyBindingArgs;\nimport com.pulumi.gcp.iam.inputs.ProjectsPolicyBindingTargetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var pabPolicy = new PrincipalAccessBoundaryPolicy(\"pabPolicy\", PrincipalAccessBoundaryPolicyArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test project binding\")\n .principalAccessBoundaryPolicyId(\"my-pab-policy\")\n .build());\n\n var my_project_binding = new ProjectsPolicyBinding(\"my-project-binding\", ProjectsPolicyBindingArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .location(\"global\")\n .displayName(\"test project binding\")\n .policyKind(\"PRINCIPAL_ACCESS_BOUNDARY\")\n .policyBindingId(\"test-project-binding\")\n .policy(pabPolicy.principalAccessBoundaryPolicyId().applyValue(principalAccessBoundaryPolicyId -\u003e String.format(\"organizations/123456789/locations/global/principalAccessBoundaryPolicies/%s\", principalAccessBoundaryPolicyId)))\n .target(ProjectsPolicyBindingTargetArgs.builder()\n .principalSet(String.format(\"//cloudresourcemanager.googleapis.com/projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId())))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pabPolicy:\n type: gcp:iam:PrincipalAccessBoundaryPolicy\n name: pab_policy\n properties:\n organization: '123456789'\n location: global\n displayName: test project binding\n principalAccessBoundaryPolicyId: my-pab-policy\n my-project-binding:\n type: gcp:iam:ProjectsPolicyBinding\n properties:\n project: ${project.projectId}\n location: global\n displayName: test project binding\n policyKind: PRINCIPAL_ACCESS_BOUNDARY\n policyBindingId: test-project-binding\n policy: organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}\n target:\n principalSet: //cloudresourcemanager.googleapis.com/projects/${project.projectId}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nProjectsPolicyBinding can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}}`\n\n* `{{project}}/{{location}}/{{policy_binding_id}}`\n\n* `{{location}}/{{policy_binding_id}}`\n\nWhen using the `pulumi import` command, ProjectsPolicyBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{project}}/{{location}}/{{policy_binding_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{location}}/{{policy_binding_id}}\n```\n\n",
+ "properties": {
+ "annotations": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size\nlimitations **Note**: This field is non-authoritative, and will only manage the annotations present in your\nconfiguration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource.\n"
+ },
+ "condition": {
+ "$ref": "#/types/gcp:iam/ProjectsPolicyBindingCondition:ProjectsPolicyBindingCondition",
+ "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The\nsyntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\\"Summary\nsize limit\\\" description: \\\"Determines if a summary is less than 100 chars\\\" expression: \\\"document.summary.size() \u003c\n100\\\" Example (Equality): title: \\\"Requestor is owner\\\" description: \\\"Determines if requestor is the document owner\\\"\nexpression: \\\"document.owner == request.auth.claims.email\\\" Example (Logic): title: \\\"Public documents\\\" description:\n\\\"Determine whether the document should be publicly visible\\\" expression: \\\"document.type != 'private' \u0026\u0026 document.type\n!= 'internal'\\\" Example (Data Manipulation): title: \\\"Notification string\\\" description: \\\"Create a notification string\nwith a timestamp.\\\" expression: \\\"'New message received at ' + string(document.create_time)\\\" The exact variables and\nfunctions that may be referenced within an expression are determined by the service that evaluates it. See the service\ndocumentation for additional information.\n"
+ },
+ "createTime": {
+ "type": "string",
+ "description": "Output only. The time when the policy binding was created.\n"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "Optional. The description of the policy binding. Must be less than or equal to 63 characters.\n"
+ },
+ "effectiveAnnotations": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "etag": {
+ "type": "string",
+ "description": "Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location of the Policy Binding\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}`\n"
+ },
+ "policy": {
+ "type": "string",
+ "description": "Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project).\n"
+ },
+ "policyBindingId": {
+ "type": "string",
+ "description": "The Policy Binding ID.\n"
+ },
+ "policyKind": {
+ "type": "string",
+ "description": "Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will\nbe automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED\nPRINCIPAL_ACCESS_BOUNDARY ACCESS\n"
+ },
+ "policyUid": {
+ "type": "string",
+ "description": "Output only. The globally unique ID of the policy to be bound.\n"
+ },
+ "project": {
+ "type": "string"
+ },
+ "target": {
+ "$ref": "#/types/gcp:iam/ProjectsPolicyBindingTarget:ProjectsPolicyBindingTarget",
+ "description": "Target is the full resource name of the resource to which the policy will be bound. Immutable once set.\nStructure is documented below.\n"
+ },
+ "uid": {
+ "type": "string",
+ "description": "Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. The time when the policy binding was most recently updated.\n"
+ }
+ },
+ "required": [
+ "createTime",
+ "effectiveAnnotations",
+ "etag",
+ "location",
+ "name",
+ "policy",
+ "policyBindingId",
+ "policyUid",
+ "project",
+ "target",
+ "uid",
+ "updateTime"
+ ],
+ "inputProperties": {
+ "annotations": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size\nlimitations **Note**: This field is non-authoritative, and will only manage the annotations present in your\nconfiguration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource.\n"
+ },
+ "condition": {
+ "$ref": "#/types/gcp:iam/ProjectsPolicyBindingCondition:ProjectsPolicyBindingCondition",
+ "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The\nsyntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\\"Summary\nsize limit\\\" description: \\\"Determines if a summary is less than 100 chars\\\" expression: \\\"document.summary.size() \u003c\n100\\\" Example (Equality): title: \\\"Requestor is owner\\\" description: \\\"Determines if requestor is the document owner\\\"\nexpression: \\\"document.owner == request.auth.claims.email\\\" Example (Logic): title: \\\"Public documents\\\" description:\n\\\"Determine whether the document should be publicly visible\\\" expression: \\\"document.type != 'private' \u0026\u0026 document.type\n!= 'internal'\\\" Example (Data Manipulation): title: \\\"Notification string\\\" description: \\\"Create a notification string\nwith a timestamp.\\\" expression: \\\"'New message received at ' + string(document.create_time)\\\" The exact variables and\nfunctions that may be referenced within an expression are determined by the service that evaluates it. See the service\ndocumentation for additional information.\n"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "Optional. The description of the policy binding. Must be less than or equal to 63 characters.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location of the Policy Binding\n",
+ "willReplaceOnChanges": true
+ },
+ "policy": {
+ "type": "string",
+ "description": "Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project).\n",
+ "willReplaceOnChanges": true
+ },
+ "policyBindingId": {
+ "type": "string",
+ "description": "The Policy Binding ID.\n",
+ "willReplaceOnChanges": true
+ },
+ "policyKind": {
+ "type": "string",
+ "description": "Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will\nbe automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED\nPRINCIPAL_ACCESS_BOUNDARY ACCESS\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "target": {
+ "$ref": "#/types/gcp:iam/ProjectsPolicyBindingTarget:ProjectsPolicyBindingTarget",
+ "description": "Target is the full resource name of the resource to which the policy will be bound. Immutable once set.\nStructure is documented below.\n"
+ }
+ },
+ "requiredInputs": [
+ "location",
+ "policy",
+ "policyBindingId",
+ "target"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering ProjectsPolicyBinding resources.\n",
+ "properties": {
+ "annotations": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size\nlimitations **Note**: This field is non-authoritative, and will only manage the annotations present in your\nconfiguration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource.\n"
+ },
+ "condition": {
+ "$ref": "#/types/gcp:iam/ProjectsPolicyBindingCondition:ProjectsPolicyBindingCondition",
+ "description": "Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The\nsyntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\\"Summary\nsize limit\\\" description: \\\"Determines if a summary is less than 100 chars\\\" expression: \\\"document.summary.size() \u003c\n100\\\" Example (Equality): title: \\\"Requestor is owner\\\" description: \\\"Determines if requestor is the document owner\\\"\nexpression: \\\"document.owner == request.auth.claims.email\\\" Example (Logic): title: \\\"Public documents\\\" description:\n\\\"Determine whether the document should be publicly visible\\\" expression: \\\"document.type != 'private' \u0026\u0026 document.type\n!= 'internal'\\\" Example (Data Manipulation): title: \\\"Notification string\\\" description: \\\"Create a notification string\nwith a timestamp.\\\" expression: \\\"'New message received at ' + string(document.create_time)\\\" The exact variables and\nfunctions that may be referenced within an expression are determined by the service that evaluates it. See the service\ndocumentation for additional information.\n"
+ },
+ "createTime": {
+ "type": "string",
+ "description": "Output only. The time when the policy binding was created.\n"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "Optional. The description of the policy binding. Must be less than or equal to 63 characters.\n"
+ },
+ "effectiveAnnotations": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "etag": {
+ "type": "string",
+ "description": "Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location of the Policy Binding\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}`\n"
+ },
+ "policy": {
+ "type": "string",
+ "description": "Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project).\n",
+ "willReplaceOnChanges": true
+ },
+ "policyBindingId": {
+ "type": "string",
+ "description": "The Policy Binding ID.\n",
+ "willReplaceOnChanges": true
+ },
+ "policyKind": {
+ "type": "string",
+ "description": "Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will\nbe automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED\nPRINCIPAL_ACCESS_BOUNDARY ACCESS\n",
+ "willReplaceOnChanges": true
+ },
+ "policyUid": {
+ "type": "string",
+ "description": "Output only. The globally unique ID of the policy to be bound.\n"
+ },
+ "project": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "target": {
+ "$ref": "#/types/gcp:iam/ProjectsPolicyBindingTarget:ProjectsPolicyBindingTarget",
+ "description": "Target is the full resource name of the resource to which the policy will be bound. Immutable once set.\nStructure is documented below.\n"
+ },
+ "uid": {
+ "type": "string",
+ "description": "Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. The time when the policy binding was most recently updated.\n"
+ }
+ },
+ "type": "object"
+ }
+ },
"gcp:iam/workforcePool:WorkforcePool": {
"description": "Represents a collection of external workforces. Provides namespaces for\nfederated users that can be referenced in IAM policies.\n\n\nTo get more information about WorkforcePool, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v1/locations.workforcePools)\n* How-to Guides\n * [Manage pools](https://cloud.google.com/iam/docs/manage-workforce-identity-pools-providers#manage_pools)\n\n\u003e **Note:** Ask your Google Cloud account team to request access to workforce identity federation for\nyour billing/quota project. The account team notifies you when the project is granted access.\n\n## Example Usage\n\n### Iam Workforce Pool Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.iam.WorkforcePool(\"example\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.iam.WorkforcePool(\"example\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Iam.WorkforcePool(\"example\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewWorkforcePool(ctx, \"example\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new WorkforcePool(\"example\", WorkforcePoolArgs.builder()\n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Iam Workforce Pool Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.iam.WorkforcePool(\"example\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n displayName: \"Display name\",\n description: \"A sample workforce pool.\",\n disabled: false,\n sessionDuration: \"7200s\",\n accessRestrictions: {\n allowedServices: [{\n domain: \"backstory.chronicle.security\",\n }],\n disableProgrammaticSignin: false,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.iam.WorkforcePool(\"example\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\",\n display_name=\"Display name\",\n description=\"A sample workforce pool.\",\n disabled=False,\n session_duration=\"7200s\",\n access_restrictions={\n \"allowed_services\": [{\n \"domain\": \"backstory.chronicle.security\",\n }],\n \"disable_programmatic_signin\": False,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Iam.WorkforcePool(\"example\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n DisplayName = \"Display name\",\n Description = \"A sample workforce pool.\",\n Disabled = false,\n SessionDuration = \"7200s\",\n AccessRestrictions = new Gcp.Iam.Inputs.WorkforcePoolAccessRestrictionsArgs\n {\n AllowedServices = new[]\n {\n new Gcp.Iam.Inputs.WorkforcePoolAccessRestrictionsAllowedServiceArgs\n {\n Domain = \"backstory.chronicle.security\",\n },\n },\n DisableProgrammaticSignin = false,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewWorkforcePool(ctx, \"example\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"Display name\"),\n\t\t\tDescription: pulumi.String(\"A sample workforce pool.\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tSessionDuration: pulumi.String(\"7200s\"),\n\t\t\tAccessRestrictions: \u0026iam.WorkforcePoolAccessRestrictionsArgs{\n\t\t\t\tAllowedServices: iam.WorkforcePoolAccessRestrictionsAllowedServiceArray{\n\t\t\t\t\t\u0026iam.WorkforcePoolAccessRestrictionsAllowedServiceArgs{\n\t\t\t\t\t\tDomain: pulumi.String(\"backstory.chronicle.security\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tDisableProgrammaticSignin: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport com.pulumi.gcp.iam.inputs.WorkforcePoolAccessRestrictionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new WorkforcePool(\"example\", WorkforcePoolArgs.builder()\n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .displayName(\"Display name\")\n .description(\"A sample workforce pool.\")\n .disabled(false)\n .sessionDuration(\"7200s\")\n .accessRestrictions(WorkforcePoolAccessRestrictionsArgs.builder()\n .allowedServices(WorkforcePoolAccessRestrictionsAllowedServiceArgs.builder()\n .domain(\"backstory.chronicle.security\")\n .build())\n .disableProgrammaticSignin(false)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n displayName: Display name\n description: A sample workforce pool.\n disabled: false\n sessionDuration: 7200s\n accessRestrictions:\n allowedServices:\n - domain: backstory.chronicle.security\n disableProgrammaticSignin: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nWorkforcePool can be imported using any of these accepted formats:\n\n* `locations/{{location}}/workforcePools/{{workforce_pool_id}}`\n\n* `{{location}}/{{workforce_pool_id}}`\n\nWhen using the `pulumi import` command, WorkforcePool can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/workforcePool:WorkforcePool default locations/{{location}}/workforcePools/{{workforce_pool_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/workforcePool:WorkforcePool default {{location}}/{{workforce_pool_id}}\n```\n\n",
"properties": {
@@ -225611,7 +227630,7 @@
}
},
"gcp:iap/tunnelDestGroup:TunnelDestGroup": {
- "description": "Tunnel destination groups represent resources that have the same tunnel access restrictions.\n\n\nTo get more information about TunnelDestGroup, see:\n\n* [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.iap_tunnel.locations.destGroups)\n* How-to Guides\n * [Set up IAP TCP forwarding with an IP address or hostname in a Google Cloud or non-Google Cloud environment](https://cloud.google.com/iap/docs/tcp-by-host)\n\n## Example Usage\n\n### Iap Destgroup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst destGroup = new gcp.iap.TunnelDestGroup(\"dest_group\", {\n region: \"us-central1\",\n groupName: \"testgroup_87786\",\n cidrs: [\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndest_group = gcp.iap.TunnelDestGroup(\"dest_group\",\n region=\"us-central1\",\n group_name=\"testgroup_87786\",\n cidrs=[\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var destGroup = new Gcp.Iap.TunnelDestGroup(\"dest_group\", new()\n {\n Region = \"us-central1\",\n GroupName = \"testgroup_87786\",\n Cidrs = new[]\n {\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iap\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iap.NewTunnelDestGroup(ctx, \"dest_group\", \u0026iap.TunnelDestGroupArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tGroupName: pulumi.String(\"testgroup_87786\"),\n\t\t\tCidrs: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"10.1.0.0/16\"),\n\t\t\t\tpulumi.String(\"192.168.10.0/24\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iap.TunnelDestGroup;\nimport com.pulumi.gcp.iap.TunnelDestGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var destGroup = new TunnelDestGroup(\"destGroup\", TunnelDestGroupArgs.builder()\n .region(\"us-central1\")\n .groupName(\"testgroup_87786\")\n .cidrs( \n \"10.1.0.0/16\",\n \"192.168.10.0/24\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destGroup:\n type: gcp:iap:TunnelDestGroup\n name: dest_group\n properties:\n region: us-central1\n groupName: testgroup_87786\n cidrs:\n - 10.1.0.0/16\n - 192.168.10.0/24\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTunnelDestGroup can be imported using any of these accepted formats:\n\n* `projects/{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}`\n\n* `{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}`\n\n* `{{project}}/{{region}}/{{group_name}}`\n\n* `{{region}}/destGroups/{{group_name}}`\n\n* `{{region}}/{{group_name}}`\n\n* `{{group_name}}`\n\nWhen using the `pulumi import` command, TunnelDestGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default projects/{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{project}}/{{region}}/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{region}}/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{group_name}}\n```\n\n",
+ "description": "Tunnel destination groups represent resources that have the same tunnel access restrictions.\n\n\nTo get more information about TunnelDestGroup, see:\n\n* [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.iap_tunnel.locations.destGroups)\n* How-to Guides\n * [Set up IAP TCP forwarding with an IP address or hostname in a Google Cloud or non-Google Cloud environment](https://cloud.google.com/iap/docs/tcp-by-host)\n\n## Example Usage\n\n### Iap Destgroup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst destGroup = new gcp.iap.TunnelDestGroup(\"dest_group\", {\n region: \"us-central1\",\n groupName: \"testgroup_2067\",\n cidrs: [\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndest_group = gcp.iap.TunnelDestGroup(\"dest_group\",\n region=\"us-central1\",\n group_name=\"testgroup_2067\",\n cidrs=[\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var destGroup = new Gcp.Iap.TunnelDestGroup(\"dest_group\", new()\n {\n Region = \"us-central1\",\n GroupName = \"testgroup_2067\",\n Cidrs = new[]\n {\n \"10.1.0.0/16\",\n \"192.168.10.0/24\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iap\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iap.NewTunnelDestGroup(ctx, \"dest_group\", \u0026iap.TunnelDestGroupArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tGroupName: pulumi.String(\"testgroup_2067\"),\n\t\t\tCidrs: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"10.1.0.0/16\"),\n\t\t\t\tpulumi.String(\"192.168.10.0/24\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iap.TunnelDestGroup;\nimport com.pulumi.gcp.iap.TunnelDestGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var destGroup = new TunnelDestGroup(\"destGroup\", TunnelDestGroupArgs.builder()\n .region(\"us-central1\")\n .groupName(\"testgroup_2067\")\n .cidrs( \n \"10.1.0.0/16\",\n \"192.168.10.0/24\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n destGroup:\n type: gcp:iap:TunnelDestGroup\n name: dest_group\n properties:\n region: us-central1\n groupName: testgroup_2067\n cidrs:\n - 10.1.0.0/16\n - 192.168.10.0/24\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTunnelDestGroup can be imported using any of these accepted formats:\n\n* `projects/{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}`\n\n* `{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}`\n\n* `{{project}}/{{region}}/{{group_name}}`\n\n* `{{region}}/destGroups/{{group_name}}`\n\n* `{{region}}/{{group_name}}`\n\n* `{{group_name}}`\n\nWhen using the `pulumi import` command, TunnelDestGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default projects/{{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{project}}/iap_tunnel/locations/{{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{project}}/{{region}}/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{region}}/destGroups/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{region}}/{{group_name}}\n```\n\n```sh\n$ pulumi import gcp:iap/tunnelDestGroup:TunnelDestGroup default {{group_name}}\n```\n\n",
"properties": {
"cidrs": {
"type": "array",
@@ -229468,7 +231487,7 @@
}
},
"gcp:integrationconnectors/managedZone:ManagedZone": {
- "description": "An Integration connectors Managed Zone.\n\n\nTo get more information about ManagedZone, see:\n\n* [API documentation](https://cloud.google.com/integration-connectors/docs/reference/rest/v1/projects.locations.global.managedZones)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/integration-connectors/docs)\n\n## Example Usage\n\n### Integration Connectors Managed Zone\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst targetProject = new gcp.organizations.Project(\"target_project\", {\n projectId: \"tf-test_2067\",\n name: \"tf-test_40785\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst testProject = gcp.organizations.getProject({});\nconst dnsPeerBinding = new gcp.projects.IAMMember(\"dns_peer_binding\", {\n project: targetProject.projectId,\n role: \"roles/dns.peer\",\n member: testProject.then(testProject =\u003e `serviceAccount:service-${testProject.number}@gcp-sa-connectors.iam.gserviceaccount.com`),\n});\nconst dns = new gcp.projects.Service(\"dns\", {\n project: targetProject.projectId,\n service: \"dns.googleapis.com\",\n});\nconst compute = new gcp.projects.Service(\"compute\", {\n project: targetProject.projectId,\n service: \"compute.googleapis.com\",\n});\nconst network = new gcp.compute.Network(\"network\", {\n project: targetProject.projectId,\n name: \"test\",\n autoCreateSubnetworks: false,\n}, {\n dependsOn: [compute],\n});\nconst zone = new gcp.dns.ManagedZone(\"zone\", {\n name: \"tf-test-dns_79169\",\n dnsName: \"private_56529.example.com.\",\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [{\n networkUrl: network.id,\n }],\n },\n}, {\n dependsOn: [dns],\n});\nconst testmanagedzone = new gcp.integrationconnectors.ManagedZone(\"testmanagedzone\", {\n name: \"test\",\n description: \"tf created description\",\n labels: {\n intent: \"example\",\n },\n targetProject: targetProject.projectId,\n targetVpc: \"test\",\n dns: zone.dnsName,\n}, {\n dependsOn: [\n dnsPeerBinding,\n zone,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntarget_project = gcp.organizations.Project(\"target_project\",\n project_id=\"tf-test_2067\",\n name=\"tf-test_40785\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\ntest_project = gcp.organizations.get_project()\ndns_peer_binding = gcp.projects.IAMMember(\"dns_peer_binding\",\n project=target_project.project_id,\n role=\"roles/dns.peer\",\n member=f\"serviceAccount:service-{test_project.number}@gcp-sa-connectors.iam.gserviceaccount.com\")\ndns = gcp.projects.Service(\"dns\",\n project=target_project.project_id,\n service=\"dns.googleapis.com\")\ncompute = gcp.projects.Service(\"compute\",\n project=target_project.project_id,\n service=\"compute.googleapis.com\")\nnetwork = gcp.compute.Network(\"network\",\n project=target_project.project_id,\n name=\"test\",\n auto_create_subnetworks=False,\n opts = pulumi.ResourceOptions(depends_on=[compute]))\nzone = gcp.dns.ManagedZone(\"zone\",\n name=\"tf-test-dns_79169\",\n dns_name=\"private_56529.example.com.\",\n visibility=\"private\",\n private_visibility_config={\n \"networks\": [{\n \"network_url\": network.id,\n }],\n },\n opts = pulumi.ResourceOptions(depends_on=[dns]))\ntestmanagedzone = gcp.integrationconnectors.ManagedZone(\"testmanagedzone\",\n name=\"test\",\n description=\"tf created description\",\n labels={\n \"intent\": \"example\",\n },\n target_project=target_project.project_id,\n target_vpc=\"test\",\n dns=zone.dns_name,\n opts = pulumi.ResourceOptions(depends_on=[\n dns_peer_binding,\n zone,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var targetProject = new Gcp.Organizations.Project(\"target_project\", new()\n {\n ProjectId = \"tf-test_2067\",\n Name = \"tf-test_40785\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var dnsPeerBinding = new Gcp.Projects.IAMMember(\"dns_peer_binding\", new()\n {\n Project = targetProject.ProjectId,\n Role = \"roles/dns.peer\",\n Member = $\"serviceAccount:service-{testProject.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-connectors.iam.gserviceaccount.com\",\n });\n\n var dns = new Gcp.Projects.Service(\"dns\", new()\n {\n Project = targetProject.ProjectId,\n ServiceName = \"dns.googleapis.com\",\n });\n\n var compute = new Gcp.Projects.Service(\"compute\", new()\n {\n Project = targetProject.ProjectId,\n ServiceName = \"compute.googleapis.com\",\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Project = targetProject.ProjectId,\n Name = \"test\",\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n compute,\n },\n });\n\n var zone = new Gcp.Dns.ManagedZone(\"zone\", new()\n {\n Name = \"tf-test-dns_79169\",\n DnsName = \"private_56529.example.com.\",\n Visibility = \"private\",\n PrivateVisibilityConfig = new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigArgs\n {\n Networks = new[]\n {\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigNetworkArgs\n {\n NetworkUrl = network.Id,\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n dns,\n },\n });\n\n var testmanagedzone = new Gcp.IntegrationConnectors.ManagedZone(\"testmanagedzone\", new()\n {\n Name = \"test\",\n Description = \"tf created description\",\n Labels = \n {\n { \"intent\", \"example\" },\n },\n TargetProject = targetProject.ProjectId,\n TargetVpc = \"test\",\n Dns = zone.DnsName,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n dnsPeerBinding,\n zone,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dns\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/integrationconnectors\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttargetProject, err := organizations.NewProject(ctx, \"target_project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_2067\"),\n\t\t\tName: pulumi.String(\"tf-test_40785\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdnsPeerBinding, err := projects.NewIAMMember(ctx, \"dns_peer_binding\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tRole: pulumi.String(\"roles/dns.peer\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-connectors.iam.gserviceaccount.com\", testProject.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdns, err := projects.NewService(ctx, \"dns\", \u0026projects.ServiceArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tService: pulumi.String(\"dns.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcompute, err := projects.NewService(ctx, \"compute\", \u0026projects.ServiceArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tService: pulumi.String(\"compute.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tName: pulumi.String(\"test\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcompute,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tzone, err := dns.NewManagedZone(ctx, \"zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tName: pulumi.String(\"tf-test-dns_79169\"),\n\t\t\tDnsName: pulumi.String(\"private_56529.example.com.\"),\n\t\t\tVisibility: pulumi.String(\"private\"),\n\t\t\tPrivateVisibilityConfig: \u0026dns.ManagedZonePrivateVisibilityConfigArgs{\n\t\t\t\tNetworks: dns.ManagedZonePrivateVisibilityConfigNetworkArray{\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigNetworkArgs{\n\t\t\t\t\t\tNetworkUrl: network.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdns,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = integrationconnectors.NewManagedZone(ctx, \"testmanagedzone\", \u0026integrationconnectors.ManagedZoneArgs{\n\t\t\tName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"tf created description\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"intent\": pulumi.String(\"example\"),\n\t\t\t},\n\t\t\tTargetProject: targetProject.ProjectId,\n\t\t\tTargetVpc: pulumi.String(\"test\"),\n\t\t\tDns: zone.DnsName,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdnsPeerBinding,\n\t\t\tzone,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport com.pulumi.gcp.integrationconnectors.ManagedZone;\nimport com.pulumi.gcp.integrationconnectors.ManagedZoneArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var targetProject = new Project(\"targetProject\", ProjectArgs.builder()\n .projectId(\"tf-test_2067\")\n .name(\"tf-test_40785\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n final var testProject = OrganizationsFunctions.getProject();\n\n var dnsPeerBinding = new IAMMember(\"dnsPeerBinding\", IAMMemberArgs.builder()\n .project(targetProject.projectId())\n .role(\"roles/dns.peer\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-connectors.iam.gserviceaccount.com\", testProject.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var dns = new Service(\"dns\", ServiceArgs.builder()\n .project(targetProject.projectId())\n .service(\"dns.googleapis.com\")\n .build());\n\n var compute = new Service(\"compute\", ServiceArgs.builder()\n .project(targetProject.projectId())\n .service(\"compute.googleapis.com\")\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .project(targetProject.projectId())\n .name(\"test\")\n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(compute)\n .build());\n\n var zone = new ManagedZone(\"zone\", ManagedZoneArgs.builder()\n .name(\"tf-test-dns_79169\")\n .dnsName(\"private_56529.example.com.\")\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(dns)\n .build());\n\n var testmanagedzone = new ManagedZone(\"testmanagedzone\", ManagedZoneArgs.builder()\n .name(\"test\")\n .description(\"tf created description\")\n .labels(Map.of(\"intent\", \"example\"))\n .targetProject(targetProject.projectId())\n .targetVpc(\"test\")\n .dns(zone.dnsName())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n dnsPeerBinding,\n zone)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n targetProject:\n type: gcp:organizations:Project\n name: target_project\n properties:\n projectId: tf-test_2067\n name: tf-test_40785\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n dnsPeerBinding:\n type: gcp:projects:IAMMember\n name: dns_peer_binding\n properties:\n project: ${targetProject.projectId}\n role: roles/dns.peer\n member: serviceAccount:service-${testProject.number}@gcp-sa-connectors.iam.gserviceaccount.com\n dns:\n type: gcp:projects:Service\n properties:\n project: ${targetProject.projectId}\n service: dns.googleapis.com\n compute:\n type: gcp:projects:Service\n properties:\n project: ${targetProject.projectId}\n service: compute.googleapis.com\n network:\n type: gcp:compute:Network\n properties:\n project: ${targetProject.projectId}\n name: test\n autoCreateSubnetworks: false\n options:\n dependsOn:\n - ${compute}\n zone:\n type: gcp:dns:ManagedZone\n properties:\n name: tf-test-dns_79169\n dnsName: private_56529.example.com.\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${network.id}\n options:\n dependsOn:\n - ${dns}\n testmanagedzone:\n type: gcp:integrationconnectors:ManagedZone\n properties:\n name: test\n description: tf created description\n labels:\n intent: example\n targetProject: ${targetProject.projectId}\n targetVpc: test\n dns: ${zone.dnsName}\n options:\n dependsOn:\n - ${dnsPeerBinding}\n - ${zone}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nManagedZone can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/managedZones/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, ManagedZone can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default projects/{{project}}/locations/global/managedZones/{{name}}\n```\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default {{name}}\n```\n\n",
+ "description": "An Integration connectors Managed Zone.\n\n\nTo get more information about ManagedZone, see:\n\n* [API documentation](https://cloud.google.com/integration-connectors/docs/reference/rest/v1/projects.locations.global.managedZones)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/integration-connectors/docs)\n\n## Example Usage\n\n### Integration Connectors Managed Zone\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst targetProject = new gcp.organizations.Project(\"target_project\", {\n projectId: \"tf-test_40785\",\n name: \"tf-test_79169\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst testProject = gcp.organizations.getProject({});\nconst dnsPeerBinding = new gcp.projects.IAMMember(\"dns_peer_binding\", {\n project: targetProject.projectId,\n role: \"roles/dns.peer\",\n member: testProject.then(testProject =\u003e `serviceAccount:service-${testProject.number}@gcp-sa-connectors.iam.gserviceaccount.com`),\n});\nconst dns = new gcp.projects.Service(\"dns\", {\n project: targetProject.projectId,\n service: \"dns.googleapis.com\",\n});\nconst compute = new gcp.projects.Service(\"compute\", {\n project: targetProject.projectId,\n service: \"compute.googleapis.com\",\n});\nconst network = new gcp.compute.Network(\"network\", {\n project: targetProject.projectId,\n name: \"test\",\n autoCreateSubnetworks: false,\n}, {\n dependsOn: [compute],\n});\nconst zone = new gcp.dns.ManagedZone(\"zone\", {\n name: \"tf-test-dns_56529\",\n dnsName: \"private_75413.example.com.\",\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [{\n networkUrl: network.id,\n }],\n },\n}, {\n dependsOn: [dns],\n});\nconst testmanagedzone = new gcp.integrationconnectors.ManagedZone(\"testmanagedzone\", {\n name: \"test\",\n description: \"tf created description\",\n labels: {\n intent: \"example\",\n },\n targetProject: targetProject.projectId,\n targetVpc: \"test\",\n dns: zone.dnsName,\n}, {\n dependsOn: [\n dnsPeerBinding,\n zone,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntarget_project = gcp.organizations.Project(\"target_project\",\n project_id=\"tf-test_40785\",\n name=\"tf-test_79169\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\ntest_project = gcp.organizations.get_project()\ndns_peer_binding = gcp.projects.IAMMember(\"dns_peer_binding\",\n project=target_project.project_id,\n role=\"roles/dns.peer\",\n member=f\"serviceAccount:service-{test_project.number}@gcp-sa-connectors.iam.gserviceaccount.com\")\ndns = gcp.projects.Service(\"dns\",\n project=target_project.project_id,\n service=\"dns.googleapis.com\")\ncompute = gcp.projects.Service(\"compute\",\n project=target_project.project_id,\n service=\"compute.googleapis.com\")\nnetwork = gcp.compute.Network(\"network\",\n project=target_project.project_id,\n name=\"test\",\n auto_create_subnetworks=False,\n opts = pulumi.ResourceOptions(depends_on=[compute]))\nzone = gcp.dns.ManagedZone(\"zone\",\n name=\"tf-test-dns_56529\",\n dns_name=\"private_75413.example.com.\",\n visibility=\"private\",\n private_visibility_config={\n \"networks\": [{\n \"network_url\": network.id,\n }],\n },\n opts = pulumi.ResourceOptions(depends_on=[dns]))\ntestmanagedzone = gcp.integrationconnectors.ManagedZone(\"testmanagedzone\",\n name=\"test\",\n description=\"tf created description\",\n labels={\n \"intent\": \"example\",\n },\n target_project=target_project.project_id,\n target_vpc=\"test\",\n dns=zone.dns_name,\n opts = pulumi.ResourceOptions(depends_on=[\n dns_peer_binding,\n zone,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var targetProject = new Gcp.Organizations.Project(\"target_project\", new()\n {\n ProjectId = \"tf-test_40785\",\n Name = \"tf-test_79169\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var dnsPeerBinding = new Gcp.Projects.IAMMember(\"dns_peer_binding\", new()\n {\n Project = targetProject.ProjectId,\n Role = \"roles/dns.peer\",\n Member = $\"serviceAccount:service-{testProject.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-connectors.iam.gserviceaccount.com\",\n });\n\n var dns = new Gcp.Projects.Service(\"dns\", new()\n {\n Project = targetProject.ProjectId,\n ServiceName = \"dns.googleapis.com\",\n });\n\n var compute = new Gcp.Projects.Service(\"compute\", new()\n {\n Project = targetProject.ProjectId,\n ServiceName = \"compute.googleapis.com\",\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Project = targetProject.ProjectId,\n Name = \"test\",\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n compute,\n },\n });\n\n var zone = new Gcp.Dns.ManagedZone(\"zone\", new()\n {\n Name = \"tf-test-dns_56529\",\n DnsName = \"private_75413.example.com.\",\n Visibility = \"private\",\n PrivateVisibilityConfig = new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigArgs\n {\n Networks = new[]\n {\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigNetworkArgs\n {\n NetworkUrl = network.Id,\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n dns,\n },\n });\n\n var testmanagedzone = new Gcp.IntegrationConnectors.ManagedZone(\"testmanagedzone\", new()\n {\n Name = \"test\",\n Description = \"tf created description\",\n Labels = \n {\n { \"intent\", \"example\" },\n },\n TargetProject = targetProject.ProjectId,\n TargetVpc = \"test\",\n Dns = zone.DnsName,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n dnsPeerBinding,\n zone,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dns\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/integrationconnectors\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttargetProject, err := organizations.NewProject(ctx, \"target_project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_40785\"),\n\t\t\tName: pulumi.String(\"tf-test_79169\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdnsPeerBinding, err := projects.NewIAMMember(ctx, \"dns_peer_binding\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tRole: pulumi.String(\"roles/dns.peer\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-connectors.iam.gserviceaccount.com\", testProject.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdns, err := projects.NewService(ctx, \"dns\", \u0026projects.ServiceArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tService: pulumi.String(\"dns.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcompute, err := projects.NewService(ctx, \"compute\", \u0026projects.ServiceArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tService: pulumi.String(\"compute.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tProject: targetProject.ProjectId,\n\t\t\tName: pulumi.String(\"test\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcompute,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tzone, err := dns.NewManagedZone(ctx, \"zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tName: pulumi.String(\"tf-test-dns_56529\"),\n\t\t\tDnsName: pulumi.String(\"private_75413.example.com.\"),\n\t\t\tVisibility: pulumi.String(\"private\"),\n\t\t\tPrivateVisibilityConfig: \u0026dns.ManagedZonePrivateVisibilityConfigArgs{\n\t\t\t\tNetworks: dns.ManagedZonePrivateVisibilityConfigNetworkArray{\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigNetworkArgs{\n\t\t\t\t\t\tNetworkUrl: network.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdns,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = integrationconnectors.NewManagedZone(ctx, \"testmanagedzone\", \u0026integrationconnectors.ManagedZoneArgs{\n\t\t\tName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"tf created description\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"intent\": pulumi.String(\"example\"),\n\t\t\t},\n\t\t\tTargetProject: targetProject.ProjectId,\n\t\t\tTargetVpc: pulumi.String(\"test\"),\n\t\t\tDns: zone.DnsName,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tdnsPeerBinding,\n\t\t\tzone,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport com.pulumi.gcp.integrationconnectors.ManagedZone;\nimport com.pulumi.gcp.integrationconnectors.ManagedZoneArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var targetProject = new Project(\"targetProject\", ProjectArgs.builder()\n .projectId(\"tf-test_40785\")\n .name(\"tf-test_79169\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n final var testProject = OrganizationsFunctions.getProject();\n\n var dnsPeerBinding = new IAMMember(\"dnsPeerBinding\", IAMMemberArgs.builder()\n .project(targetProject.projectId())\n .role(\"roles/dns.peer\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-connectors.iam.gserviceaccount.com\", testProject.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var dns = new Service(\"dns\", ServiceArgs.builder()\n .project(targetProject.projectId())\n .service(\"dns.googleapis.com\")\n .build());\n\n var compute = new Service(\"compute\", ServiceArgs.builder()\n .project(targetProject.projectId())\n .service(\"compute.googleapis.com\")\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .project(targetProject.projectId())\n .name(\"test\")\n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(compute)\n .build());\n\n var zone = new ManagedZone(\"zone\", ManagedZoneArgs.builder()\n .name(\"tf-test-dns_56529\")\n .dnsName(\"private_75413.example.com.\")\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(dns)\n .build());\n\n var testmanagedzone = new ManagedZone(\"testmanagedzone\", ManagedZoneArgs.builder()\n .name(\"test\")\n .description(\"tf created description\")\n .labels(Map.of(\"intent\", \"example\"))\n .targetProject(targetProject.projectId())\n .targetVpc(\"test\")\n .dns(zone.dnsName())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n dnsPeerBinding,\n zone)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n targetProject:\n type: gcp:organizations:Project\n name: target_project\n properties:\n projectId: tf-test_40785\n name: tf-test_79169\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n dnsPeerBinding:\n type: gcp:projects:IAMMember\n name: dns_peer_binding\n properties:\n project: ${targetProject.projectId}\n role: roles/dns.peer\n member: serviceAccount:service-${testProject.number}@gcp-sa-connectors.iam.gserviceaccount.com\n dns:\n type: gcp:projects:Service\n properties:\n project: ${targetProject.projectId}\n service: dns.googleapis.com\n compute:\n type: gcp:projects:Service\n properties:\n project: ${targetProject.projectId}\n service: compute.googleapis.com\n network:\n type: gcp:compute:Network\n properties:\n project: ${targetProject.projectId}\n name: test\n autoCreateSubnetworks: false\n options:\n dependsOn:\n - ${compute}\n zone:\n type: gcp:dns:ManagedZone\n properties:\n name: tf-test-dns_56529\n dnsName: private_75413.example.com.\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${network.id}\n options:\n dependsOn:\n - ${dns}\n testmanagedzone:\n type: gcp:integrationconnectors:ManagedZone\n properties:\n name: test\n description: tf created description\n labels:\n intent: example\n targetProject: ${targetProject.projectId}\n targetVpc: test\n dns: ${zone.dnsName}\n options:\n dependsOn:\n - ${dnsPeerBinding}\n - ${zone}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nManagedZone can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/global/managedZones/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, ManagedZone can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default projects/{{project}}/locations/global/managedZones/{{name}}\n```\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:integrationconnectors/managedZone:ManagedZone default {{name}}\n```\n\n",
"properties": {
"createTime": {
"type": "string",
@@ -237298,7 +239317,7 @@
},
"kdcHostname": {
"type": "string",
- "description": "Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1\n"
+ "description": "Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1\n"
},
"kdcIp": {
"type": "string",
@@ -237428,7 +239447,7 @@
},
"kdcHostname": {
"type": "string",
- "description": "Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1\n"
+ "description": "Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1\n"
},
"kdcIp": {
"type": "string",
@@ -237551,7 +239570,7 @@
},
"kdcHostname": {
"type": "string",
- "description": "Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1\n"
+ "description": "Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1\n"
},
"kdcIp": {
"type": "string",
@@ -238794,7 +240813,7 @@
},
"serviceLevel": {
"type": "string",
- "description": "Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX.\n"
+ "description": "Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX.\n"
},
"shareName": {
"type": "string",
@@ -238825,7 +240844,7 @@
},
"storagePool": {
"type": "string",
- "description": "Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume.\n"
+ "description": "Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume.\n"
},
"tieringPolicy": {
"$ref": "#/types/gcp:netapp/VolumeTieringPolicy:VolumeTieringPolicy",
@@ -238977,7 +240996,7 @@
},
"storagePool": {
"type": "string",
- "description": "Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume.\n"
+ "description": "Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume.\n"
},
"tieringPolicy": {
"$ref": "#/types/gcp:netapp/VolumeTieringPolicy:VolumeTieringPolicy",
@@ -239143,7 +241162,7 @@
},
"serviceLevel": {
"type": "string",
- "description": "Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX.\n"
+ "description": "Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX.\n"
},
"shareName": {
"type": "string",
@@ -239175,7 +241194,7 @@
},
"storagePool": {
"type": "string",
- "description": "Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume.\n"
+ "description": "Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume.\n"
},
"tieringPolicy": {
"$ref": "#/types/gcp:netapp/VolumeTieringPolicy:VolumeTieringPolicy",
@@ -240989,7 +243008,7 @@
}
},
"gcp:networkconnectivity/spoke:Spoke": {
- "description": "The NetworkConnectivity Spoke resource\n\n\nTo get more information about Spoke, see:\n\n* [API documentation](https://cloud.google.com/network-connectivity/docs/reference/networkconnectivity/rest/v1beta/projects.locations.spokes)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/network-connectivity/docs/network-connectivity-center/concepts/overview)\n\n## Example Usage\n\n### Network Connectivity Spoke Linked Vpc Network Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net\",\n autoCreateSubnetworks: false,\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"spoke1\",\n location: \"global\",\n description: \"A sample spoke with a linked router appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpcNetwork: {\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n includeExportRanges: [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n uri: network.selfLink,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net\",\n auto_create_subnetworks=False)\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"spoke1\",\n location=\"global\",\n description=\"A sample spoke with a linked router appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpc_network={\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n \"include_export_ranges\": [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n \"uri\": network.self_link,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net\",\n AutoCreateSubnetworks = false,\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"spoke1\",\n Location = \"global\",\n Description = \"A sample spoke with a linked router appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n IncludeExportRanges = new[]\n {\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n },\n Uri = network.SelfLink,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"spoke1\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked router appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t\tIncludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/23\"),\n\t\t\t\t\tpulumi.String(\"10.0.0.0/8\"),\n\t\t\t\t},\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net\")\n .autoCreateSubnetworks(false)\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"spoke1\")\n .location(\"global\")\n .description(\"A sample spoke with a linked router appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .includeExportRanges( \n \"198.51.100.0/23\",\n \"10.0.0.0/8\")\n .uri(network.selfLink())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net\n autoCreateSubnetworks: false\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub1\n description: A sample hub\n labels:\n label-two: value-one\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: spoke1\n location: global\n description: A sample spoke with a linked router appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpcNetwork:\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n includeExportRanges:\n - 198.51.100.0/23\n - 10.0.0.0/8\n uri: ${network.selfLink}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Router Appliance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"tf-test-network_75413\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"tf-test-subnet_55138\",\n ipCidrRange: \"10.0.0.0/28\",\n region: \"us-central1\",\n network: network.selfLink,\n});\nconst instance = new gcp.compute.Instance(\"instance\", {\n name: \"tf-test-instance_37559\",\n machineType: \"e2-medium\",\n canIpForward: true,\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n networkInterfaces: [{\n subnetwork: subnetwork.name,\n networkIp: \"10.0.0.2\",\n accessConfigs: [{\n networkTier: \"PREMIUM\",\n }],\n }],\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"tf-test-hub_91980\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"tf-test-name_37118\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked routher appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedRouterApplianceInstances: {\n instances: [{\n virtualMachine: instance.selfLink,\n ipAddress: \"10.0.0.2\",\n }],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"tf-test-network_75413\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"tf-test-subnet_55138\",\n ip_cidr_range=\"10.0.0.0/28\",\n region=\"us-central1\",\n network=network.self_link)\ninstance = gcp.compute.Instance(\"instance\",\n name=\"tf-test-instance_37559\",\n machine_type=\"e2-medium\",\n can_ip_forward=True,\n zone=\"us-central1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n network_interfaces=[{\n \"subnetwork\": subnetwork.name,\n \"network_ip\": \"10.0.0.2\",\n \"access_configs\": [{\n \"network_tier\": \"PREMIUM\",\n }],\n }])\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"tf-test-hub_91980\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"tf-test-name_37118\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked routher appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_router_appliance_instances={\n \"instances\": [{\n \"virtual_machine\": instance.self_link,\n \"ip_address\": \"10.0.0.2\",\n }],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"tf-test-network_75413\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"tf-test-subnet_55138\",\n IpCidrRange = \"10.0.0.0/28\",\n Region = \"us-central1\",\n Network = network.SelfLink,\n });\n\n var instance = new Gcp.Compute.Instance(\"instance\", new()\n {\n Name = \"tf-test-instance_37559\",\n MachineType = \"e2-medium\",\n CanIpForward = true,\n Zone = \"us-central1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Subnetwork = subnetwork.Name,\n NetworkIp = \"10.0.0.2\",\n AccessConfigs = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceAccessConfigArgs\n {\n NetworkTier = \"PREMIUM\",\n },\n },\n },\n },\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"tf-test-hub_91980\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"tf-test-name_37118\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked routher appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedRouterApplianceInstances = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesArgs\n {\n Instances = new[]\n {\n new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesInstanceArgs\n {\n VirtualMachine = instance.SelfLink,\n IpAddress = \"10.0.0.2\",\n },\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-network_75413\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsubnetwork, err := compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-subnet_55138\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := compute.NewInstance(ctx, \"instance\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"tf-test-instance_37559\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tCanIpForward: pulumi.Bool(true),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"projects/debian-cloud/global/images/debian-10-buster-v20210817\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tSubnetwork: subnetwork.Name,\n\t\t\t\t\tNetworkIp: pulumi.String(\"10.0.0.2\"),\n\t\t\t\t\tAccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{\n\t\t\t\t\t\t\u0026compute.InstanceNetworkInterfaceAccessConfigArgs{\n\t\t\t\t\t\t\tNetworkTier: pulumi.String(\"PREMIUM\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"tf-test-hub_91980\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"tf-test-name_37118\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked routher appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedRouterApplianceInstances: \u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs{\n\t\t\t\tInstances: networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArray{\n\t\t\t\t\t\u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs{\n\t\t\t\t\t\tVirtualMachine: instance.SelfLink,\n\t\t\t\t\t\tIpAddress: pulumi.String(\"10.0.0.2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedRouterApplianceInstancesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"tf-test-network_75413\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder()\n .name(\"tf-test-subnet_55138\")\n .ipCidrRange(\"10.0.0.0/28\")\n .region(\"us-central1\")\n .network(network.selfLink())\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder()\n .name(\"tf-test-instance_37559\")\n .machineType(\"e2-medium\")\n .canIpForward(true)\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"projects/debian-cloud/global/images/debian-10-buster-v20210817\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .subnetwork(subnetwork.name())\n .networkIp(\"10.0.0.2\")\n .accessConfigs(InstanceNetworkInterfaceAccessConfigArgs.builder()\n .networkTier(\"PREMIUM\")\n .build())\n .build())\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"tf-test-hub_91980\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"tf-test-name_37118\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked routher appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedRouterApplianceInstances(SpokeLinkedRouterApplianceInstancesArgs.builder()\n .instances(SpokeLinkedRouterApplianceInstancesInstanceArgs.builder()\n .virtualMachine(instance.selfLink())\n .ipAddress(\"10.0.0.2\")\n .build())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: tf-test-network_75413\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: tf-test-subnet_55138\n ipCidrRange: 10.0.0.0/28\n region: us-central1\n network: ${network.selfLink}\n instance:\n type: gcp:compute:Instance\n properties:\n name: tf-test-instance_37559\n machineType: e2-medium\n canIpForward: true\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: projects/debian-cloud/global/images/debian-10-buster-v20210817\n networkInterfaces:\n - subnetwork: ${subnetwork.name}\n networkIp: 10.0.0.2\n accessConfigs:\n - networkTier: PREMIUM\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: tf-test-hub_91980\n description: A sample hub\n labels:\n label-two: value-one\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: tf-test-name_37118\n location: us-central1\n description: A sample spoke with a linked routher appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedRouterApplianceInstances:\n instances:\n - virtualMachine: ${instance.selfLink}\n ipAddress: 10.0.0.2\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Vpn Tunnel Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"basic-hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst network = new gcp.compute.Network(\"network\", {\n name: \"basic-network\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"basic-subnetwork\",\n ipCidrRange: \"10.0.0.0/28\",\n region: \"us-central1\",\n network: network.selfLink,\n});\nconst gateway = new gcp.compute.HaVpnGateway(\"gateway\", {\n name: \"vpn-gateway\",\n network: network.id,\n});\nconst externalVpnGw = new gcp.compute.ExternalVpnGateway(\"external_vpn_gw\", {\n name: \"external-vpn-gateway\",\n redundancyType: \"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description: \"An externally managed VPN gateway\",\n interfaces: [{\n id: 0,\n ipAddress: \"8.8.8.8\",\n }],\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"external-vpn-gateway\",\n region: \"us-central1\",\n network: network.name,\n bgp: {\n asn: 64514,\n },\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n name: \"tunnel1\",\n region: \"us-central1\",\n vpnGateway: gateway.id,\n peerExternalGateway: externalVpnGw.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: router.id,\n vpnGatewayInterface: 0,\n});\nconst tunnel2 = new gcp.compute.VPNTunnel(\"tunnel2\", {\n name: \"tunnel2\",\n region: \"us-central1\",\n vpnGateway: gateway.id,\n peerExternalGateway: externalVpnGw.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: pulumi.interpolate` ${router.id}`,\n vpnGatewayInterface: 1,\n});\nconst routerInterface1 = new gcp.compute.RouterInterface(\"router_interface1\", {\n name: \"router-interface1\",\n router: router.name,\n region: \"us-central1\",\n ipRange: \"169.254.0.1/30\",\n vpnTunnel: tunnel1.name,\n});\nconst routerPeer1 = new gcp.compute.RouterPeer(\"router_peer1\", {\n name: \"router-peer1\",\n router: router.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.0.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": routerInterface1.name,\n});\nconst routerInterface2 = new gcp.compute.RouterInterface(\"router_interface2\", {\n name: \"router-interface2\",\n router: router.name,\n region: \"us-central1\",\n ipRange: \"169.254.1.1/30\",\n vpnTunnel: tunnel2.name,\n});\nconst routerPeer2 = new gcp.compute.RouterPeer(\"router_peer2\", {\n name: \"router-peer2\",\n router: router.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": routerInterface2.name,\n});\nconst tunnel1Spoke = new gcp.networkconnectivity.Spoke(\"tunnel1\", {\n name: \"vpn-tunnel-1-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked VPN Tunnel\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpnTunnels: {\n uris: [tunnel1.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\nconst tunnel2Spoke = new gcp.networkconnectivity.Spoke(\"tunnel2\", {\n name: \"vpn-tunnel-2-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked VPN Tunnel\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpnTunnels: {\n uris: [tunnel2.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"basic-hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nnetwork = gcp.compute.Network(\"network\",\n name=\"basic-network\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"basic-subnetwork\",\n ip_cidr_range=\"10.0.0.0/28\",\n region=\"us-central1\",\n network=network.self_link)\ngateway = gcp.compute.HaVpnGateway(\"gateway\",\n name=\"vpn-gateway\",\n network=network.id)\nexternal_vpn_gw = gcp.compute.ExternalVpnGateway(\"external_vpn_gw\",\n name=\"external-vpn-gateway\",\n redundancy_type=\"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description=\"An externally managed VPN gateway\",\n interfaces=[{\n \"id\": 0,\n \"ip_address\": \"8.8.8.8\",\n }])\nrouter = gcp.compute.Router(\"router\",\n name=\"external-vpn-gateway\",\n region=\"us-central1\",\n network=network.name,\n bgp={\n \"asn\": 64514,\n })\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n name=\"tunnel1\",\n region=\"us-central1\",\n vpn_gateway=gateway.id,\n peer_external_gateway=external_vpn_gw.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router.id,\n vpn_gateway_interface=0)\ntunnel2 = gcp.compute.VPNTunnel(\"tunnel2\",\n name=\"tunnel2\",\n region=\"us-central1\",\n vpn_gateway=gateway.id,\n peer_external_gateway=external_vpn_gw.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router.id.apply(lambda id: f\" {id}\"),\n vpn_gateway_interface=1)\nrouter_interface1 = gcp.compute.RouterInterface(\"router_interface1\",\n name=\"router-interface1\",\n router=router.name,\n region=\"us-central1\",\n ip_range=\"169.254.0.1/30\",\n vpn_tunnel=tunnel1.name)\nrouter_peer1 = gcp.compute.RouterPeer(\"router_peer1\",\n name=\"router-peer1\",\n router=router.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.0.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router_interface1.name)\nrouter_interface2 = gcp.compute.RouterInterface(\"router_interface2\",\n name=\"router-interface2\",\n router=router.name,\n region=\"us-central1\",\n ip_range=\"169.254.1.1/30\",\n vpn_tunnel=tunnel2.name)\nrouter_peer2 = gcp.compute.RouterPeer(\"router_peer2\",\n name=\"router-peer2\",\n router=router.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router_interface2.name)\ntunnel1_spoke = gcp.networkconnectivity.Spoke(\"tunnel1\",\n name=\"vpn-tunnel-1-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked VPN Tunnel\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpn_tunnels={\n \"uris\": [tunnel1.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\ntunnel2_spoke = gcp.networkconnectivity.Spoke(\"tunnel2\",\n name=\"vpn-tunnel-2-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked VPN Tunnel\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpn_tunnels={\n \"uris\": [tunnel2.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"basic-hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-network\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"basic-subnetwork\",\n IpCidrRange = \"10.0.0.0/28\",\n Region = \"us-central1\",\n Network = network.SelfLink,\n });\n\n var gateway = new Gcp.Compute.HaVpnGateway(\"gateway\", new()\n {\n Name = \"vpn-gateway\",\n Network = network.Id,\n });\n\n var externalVpnGw = new Gcp.Compute.ExternalVpnGateway(\"external_vpn_gw\", new()\n {\n Name = \"external-vpn-gateway\",\n RedundancyType = \"SINGLE_IP_INTERNALLY_REDUNDANT\",\n Description = \"An externally managed VPN gateway\",\n Interfaces = new[]\n {\n new Gcp.Compute.Inputs.ExternalVpnGatewayInterfaceArgs\n {\n Id = 0,\n IpAddress = \"8.8.8.8\",\n },\n },\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"external-vpn-gateway\",\n Region = \"us-central1\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 64514,\n },\n });\n\n var tunnel1 = new Gcp.Compute.VPNTunnel(\"tunnel1\", new()\n {\n Name = \"tunnel1\",\n Region = \"us-central1\",\n VpnGateway = gateway.Id,\n PeerExternalGateway = externalVpnGw.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router.Id,\n VpnGatewayInterface = 0,\n });\n\n var tunnel2 = new Gcp.Compute.VPNTunnel(\"tunnel2\", new()\n {\n Name = \"tunnel2\",\n Region = \"us-central1\",\n VpnGateway = gateway.Id,\n PeerExternalGateway = externalVpnGw.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router.Id.Apply(id =\u003e $\" {id}\"),\n VpnGatewayInterface = 1,\n });\n\n var routerInterface1 = new Gcp.Compute.RouterInterface(\"router_interface1\", new()\n {\n Name = \"router-interface1\",\n Router = router.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.0.1/30\",\n VpnTunnel = tunnel1.Name,\n });\n\n var routerPeer1 = new Gcp.Compute.RouterPeer(\"router_peer1\", new()\n {\n Name = \"router-peer1\",\n Router = router.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.0.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = routerInterface1.Name,\n });\n\n var routerInterface2 = new Gcp.Compute.RouterInterface(\"router_interface2\", new()\n {\n Name = \"router-interface2\",\n Router = router.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.1.1/30\",\n VpnTunnel = tunnel2.Name,\n });\n\n var routerPeer2 = new Gcp.Compute.RouterPeer(\"router_peer2\", new()\n {\n Name = \"router-peer2\",\n Router = router.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = routerInterface2.Name,\n });\n\n var tunnel1Spoke = new Gcp.NetworkConnectivity.Spoke(\"tunnel1\", new()\n {\n Name = \"vpn-tunnel-1-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked VPN Tunnel\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs\n {\n Uris = new[]\n {\n tunnel1.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n var tunnel2Spoke = new Gcp.NetworkConnectivity.Spoke(\"tunnel2\", new()\n {\n Name = \"vpn-tunnel-2-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked VPN Tunnel\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs\n {\n Uris = new[]\n {\n tunnel2.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"basic-hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"basic-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgateway, err := compute.NewHaVpnGateway(ctx, \"gateway\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tName: pulumi.String(\"vpn-gateway\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texternalVpnGw, err := compute.NewExternalVpnGateway(ctx, \"external_vpn_gw\", \u0026compute.ExternalVpnGatewayArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRedundancyType: pulumi.String(\"SINGLE_IP_INTERNALLY_REDUNDANT\"),\n\t\t\tDescription: pulumi.String(\"An externally managed VPN gateway\"),\n\t\t\tInterfaces: compute.ExternalVpnGatewayInterfaceArray{\n\t\t\t\t\u0026compute.ExternalVpnGatewayInterfaceArgs{\n\t\t\t\t\tId: pulumi.Int(0),\n\t\t\t\t\tIpAddress: pulumi.String(\"8.8.8.8\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(64514),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel1, err := compute.NewVPNTunnel(ctx, \"tunnel1\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"tunnel1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: gateway.ID(),\n\t\t\tPeerExternalGateway: externalVpnGw.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router.ID(),\n\t\t\tVpnGatewayInterface: pulumi.Int(0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel2, err := compute.NewVPNTunnel(ctx, \"tunnel2\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"tunnel2\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: gateway.ID(),\n\t\t\tPeerExternalGateway: externalVpnGw.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\" %v\", id), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tVpnGatewayInterface: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouterInterface1, err := compute.NewRouterInterface(ctx, \"router_interface1\", \u0026compute.RouterInterfaceArgs{\n\t\t\tName: pulumi.String(\"router-interface1\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpRange: pulumi.String(\"169.254.0.1/30\"),\n\t\t\tVpnTunnel: tunnel1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRouterPeer(ctx, \"router_peer1\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"router-peer1\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.0.2\"),\n\t\t\tPeerAsn: pulumi.Int(64515),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: routerInterface1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouterInterface2, err := compute.NewRouterInterface(ctx, \"router_interface2\", \u0026compute.RouterInterfaceArgs{\n\t\t\tName: pulumi.String(\"router-interface2\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpRange: pulumi.String(\"169.254.1.1/30\"),\n\t\t\tVpnTunnel: tunnel2.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRouterPeer(ctx, \"router_peer2\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"router-peer2\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.1.2\"),\n\t\t\tPeerAsn: pulumi.Int(64515),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: routerInterface2.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"tunnel1\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpn-tunnel-1-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPN Tunnel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpnTunnels: \u0026networkconnectivity.SpokeLinkedVpnTunnelsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\ttunnel1.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"tunnel2\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpn-tunnel-2-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPN Tunnel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpnTunnels: \u0026networkconnectivity.SpokeLinkedVpnTunnelsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\ttunnel2.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HaVpnGateway;\nimport com.pulumi.gcp.compute.HaVpnGatewayArgs;\nimport com.pulumi.gcp.compute.ExternalVpnGateway;\nimport com.pulumi.gcp.compute.ExternalVpnGatewayArgs;\nimport com.pulumi.gcp.compute.inputs.ExternalVpnGatewayInterfaceArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.compute.RouterInterface;\nimport com.pulumi.gcp.compute.RouterInterfaceArgs;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpnTunnelsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"basic-hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder()\n .name(\"basic-subnetwork\")\n .ipCidrRange(\"10.0.0.0/28\")\n .region(\"us-central1\")\n .network(network.selfLink())\n .build());\n\n var gateway = new HaVpnGateway(\"gateway\", HaVpnGatewayArgs.builder()\n .name(\"vpn-gateway\")\n .network(network.id())\n .build());\n\n var externalVpnGw = new ExternalVpnGateway(\"externalVpnGw\", ExternalVpnGatewayArgs.builder()\n .name(\"external-vpn-gateway\")\n .redundancyType(\"SINGLE_IP_INTERNALLY_REDUNDANT\")\n .description(\"An externally managed VPN gateway\")\n .interfaces(ExternalVpnGatewayInterfaceArgs.builder()\n .id(0)\n .ipAddress(\"8.8.8.8\")\n .build())\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"external-vpn-gateway\")\n .region(\"us-central1\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(64514)\n .build())\n .build());\n\n var tunnel1 = new VPNTunnel(\"tunnel1\", VPNTunnelArgs.builder()\n .name(\"tunnel1\")\n .region(\"us-central1\")\n .vpnGateway(gateway.id())\n .peerExternalGateway(externalVpnGw.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router.id())\n .vpnGatewayInterface(0)\n .build());\n\n var tunnel2 = new VPNTunnel(\"tunnel2\", VPNTunnelArgs.builder()\n .name(\"tunnel2\")\n .region(\"us-central1\")\n .vpnGateway(gateway.id())\n .peerExternalGateway(externalVpnGw.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router.id().applyValue(id -\u003e String.format(\" %s\", id)))\n .vpnGatewayInterface(1)\n .build());\n\n var routerInterface1 = new RouterInterface(\"routerInterface1\", RouterInterfaceArgs.builder()\n .name(\"router-interface1\")\n .router(router.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.0.1/30\")\n .vpnTunnel(tunnel1.name())\n .build());\n\n var routerPeer1 = new RouterPeer(\"routerPeer1\", RouterPeerArgs.builder()\n .name(\"router-peer1\")\n .router(router.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.0.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(routerInterface1.name())\n .build());\n\n var routerInterface2 = new RouterInterface(\"routerInterface2\", RouterInterfaceArgs.builder()\n .name(\"router-interface2\")\n .router(router.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.1.1/30\")\n .vpnTunnel(tunnel2.name())\n .build());\n\n var routerPeer2 = new RouterPeer(\"routerPeer2\", RouterPeerArgs.builder()\n .name(\"router-peer2\")\n .router(router.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(routerInterface2.name())\n .build());\n\n var tunnel1Spoke = new Spoke(\"tunnel1Spoke\", SpokeArgs.builder()\n .name(\"vpn-tunnel-1-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked VPN Tunnel\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()\n .uris(tunnel1.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n var tunnel2Spoke = new Spoke(\"tunnel2Spoke\", SpokeArgs.builder()\n .name(\"vpn-tunnel-2-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked VPN Tunnel\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()\n .uris(tunnel2.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: basic-hub1\n description: A sample hub\n labels:\n label-two: value-one\n network:\n type: gcp:compute:Network\n properties:\n name: basic-network\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: basic-subnetwork\n ipCidrRange: 10.0.0.0/28\n region: us-central1\n network: ${network.selfLink}\n gateway:\n type: gcp:compute:HaVpnGateway\n properties:\n name: vpn-gateway\n network: ${network.id}\n externalVpnGw:\n type: gcp:compute:ExternalVpnGateway\n name: external_vpn_gw\n properties:\n name: external-vpn-gateway\n redundancyType: SINGLE_IP_INTERNALLY_REDUNDANT\n description: An externally managed VPN gateway\n interfaces:\n - id: 0\n ipAddress: 8.8.8.8\n router:\n type: gcp:compute:Router\n properties:\n name: external-vpn-gateway\n region: us-central1\n network: ${network.name}\n bgp:\n asn: 64514\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n name: tunnel1\n region: us-central1\n vpnGateway: ${gateway.id}\n peerExternalGateway: ${externalVpnGw.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ${router.id}\n vpnGatewayInterface: 0\n tunnel2:\n type: gcp:compute:VPNTunnel\n properties:\n name: tunnel2\n region: us-central1\n vpnGateway: ${gateway.id}\n peerExternalGateway: ${externalVpnGw.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ' ${router.id}'\n vpnGatewayInterface: 1\n routerInterface1:\n type: gcp:compute:RouterInterface\n name: router_interface1\n properties:\n name: router-interface1\n router: ${router.name}\n region: us-central1\n ipRange: 169.254.0.1/30\n vpnTunnel: ${tunnel1.name}\n routerPeer1:\n type: gcp:compute:RouterPeer\n name: router_peer1\n properties:\n name: router-peer1\n router: ${router.name}\n region: us-central1\n peerIpAddress: 169.254.0.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${routerInterface1.name}\n routerInterface2:\n type: gcp:compute:RouterInterface\n name: router_interface2\n properties:\n name: router-interface2\n router: ${router.name}\n region: us-central1\n ipRange: 169.254.1.1/30\n vpnTunnel: ${tunnel2.name}\n routerPeer2:\n type: gcp:compute:RouterPeer\n name: router_peer2\n properties:\n name: router-peer2\n router: ${router.name}\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${routerInterface2.name}\n tunnel1Spoke:\n type: gcp:networkconnectivity:Spoke\n name: tunnel1\n properties:\n name: vpn-tunnel-1-spoke\n location: us-central1\n description: A sample spoke with a linked VPN Tunnel\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpnTunnels:\n uris:\n - ${tunnel1.selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n tunnel2Spoke:\n type: gcp:networkconnectivity:Spoke\n name: tunnel2\n properties:\n name: vpn-tunnel-2-spoke\n location: us-central1\n description: A sample spoke with a linked VPN Tunnel\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpnTunnels:\n uris:\n - ${tunnel2.selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Interconnect Attachment Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"basic-hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst network = new gcp.compute.Network(\"network\", {\n name: \"basic-network\",\n autoCreateSubnetworks: false,\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"external-vpn-gateway\",\n region: \"us-central1\",\n network: network.name,\n bgp: {\n asn: 16550,\n },\n});\nconst interconnect_attachment = new gcp.compute.InterconnectAttachment(\"interconnect-attachment\", {\n name: \"partner-interconnect1\",\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_1\",\n type: \"PARTNER\",\n router: router.id,\n mtu: \"1500\",\n region: \"us-central1\",\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"interconnect-attachment-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked Interconnect Attachment\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedInterconnectAttachments: {\n uris: [interconnect_attachment.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"basic-hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nnetwork = gcp.compute.Network(\"network\",\n name=\"basic-network\",\n auto_create_subnetworks=False)\nrouter = gcp.compute.Router(\"router\",\n name=\"external-vpn-gateway\",\n region=\"us-central1\",\n network=network.name,\n bgp={\n \"asn\": 16550,\n })\ninterconnect_attachment = gcp.compute.InterconnectAttachment(\"interconnect-attachment\",\n name=\"partner-interconnect1\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_1\",\n type=\"PARTNER\",\n router=router.id,\n mtu=\"1500\",\n region=\"us-central1\")\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"interconnect-attachment-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked Interconnect Attachment\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_interconnect_attachments={\n \"uris\": [interconnect_attachment.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"basic-hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-network\",\n AutoCreateSubnetworks = false,\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"external-vpn-gateway\",\n Region = \"us-central1\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 16550,\n },\n });\n\n var interconnect_attachment = new Gcp.Compute.InterconnectAttachment(\"interconnect-attachment\", new()\n {\n Name = \"partner-interconnect1\",\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_1\",\n Type = \"PARTNER\",\n Router = router.Id,\n Mtu = \"1500\",\n Region = \"us-central1\",\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"interconnect-attachment-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked Interconnect Attachment\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedInterconnectAttachments = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedInterconnectAttachmentsArgs\n {\n Uris = new[]\n {\n interconnect_attachment.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"basic-hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(16550),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInterconnectAttachment(ctx, \"interconnect-attachment\", \u0026compute.InterconnectAttachmentArgs{\n\t\t\tName: pulumi.String(\"partner-interconnect1\"),\n\t\t\tEdgeAvailabilityDomain: pulumi.String(\"AVAILABILITY_DOMAIN_1\"),\n\t\t\tType: pulumi.String(\"PARTNER\"),\n\t\t\tRouter: router.ID(),\n\t\t\tMtu: pulumi.String(\"1500\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"interconnect-attachment-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked Interconnect Attachment\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedInterconnectAttachments: \u0026networkconnectivity.SpokeLinkedInterconnectAttachmentsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\tinterconnect_attachment.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.InterconnectAttachment;\nimport com.pulumi.gcp.compute.InterconnectAttachmentArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedInterconnectAttachmentsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"basic-hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"external-vpn-gateway\")\n .region(\"us-central1\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(16550)\n .build())\n .build());\n\n var interconnect_attachment = new InterconnectAttachment(\"interconnect-attachment\", InterconnectAttachmentArgs.builder()\n .name(\"partner-interconnect1\")\n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_1\")\n .type(\"PARTNER\")\n .router(router.id())\n .mtu(1500)\n .region(\"us-central1\")\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"interconnect-attachment-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked Interconnect Attachment\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedInterconnectAttachments(SpokeLinkedInterconnectAttachmentsArgs.builder()\n .uris(interconnect_attachment.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: basic-hub1\n description: A sample hub\n labels:\n label-two: value-one\n network:\n type: gcp:compute:Network\n properties:\n name: basic-network\n autoCreateSubnetworks: false\n router:\n type: gcp:compute:Router\n properties:\n name: external-vpn-gateway\n region: us-central1\n network: ${network.name}\n bgp:\n asn: 16550\n interconnect-attachment:\n type: gcp:compute:InterconnectAttachment\n properties:\n name: partner-interconnect1\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_1\n type: PARTNER\n router: ${router.id}\n mtu: 1500\n region: us-central1\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: interconnect-attachment-spoke\n location: us-central1\n description: A sample spoke with a linked Interconnect Attachment\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedInterconnectAttachments:\n uris:\n - ${[\"interconnect-attachment\"].selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Linked Producer Vpc Network Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net-spoke\",\n autoCreateSubnetworks: false,\n});\nconst address = new gcp.compute.GlobalAddress(\"address\", {\n name: \"test-address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: network.id,\n});\nconst peering = new gcp.servicenetworking.Connection(\"peering\", {\n network: network.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [address.name],\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {name: \"hub-basic\"});\nconst linkedVpcSpoke = new gcp.networkconnectivity.Spoke(\"linked_vpc_spoke\", {\n name: \"vpc-spoke\",\n location: \"global\",\n hub: basicHub.id,\n linkedVpcNetwork: {\n uri: network.selfLink,\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"producer-spoke\",\n location: \"global\",\n description: \"A sample spoke with a linked router appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedProducerVpcNetwork: {\n network: network.name,\n peering: peering.peering,\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n },\n}, {\n dependsOn: [linkedVpcSpoke],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net-spoke\",\n auto_create_subnetworks=False)\naddress = gcp.compute.GlobalAddress(\"address\",\n name=\"test-address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=network.id)\npeering = gcp.servicenetworking.Connection(\"peering\",\n network=network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[address.name])\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\", name=\"hub-basic\")\nlinked_vpc_spoke = gcp.networkconnectivity.Spoke(\"linked_vpc_spoke\",\n name=\"vpc-spoke\",\n location=\"global\",\n hub=basic_hub.id,\n linked_vpc_network={\n \"uri\": network.self_link,\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"producer-spoke\",\n location=\"global\",\n description=\"A sample spoke with a linked router appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_producer_vpc_network={\n \"network\": network.name,\n \"peering\": peering.peering,\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n },\n opts = pulumi.ResourceOptions(depends_on=[linked_vpc_spoke]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net-spoke\",\n AutoCreateSubnetworks = false,\n });\n\n var address = new Gcp.Compute.GlobalAddress(\"address\", new()\n {\n Name = \"test-address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = network.Id,\n });\n\n var peering = new Gcp.ServiceNetworking.Connection(\"peering\", new()\n {\n Network = network.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n address.Name,\n },\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub-basic\",\n });\n\n var linkedVpcSpoke = new Gcp.NetworkConnectivity.Spoke(\"linked_vpc_spoke\", new()\n {\n Name = \"vpc-spoke\",\n Location = \"global\",\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n Uri = network.SelfLink,\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"producer-spoke\",\n Location = \"global\",\n Description = \"A sample spoke with a linked router appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedProducerVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedProducerVpcNetworkArgs\n {\n Network = network.Name,\n Peering = peering.Peering,\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n linkedVpcSpoke,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net-spoke\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddress, err := compute.NewGlobalAddress(ctx, \"address\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"test-address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpeering, err := servicenetworking.NewConnection(ctx, \"peering\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: network.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\taddress.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub-basic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlinkedVpcSpoke, err := networkconnectivity.NewSpoke(ctx, \"linked_vpc_spoke\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpc-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"producer-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked router appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedProducerVpcNetwork: \u0026networkconnectivity.SpokeLinkedProducerVpcNetworkArgs{\n\t\t\t\tNetwork: network.Name,\n\t\t\t\tPeering: peering.Peering,\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tlinkedVpcSpoke,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedProducerVpcNetworkArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net-spoke\")\n .autoCreateSubnetworks(false)\n .build());\n\n var address = new GlobalAddress(\"address\", GlobalAddressArgs.builder()\n .name(\"test-address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(network.id())\n .build());\n\n var peering = new Connection(\"peering\", ConnectionArgs.builder()\n .network(network.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(address.name())\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub-basic\")\n .build());\n\n var linkedVpcSpoke = new Spoke(\"linkedVpcSpoke\", SpokeArgs.builder()\n .name(\"vpc-spoke\")\n .location(\"global\")\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .uri(network.selfLink())\n .build())\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"producer-spoke\")\n .location(\"global\")\n .description(\"A sample spoke with a linked router appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedProducerVpcNetwork(SpokeLinkedProducerVpcNetworkArgs.builder()\n .network(network.name())\n .peering(peering.peering())\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(linkedVpcSpoke)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net-spoke\n autoCreateSubnetworks: false\n address:\n type: gcp:compute:GlobalAddress\n properties:\n name: test-address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${network.id}\n peering:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${network.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${address.name}\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub-basic\n linkedVpcSpoke:\n type: gcp:networkconnectivity:Spoke\n name: linked_vpc_spoke\n properties:\n name: vpc-spoke\n location: global\n hub: ${basicHub.id}\n linkedVpcNetwork:\n uri: ${network.selfLink}\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: producer-spoke\n location: global\n description: A sample spoke with a linked router appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedProducerVpcNetwork:\n network: ${network.name}\n peering: ${peering.peering}\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n options:\n dependsOn:\n - ${linkedVpcSpoke}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSpoke can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/spokes/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Spoke can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default projects/{{project}}/locations/{{location}}/spokes/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{location}}/{{name}}\n```\n\n",
+ "description": "The NetworkConnectivity Spoke resource\n\n\nTo get more information about Spoke, see:\n\n* [API documentation](https://cloud.google.com/network-connectivity/docs/reference/networkconnectivity/rest/v1beta/projects.locations.spokes)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/network-connectivity/docs/network-connectivity-center/concepts/overview)\n\n## Example Usage\n\n### Network Connectivity Spoke Linked Vpc Network Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net\",\n autoCreateSubnetworks: false,\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"spoke1\",\n location: \"global\",\n description: \"A sample spoke with a linked router appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpcNetwork: {\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n includeExportRanges: [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n uri: network.selfLink,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net\",\n auto_create_subnetworks=False)\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"spoke1\",\n location=\"global\",\n description=\"A sample spoke with a linked router appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpc_network={\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n \"include_export_ranges\": [\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n ],\n \"uri\": network.self_link,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net\",\n AutoCreateSubnetworks = false,\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"spoke1\",\n Location = \"global\",\n Description = \"A sample spoke with a linked router appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n IncludeExportRanges = new[]\n {\n \"198.51.100.0/23\",\n \"10.0.0.0/8\",\n },\n Uri = network.SelfLink,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"spoke1\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked router appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t\tIncludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/23\"),\n\t\t\t\t\tpulumi.String(\"10.0.0.0/8\"),\n\t\t\t\t},\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net\")\n .autoCreateSubnetworks(false)\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"spoke1\")\n .location(\"global\")\n .description(\"A sample spoke with a linked router appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .includeExportRanges( \n \"198.51.100.0/23\",\n \"10.0.0.0/8\")\n .uri(network.selfLink())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net\n autoCreateSubnetworks: false\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub1\n description: A sample hub\n labels:\n label-two: value-one\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: spoke1\n location: global\n description: A sample spoke with a linked router appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpcNetwork:\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n includeExportRanges:\n - 198.51.100.0/23\n - 10.0.0.0/8\n uri: ${network.selfLink}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Router Appliance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"tf-test-network_55138\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"tf-test-subnet_37559\",\n ipCidrRange: \"10.0.0.0/28\",\n region: \"us-central1\",\n network: network.selfLink,\n});\nconst instance = new gcp.compute.Instance(\"instance\", {\n name: \"tf-test-instance_91980\",\n machineType: \"e2-medium\",\n canIpForward: true,\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n networkInterfaces: [{\n subnetwork: subnetwork.name,\n networkIp: \"10.0.0.2\",\n accessConfigs: [{\n networkTier: \"PREMIUM\",\n }],\n }],\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"tf-test-hub_37118\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"tf-test-name_80332\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked routher appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedRouterApplianceInstances: {\n instances: [{\n virtualMachine: instance.selfLink,\n ipAddress: \"10.0.0.2\",\n }],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"tf-test-network_55138\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"tf-test-subnet_37559\",\n ip_cidr_range=\"10.0.0.0/28\",\n region=\"us-central1\",\n network=network.self_link)\ninstance = gcp.compute.Instance(\"instance\",\n name=\"tf-test-instance_91980\",\n machine_type=\"e2-medium\",\n can_ip_forward=True,\n zone=\"us-central1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n network_interfaces=[{\n \"subnetwork\": subnetwork.name,\n \"network_ip\": \"10.0.0.2\",\n \"access_configs\": [{\n \"network_tier\": \"PREMIUM\",\n }],\n }])\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"tf-test-hub_37118\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"tf-test-name_80332\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked routher appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_router_appliance_instances={\n \"instances\": [{\n \"virtual_machine\": instance.self_link,\n \"ip_address\": \"10.0.0.2\",\n }],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"tf-test-network_55138\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"tf-test-subnet_37559\",\n IpCidrRange = \"10.0.0.0/28\",\n Region = \"us-central1\",\n Network = network.SelfLink,\n });\n\n var instance = new Gcp.Compute.Instance(\"instance\", new()\n {\n Name = \"tf-test-instance_91980\",\n MachineType = \"e2-medium\",\n CanIpForward = true,\n Zone = \"us-central1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"projects/debian-cloud/global/images/debian-10-buster-v20210817\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Subnetwork = subnetwork.Name,\n NetworkIp = \"10.0.0.2\",\n AccessConfigs = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceAccessConfigArgs\n {\n NetworkTier = \"PREMIUM\",\n },\n },\n },\n },\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"tf-test-hub_37118\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"tf-test-name_80332\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked routher appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedRouterApplianceInstances = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesArgs\n {\n Instances = new[]\n {\n new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesInstanceArgs\n {\n VirtualMachine = instance.SelfLink,\n IpAddress = \"10.0.0.2\",\n },\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-network_55138\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsubnetwork, err := compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"tf-test-subnet_37559\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := compute.NewInstance(ctx, \"instance\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"tf-test-instance_91980\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tCanIpForward: pulumi.Bool(true),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"projects/debian-cloud/global/images/debian-10-buster-v20210817\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tSubnetwork: subnetwork.Name,\n\t\t\t\t\tNetworkIp: pulumi.String(\"10.0.0.2\"),\n\t\t\t\t\tAccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{\n\t\t\t\t\t\t\u0026compute.InstanceNetworkInterfaceAccessConfigArgs{\n\t\t\t\t\t\t\tNetworkTier: pulumi.String(\"PREMIUM\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"tf-test-hub_37118\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"tf-test-name_80332\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked routher appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedRouterApplianceInstances: \u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs{\n\t\t\t\tInstances: networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArray{\n\t\t\t\t\t\u0026networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs{\n\t\t\t\t\t\tVirtualMachine: instance.SelfLink,\n\t\t\t\t\t\tIpAddress: pulumi.String(\"10.0.0.2\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedRouterApplianceInstancesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"tf-test-network_55138\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder()\n .name(\"tf-test-subnet_37559\")\n .ipCidrRange(\"10.0.0.0/28\")\n .region(\"us-central1\")\n .network(network.selfLink())\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder()\n .name(\"tf-test-instance_91980\")\n .machineType(\"e2-medium\")\n .canIpForward(true)\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"projects/debian-cloud/global/images/debian-10-buster-v20210817\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .subnetwork(subnetwork.name())\n .networkIp(\"10.0.0.2\")\n .accessConfigs(InstanceNetworkInterfaceAccessConfigArgs.builder()\n .networkTier(\"PREMIUM\")\n .build())\n .build())\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"tf-test-hub_37118\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"tf-test-name_80332\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked routher appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedRouterApplianceInstances(SpokeLinkedRouterApplianceInstancesArgs.builder()\n .instances(SpokeLinkedRouterApplianceInstancesInstanceArgs.builder()\n .virtualMachine(instance.selfLink())\n .ipAddress(\"10.0.0.2\")\n .build())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: tf-test-network_55138\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: tf-test-subnet_37559\n ipCidrRange: 10.0.0.0/28\n region: us-central1\n network: ${network.selfLink}\n instance:\n type: gcp:compute:Instance\n properties:\n name: tf-test-instance_91980\n machineType: e2-medium\n canIpForward: true\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: projects/debian-cloud/global/images/debian-10-buster-v20210817\n networkInterfaces:\n - subnetwork: ${subnetwork.name}\n networkIp: 10.0.0.2\n accessConfigs:\n - networkTier: PREMIUM\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: tf-test-hub_37118\n description: A sample hub\n labels:\n label-two: value-one\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: tf-test-name_80332\n location: us-central1\n description: A sample spoke with a linked routher appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedRouterApplianceInstances:\n instances:\n - virtualMachine: ${instance.selfLink}\n ipAddress: 10.0.0.2\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Vpn Tunnel Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"basic-hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst network = new gcp.compute.Network(\"network\", {\n name: \"basic-network\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"basic-subnetwork\",\n ipCidrRange: \"10.0.0.0/28\",\n region: \"us-central1\",\n network: network.selfLink,\n});\nconst gateway = new gcp.compute.HaVpnGateway(\"gateway\", {\n name: \"vpn-gateway\",\n network: network.id,\n});\nconst externalVpnGw = new gcp.compute.ExternalVpnGateway(\"external_vpn_gw\", {\n name: \"external-vpn-gateway\",\n redundancyType: \"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description: \"An externally managed VPN gateway\",\n interfaces: [{\n id: 0,\n ipAddress: \"8.8.8.8\",\n }],\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"external-vpn-gateway\",\n region: \"us-central1\",\n network: network.name,\n bgp: {\n asn: 64514,\n },\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n name: \"tunnel1\",\n region: \"us-central1\",\n vpnGateway: gateway.id,\n peerExternalGateway: externalVpnGw.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: router.id,\n vpnGatewayInterface: 0,\n});\nconst tunnel2 = new gcp.compute.VPNTunnel(\"tunnel2\", {\n name: \"tunnel2\",\n region: \"us-central1\",\n vpnGateway: gateway.id,\n peerExternalGateway: externalVpnGw.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: pulumi.interpolate` ${router.id}`,\n vpnGatewayInterface: 1,\n});\nconst routerInterface1 = new gcp.compute.RouterInterface(\"router_interface1\", {\n name: \"router-interface1\",\n router: router.name,\n region: \"us-central1\",\n ipRange: \"169.254.0.1/30\",\n vpnTunnel: tunnel1.name,\n});\nconst routerPeer1 = new gcp.compute.RouterPeer(\"router_peer1\", {\n name: \"router-peer1\",\n router: router.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.0.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": routerInterface1.name,\n});\nconst routerInterface2 = new gcp.compute.RouterInterface(\"router_interface2\", {\n name: \"router-interface2\",\n router: router.name,\n region: \"us-central1\",\n ipRange: \"169.254.1.1/30\",\n vpnTunnel: tunnel2.name,\n});\nconst routerPeer2 = new gcp.compute.RouterPeer(\"router_peer2\", {\n name: \"router-peer2\",\n router: router.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": routerInterface2.name,\n});\nconst tunnel1Spoke = new gcp.networkconnectivity.Spoke(\"tunnel1\", {\n name: \"vpn-tunnel-1-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked VPN Tunnel\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpnTunnels: {\n uris: [tunnel1.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\nconst tunnel2Spoke = new gcp.networkconnectivity.Spoke(\"tunnel2\", {\n name: \"vpn-tunnel-2-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked VPN Tunnel\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedVpnTunnels: {\n uris: [tunnel2.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"basic-hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nnetwork = gcp.compute.Network(\"network\",\n name=\"basic-network\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"basic-subnetwork\",\n ip_cidr_range=\"10.0.0.0/28\",\n region=\"us-central1\",\n network=network.self_link)\ngateway = gcp.compute.HaVpnGateway(\"gateway\",\n name=\"vpn-gateway\",\n network=network.id)\nexternal_vpn_gw = gcp.compute.ExternalVpnGateway(\"external_vpn_gw\",\n name=\"external-vpn-gateway\",\n redundancy_type=\"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description=\"An externally managed VPN gateway\",\n interfaces=[{\n \"id\": 0,\n \"ip_address\": \"8.8.8.8\",\n }])\nrouter = gcp.compute.Router(\"router\",\n name=\"external-vpn-gateway\",\n region=\"us-central1\",\n network=network.name,\n bgp={\n \"asn\": 64514,\n })\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n name=\"tunnel1\",\n region=\"us-central1\",\n vpn_gateway=gateway.id,\n peer_external_gateway=external_vpn_gw.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router.id,\n vpn_gateway_interface=0)\ntunnel2 = gcp.compute.VPNTunnel(\"tunnel2\",\n name=\"tunnel2\",\n region=\"us-central1\",\n vpn_gateway=gateway.id,\n peer_external_gateway=external_vpn_gw.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router.id.apply(lambda id: f\" {id}\"),\n vpn_gateway_interface=1)\nrouter_interface1 = gcp.compute.RouterInterface(\"router_interface1\",\n name=\"router-interface1\",\n router=router.name,\n region=\"us-central1\",\n ip_range=\"169.254.0.1/30\",\n vpn_tunnel=tunnel1.name)\nrouter_peer1 = gcp.compute.RouterPeer(\"router_peer1\",\n name=\"router-peer1\",\n router=router.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.0.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router_interface1.name)\nrouter_interface2 = gcp.compute.RouterInterface(\"router_interface2\",\n name=\"router-interface2\",\n router=router.name,\n region=\"us-central1\",\n ip_range=\"169.254.1.1/30\",\n vpn_tunnel=tunnel2.name)\nrouter_peer2 = gcp.compute.RouterPeer(\"router_peer2\",\n name=\"router-peer2\",\n router=router.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router_interface2.name)\ntunnel1_spoke = gcp.networkconnectivity.Spoke(\"tunnel1\",\n name=\"vpn-tunnel-1-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked VPN Tunnel\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpn_tunnels={\n \"uris\": [tunnel1.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\ntunnel2_spoke = gcp.networkconnectivity.Spoke(\"tunnel2\",\n name=\"vpn-tunnel-2-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked VPN Tunnel\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_vpn_tunnels={\n \"uris\": [tunnel2.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"basic-hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-network\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"basic-subnetwork\",\n IpCidrRange = \"10.0.0.0/28\",\n Region = \"us-central1\",\n Network = network.SelfLink,\n });\n\n var gateway = new Gcp.Compute.HaVpnGateway(\"gateway\", new()\n {\n Name = \"vpn-gateway\",\n Network = network.Id,\n });\n\n var externalVpnGw = new Gcp.Compute.ExternalVpnGateway(\"external_vpn_gw\", new()\n {\n Name = \"external-vpn-gateway\",\n RedundancyType = \"SINGLE_IP_INTERNALLY_REDUNDANT\",\n Description = \"An externally managed VPN gateway\",\n Interfaces = new[]\n {\n new Gcp.Compute.Inputs.ExternalVpnGatewayInterfaceArgs\n {\n Id = 0,\n IpAddress = \"8.8.8.8\",\n },\n },\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"external-vpn-gateway\",\n Region = \"us-central1\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 64514,\n },\n });\n\n var tunnel1 = new Gcp.Compute.VPNTunnel(\"tunnel1\", new()\n {\n Name = \"tunnel1\",\n Region = \"us-central1\",\n VpnGateway = gateway.Id,\n PeerExternalGateway = externalVpnGw.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router.Id,\n VpnGatewayInterface = 0,\n });\n\n var tunnel2 = new Gcp.Compute.VPNTunnel(\"tunnel2\", new()\n {\n Name = \"tunnel2\",\n Region = \"us-central1\",\n VpnGateway = gateway.Id,\n PeerExternalGateway = externalVpnGw.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router.Id.Apply(id =\u003e $\" {id}\"),\n VpnGatewayInterface = 1,\n });\n\n var routerInterface1 = new Gcp.Compute.RouterInterface(\"router_interface1\", new()\n {\n Name = \"router-interface1\",\n Router = router.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.0.1/30\",\n VpnTunnel = tunnel1.Name,\n });\n\n var routerPeer1 = new Gcp.Compute.RouterPeer(\"router_peer1\", new()\n {\n Name = \"router-peer1\",\n Router = router.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.0.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = routerInterface1.Name,\n });\n\n var routerInterface2 = new Gcp.Compute.RouterInterface(\"router_interface2\", new()\n {\n Name = \"router-interface2\",\n Router = router.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.1.1/30\",\n VpnTunnel = tunnel2.Name,\n });\n\n var routerPeer2 = new Gcp.Compute.RouterPeer(\"router_peer2\", new()\n {\n Name = \"router-peer2\",\n Router = router.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = routerInterface2.Name,\n });\n\n var tunnel1Spoke = new Gcp.NetworkConnectivity.Spoke(\"tunnel1\", new()\n {\n Name = \"vpn-tunnel-1-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked VPN Tunnel\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs\n {\n Uris = new[]\n {\n tunnel1.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n var tunnel2Spoke = new Gcp.NetworkConnectivity.Spoke(\"tunnel2\", new()\n {\n Name = \"vpn-tunnel-2-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked VPN Tunnel\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs\n {\n Uris = new[]\n {\n tunnel2.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"basic-hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"basic-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgateway, err := compute.NewHaVpnGateway(ctx, \"gateway\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tName: pulumi.String(\"vpn-gateway\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texternalVpnGw, err := compute.NewExternalVpnGateway(ctx, \"external_vpn_gw\", \u0026compute.ExternalVpnGatewayArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRedundancyType: pulumi.String(\"SINGLE_IP_INTERNALLY_REDUNDANT\"),\n\t\t\tDescription: pulumi.String(\"An externally managed VPN gateway\"),\n\t\t\tInterfaces: compute.ExternalVpnGatewayInterfaceArray{\n\t\t\t\t\u0026compute.ExternalVpnGatewayInterfaceArgs{\n\t\t\t\t\tId: pulumi.Int(0),\n\t\t\t\t\tIpAddress: pulumi.String(\"8.8.8.8\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(64514),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel1, err := compute.NewVPNTunnel(ctx, \"tunnel1\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"tunnel1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: gateway.ID(),\n\t\t\tPeerExternalGateway: externalVpnGw.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router.ID(),\n\t\t\tVpnGatewayInterface: pulumi.Int(0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel2, err := compute.NewVPNTunnel(ctx, \"tunnel2\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"tunnel2\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: gateway.ID(),\n\t\t\tPeerExternalGateway: externalVpnGw.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\" %v\", id), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tVpnGatewayInterface: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouterInterface1, err := compute.NewRouterInterface(ctx, \"router_interface1\", \u0026compute.RouterInterfaceArgs{\n\t\t\tName: pulumi.String(\"router-interface1\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpRange: pulumi.String(\"169.254.0.1/30\"),\n\t\t\tVpnTunnel: tunnel1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRouterPeer(ctx, \"router_peer1\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"router-peer1\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.0.2\"),\n\t\t\tPeerAsn: pulumi.Int(64515),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: routerInterface1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouterInterface2, err := compute.NewRouterInterface(ctx, \"router_interface2\", \u0026compute.RouterInterfaceArgs{\n\t\t\tName: pulumi.String(\"router-interface2\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpRange: pulumi.String(\"169.254.1.1/30\"),\n\t\t\tVpnTunnel: tunnel2.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRouterPeer(ctx, \"router_peer2\", \u0026compute.RouterPeerArgs{\n\t\t\tName: pulumi.String(\"router-peer2\"),\n\t\t\tRouter: router.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPeerIpAddress: pulumi.String(\"169.254.1.2\"),\n\t\t\tPeerAsn: pulumi.Int(64515),\n\t\t\tAdvertisedRoutePriority: pulumi.Int(100),\n\t\t\tInterface: routerInterface2.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"tunnel1\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpn-tunnel-1-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPN Tunnel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpnTunnels: \u0026networkconnectivity.SpokeLinkedVpnTunnelsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\ttunnel1.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"tunnel2\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpn-tunnel-2-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked VPN Tunnel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpnTunnels: \u0026networkconnectivity.SpokeLinkedVpnTunnelsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\ttunnel2.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HaVpnGateway;\nimport com.pulumi.gcp.compute.HaVpnGatewayArgs;\nimport com.pulumi.gcp.compute.ExternalVpnGateway;\nimport com.pulumi.gcp.compute.ExternalVpnGatewayArgs;\nimport com.pulumi.gcp.compute.inputs.ExternalVpnGatewayInterfaceArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.compute.RouterInterface;\nimport com.pulumi.gcp.compute.RouterInterfaceArgs;\nimport com.pulumi.gcp.compute.RouterPeer;\nimport com.pulumi.gcp.compute.RouterPeerArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpnTunnelsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"basic-hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder()\n .name(\"basic-subnetwork\")\n .ipCidrRange(\"10.0.0.0/28\")\n .region(\"us-central1\")\n .network(network.selfLink())\n .build());\n\n var gateway = new HaVpnGateway(\"gateway\", HaVpnGatewayArgs.builder()\n .name(\"vpn-gateway\")\n .network(network.id())\n .build());\n\n var externalVpnGw = new ExternalVpnGateway(\"externalVpnGw\", ExternalVpnGatewayArgs.builder()\n .name(\"external-vpn-gateway\")\n .redundancyType(\"SINGLE_IP_INTERNALLY_REDUNDANT\")\n .description(\"An externally managed VPN gateway\")\n .interfaces(ExternalVpnGatewayInterfaceArgs.builder()\n .id(0)\n .ipAddress(\"8.8.8.8\")\n .build())\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"external-vpn-gateway\")\n .region(\"us-central1\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(64514)\n .build())\n .build());\n\n var tunnel1 = new VPNTunnel(\"tunnel1\", VPNTunnelArgs.builder()\n .name(\"tunnel1\")\n .region(\"us-central1\")\n .vpnGateway(gateway.id())\n .peerExternalGateway(externalVpnGw.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router.id())\n .vpnGatewayInterface(0)\n .build());\n\n var tunnel2 = new VPNTunnel(\"tunnel2\", VPNTunnelArgs.builder()\n .name(\"tunnel2\")\n .region(\"us-central1\")\n .vpnGateway(gateway.id())\n .peerExternalGateway(externalVpnGw.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router.id().applyValue(id -\u003e String.format(\" %s\", id)))\n .vpnGatewayInterface(1)\n .build());\n\n var routerInterface1 = new RouterInterface(\"routerInterface1\", RouterInterfaceArgs.builder()\n .name(\"router-interface1\")\n .router(router.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.0.1/30\")\n .vpnTunnel(tunnel1.name())\n .build());\n\n var routerPeer1 = new RouterPeer(\"routerPeer1\", RouterPeerArgs.builder()\n .name(\"router-peer1\")\n .router(router.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.0.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(routerInterface1.name())\n .build());\n\n var routerInterface2 = new RouterInterface(\"routerInterface2\", RouterInterfaceArgs.builder()\n .name(\"router-interface2\")\n .router(router.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.1.1/30\")\n .vpnTunnel(tunnel2.name())\n .build());\n\n var routerPeer2 = new RouterPeer(\"routerPeer2\", RouterPeerArgs.builder()\n .name(\"router-peer2\")\n .router(router.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(routerInterface2.name())\n .build());\n\n var tunnel1Spoke = new Spoke(\"tunnel1Spoke\", SpokeArgs.builder()\n .name(\"vpn-tunnel-1-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked VPN Tunnel\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()\n .uris(tunnel1.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n var tunnel2Spoke = new Spoke(\"tunnel2Spoke\", SpokeArgs.builder()\n .name(\"vpn-tunnel-2-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked VPN Tunnel\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()\n .uris(tunnel2.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: basic-hub1\n description: A sample hub\n labels:\n label-two: value-one\n network:\n type: gcp:compute:Network\n properties:\n name: basic-network\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: basic-subnetwork\n ipCidrRange: 10.0.0.0/28\n region: us-central1\n network: ${network.selfLink}\n gateway:\n type: gcp:compute:HaVpnGateway\n properties:\n name: vpn-gateway\n network: ${network.id}\n externalVpnGw:\n type: gcp:compute:ExternalVpnGateway\n name: external_vpn_gw\n properties:\n name: external-vpn-gateway\n redundancyType: SINGLE_IP_INTERNALLY_REDUNDANT\n description: An externally managed VPN gateway\n interfaces:\n - id: 0\n ipAddress: 8.8.8.8\n router:\n type: gcp:compute:Router\n properties:\n name: external-vpn-gateway\n region: us-central1\n network: ${network.name}\n bgp:\n asn: 64514\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n name: tunnel1\n region: us-central1\n vpnGateway: ${gateway.id}\n peerExternalGateway: ${externalVpnGw.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ${router.id}\n vpnGatewayInterface: 0\n tunnel2:\n type: gcp:compute:VPNTunnel\n properties:\n name: tunnel2\n region: us-central1\n vpnGateway: ${gateway.id}\n peerExternalGateway: ${externalVpnGw.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ' ${router.id}'\n vpnGatewayInterface: 1\n routerInterface1:\n type: gcp:compute:RouterInterface\n name: router_interface1\n properties:\n name: router-interface1\n router: ${router.name}\n region: us-central1\n ipRange: 169.254.0.1/30\n vpnTunnel: ${tunnel1.name}\n routerPeer1:\n type: gcp:compute:RouterPeer\n name: router_peer1\n properties:\n name: router-peer1\n router: ${router.name}\n region: us-central1\n peerIpAddress: 169.254.0.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${routerInterface1.name}\n routerInterface2:\n type: gcp:compute:RouterInterface\n name: router_interface2\n properties:\n name: router-interface2\n router: ${router.name}\n region: us-central1\n ipRange: 169.254.1.1/30\n vpnTunnel: ${tunnel2.name}\n routerPeer2:\n type: gcp:compute:RouterPeer\n name: router_peer2\n properties:\n name: router-peer2\n router: ${router.name}\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${routerInterface2.name}\n tunnel1Spoke:\n type: gcp:networkconnectivity:Spoke\n name: tunnel1\n properties:\n name: vpn-tunnel-1-spoke\n location: us-central1\n description: A sample spoke with a linked VPN Tunnel\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpnTunnels:\n uris:\n - ${tunnel1.selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n tunnel2Spoke:\n type: gcp:networkconnectivity:Spoke\n name: tunnel2\n properties:\n name: vpn-tunnel-2-spoke\n location: us-central1\n description: A sample spoke with a linked VPN Tunnel\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedVpnTunnels:\n uris:\n - ${tunnel2.selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Interconnect Attachment Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {\n name: \"basic-hub1\",\n description: \"A sample hub\",\n labels: {\n \"label-two\": \"value-one\",\n },\n});\nconst network = new gcp.compute.Network(\"network\", {\n name: \"basic-network\",\n autoCreateSubnetworks: false,\n});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"external-vpn-gateway\",\n region: \"us-central1\",\n network: network.name,\n bgp: {\n asn: 16550,\n },\n});\nconst interconnect_attachment = new gcp.compute.InterconnectAttachment(\"interconnect-attachment\", {\n name: \"partner-interconnect1\",\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_1\",\n type: \"PARTNER\",\n router: router.id,\n mtu: \"1500\",\n region: \"us-central1\",\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"interconnect-attachment-spoke\",\n location: \"us-central1\",\n description: \"A sample spoke with a linked Interconnect Attachment\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedInterconnectAttachments: {\n uris: [interconnect_attachment.selfLink],\n siteToSiteDataTransfer: true,\n includeImportRanges: [\"ALL_IPV4_RANGES\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\",\n name=\"basic-hub1\",\n description=\"A sample hub\",\n labels={\n \"label-two\": \"value-one\",\n })\nnetwork = gcp.compute.Network(\"network\",\n name=\"basic-network\",\n auto_create_subnetworks=False)\nrouter = gcp.compute.Router(\"router\",\n name=\"external-vpn-gateway\",\n region=\"us-central1\",\n network=network.name,\n bgp={\n \"asn\": 16550,\n })\ninterconnect_attachment = gcp.compute.InterconnectAttachment(\"interconnect-attachment\",\n name=\"partner-interconnect1\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_1\",\n type=\"PARTNER\",\n router=router.id,\n mtu=\"1500\",\n region=\"us-central1\")\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"interconnect-attachment-spoke\",\n location=\"us-central1\",\n description=\"A sample spoke with a linked Interconnect Attachment\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_interconnect_attachments={\n \"uris\": [interconnect_attachment.self_link],\n \"site_to_site_data_transfer\": True,\n \"include_import_ranges\": [\"ALL_IPV4_RANGES\"],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"basic-hub1\",\n Description = \"A sample hub\",\n Labels = \n {\n { \"label-two\", \"value-one\" },\n },\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-network\",\n AutoCreateSubnetworks = false,\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"external-vpn-gateway\",\n Region = \"us-central1\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 16550,\n },\n });\n\n var interconnect_attachment = new Gcp.Compute.InterconnectAttachment(\"interconnect-attachment\", new()\n {\n Name = \"partner-interconnect1\",\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_1\",\n Type = \"PARTNER\",\n Router = router.Id,\n Mtu = \"1500\",\n Region = \"us-central1\",\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"interconnect-attachment-spoke\",\n Location = \"us-central1\",\n Description = \"A sample spoke with a linked Interconnect Attachment\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedInterconnectAttachments = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedInterconnectAttachmentsArgs\n {\n Uris = new[]\n {\n interconnect_attachment.SelfLink,\n },\n SiteToSiteDataTransfer = true,\n IncludeImportRanges = new[]\n {\n \"ALL_IPV4_RANGES\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"basic-hub1\"),\n\t\t\tDescription: pulumi.String(\"A sample hub\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-two\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"external-vpn-gateway\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(16550),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInterconnectAttachment(ctx, \"interconnect-attachment\", \u0026compute.InterconnectAttachmentArgs{\n\t\t\tName: pulumi.String(\"partner-interconnect1\"),\n\t\t\tEdgeAvailabilityDomain: pulumi.String(\"AVAILABILITY_DOMAIN_1\"),\n\t\t\tType: pulumi.String(\"PARTNER\"),\n\t\t\tRouter: router.ID(),\n\t\t\tMtu: pulumi.String(\"1500\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"interconnect-attachment-spoke\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked Interconnect Attachment\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedInterconnectAttachments: \u0026networkconnectivity.SpokeLinkedInterconnectAttachmentsArgs{\n\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\tinterconnect_attachment.SelfLink,\n\t\t\t\t},\n\t\t\t\tSiteToSiteDataTransfer: pulumi.Bool(true),\n\t\t\t\tIncludeImportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ALL_IPV4_RANGES\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.InterconnectAttachment;\nimport com.pulumi.gcp.compute.InterconnectAttachmentArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedInterconnectAttachmentsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"basic-hub1\")\n .description(\"A sample hub\")\n .labels(Map.of(\"label-two\", \"value-one\"))\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"external-vpn-gateway\")\n .region(\"us-central1\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(16550)\n .build())\n .build());\n\n var interconnect_attachment = new InterconnectAttachment(\"interconnect-attachment\", InterconnectAttachmentArgs.builder()\n .name(\"partner-interconnect1\")\n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_1\")\n .type(\"PARTNER\")\n .router(router.id())\n .mtu(1500)\n .region(\"us-central1\")\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"interconnect-attachment-spoke\")\n .location(\"us-central1\")\n .description(\"A sample spoke with a linked Interconnect Attachment\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedInterconnectAttachments(SpokeLinkedInterconnectAttachmentsArgs.builder()\n .uris(interconnect_attachment.selfLink())\n .siteToSiteDataTransfer(true)\n .includeImportRanges(\"ALL_IPV4_RANGES\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: basic-hub1\n description: A sample hub\n labels:\n label-two: value-one\n network:\n type: gcp:compute:Network\n properties:\n name: basic-network\n autoCreateSubnetworks: false\n router:\n type: gcp:compute:Router\n properties:\n name: external-vpn-gateway\n region: us-central1\n network: ${network.name}\n bgp:\n asn: 16550\n interconnect-attachment:\n type: gcp:compute:InterconnectAttachment\n properties:\n name: partner-interconnect1\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_1\n type: PARTNER\n router: ${router.id}\n mtu: 1500\n region: us-central1\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: interconnect-attachment-spoke\n location: us-central1\n description: A sample spoke with a linked Interconnect Attachment\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedInterconnectAttachments:\n uris:\n - ${[\"interconnect-attachment\"].selfLink}\n siteToSiteDataTransfer: true\n includeImportRanges:\n - ALL_IPV4_RANGES\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Spoke Linked Producer Vpc Network Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"net-spoke\",\n autoCreateSubnetworks: false,\n});\nconst address = new gcp.compute.GlobalAddress(\"address\", {\n name: \"test-address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: network.id,\n});\nconst peering = new gcp.servicenetworking.Connection(\"peering\", {\n network: network.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [address.name],\n});\nconst basicHub = new gcp.networkconnectivity.Hub(\"basic_hub\", {name: \"hub-basic\"});\nconst linkedVpcSpoke = new gcp.networkconnectivity.Spoke(\"linked_vpc_spoke\", {\n name: \"vpc-spoke\",\n location: \"global\",\n hub: basicHub.id,\n linkedVpcNetwork: {\n uri: network.selfLink,\n },\n});\nconst primary = new gcp.networkconnectivity.Spoke(\"primary\", {\n name: \"producer-spoke\",\n location: \"global\",\n description: \"A sample spoke with a linked router appliance instance\",\n labels: {\n \"label-one\": \"value-one\",\n },\n hub: basicHub.id,\n linkedProducerVpcNetwork: {\n network: network.name,\n peering: peering.peering,\n excludeExportRanges: [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n },\n}, {\n dependsOn: [linkedVpcSpoke],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"net-spoke\",\n auto_create_subnetworks=False)\naddress = gcp.compute.GlobalAddress(\"address\",\n name=\"test-address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=network.id)\npeering = gcp.servicenetworking.Connection(\"peering\",\n network=network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[address.name])\nbasic_hub = gcp.networkconnectivity.Hub(\"basic_hub\", name=\"hub-basic\")\nlinked_vpc_spoke = gcp.networkconnectivity.Spoke(\"linked_vpc_spoke\",\n name=\"vpc-spoke\",\n location=\"global\",\n hub=basic_hub.id,\n linked_vpc_network={\n \"uri\": network.self_link,\n })\nprimary = gcp.networkconnectivity.Spoke(\"primary\",\n name=\"producer-spoke\",\n location=\"global\",\n description=\"A sample spoke with a linked router appliance instance\",\n labels={\n \"label-one\": \"value-one\",\n },\n hub=basic_hub.id,\n linked_producer_vpc_network={\n \"network\": network.name,\n \"peering\": peering.peering,\n \"exclude_export_ranges\": [\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n ],\n },\n opts = pulumi.ResourceOptions(depends_on=[linked_vpc_spoke]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"net-spoke\",\n AutoCreateSubnetworks = false,\n });\n\n var address = new Gcp.Compute.GlobalAddress(\"address\", new()\n {\n Name = \"test-address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = network.Id,\n });\n\n var peering = new Gcp.ServiceNetworking.Connection(\"peering\", new()\n {\n Network = network.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n address.Name,\n },\n });\n\n var basicHub = new Gcp.NetworkConnectivity.Hub(\"basic_hub\", new()\n {\n Name = \"hub-basic\",\n });\n\n var linkedVpcSpoke = new Gcp.NetworkConnectivity.Spoke(\"linked_vpc_spoke\", new()\n {\n Name = \"vpc-spoke\",\n Location = \"global\",\n Hub = basicHub.Id,\n LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs\n {\n Uri = network.SelfLink,\n },\n });\n\n var primary = new Gcp.NetworkConnectivity.Spoke(\"primary\", new()\n {\n Name = \"producer-spoke\",\n Location = \"global\",\n Description = \"A sample spoke with a linked router appliance instance\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Hub = basicHub.Id,\n LinkedProducerVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedProducerVpcNetworkArgs\n {\n Network = network.Name,\n Peering = peering.Peering,\n ExcludeExportRanges = new[]\n {\n \"198.51.100.0/24\",\n \"10.10.0.0/16\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n linkedVpcSpoke,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"net-spoke\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddress, err := compute.NewGlobalAddress(ctx, \"address\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"test-address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpeering, err := servicenetworking.NewConnection(ctx, \"peering\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: network.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\taddress.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicHub, err := networkconnectivity.NewHub(ctx, \"basic_hub\", \u0026networkconnectivity.HubArgs{\n\t\t\tName: pulumi.String(\"hub-basic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlinkedVpcSpoke, err := networkconnectivity.NewSpoke(ctx, \"linked_vpc_spoke\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"vpc-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedVpcNetwork: \u0026networkconnectivity.SpokeLinkedVpcNetworkArgs{\n\t\t\t\tUri: network.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewSpoke(ctx, \"primary\", \u0026networkconnectivity.SpokeArgs{\n\t\t\tName: pulumi.String(\"producer-spoke\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"A sample spoke with a linked router appliance instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tHub: basicHub.ID(),\n\t\t\tLinkedProducerVpcNetwork: \u0026networkconnectivity.SpokeLinkedProducerVpcNetworkArgs{\n\t\t\t\tNetwork: network.Name,\n\t\t\t\tPeering: peering.Peering,\n\t\t\t\tExcludeExportRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"198.51.100.0/24\"),\n\t\t\t\t\tpulumi.String(\"10.10.0.0/16\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tlinkedVpcSpoke,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.networkconnectivity.Hub;\nimport com.pulumi.gcp.networkconnectivity.HubArgs;\nimport com.pulumi.gcp.networkconnectivity.Spoke;\nimport com.pulumi.gcp.networkconnectivity.SpokeArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedProducerVpcNetworkArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"net-spoke\")\n .autoCreateSubnetworks(false)\n .build());\n\n var address = new GlobalAddress(\"address\", GlobalAddressArgs.builder()\n .name(\"test-address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(network.id())\n .build());\n\n var peering = new Connection(\"peering\", ConnectionArgs.builder()\n .network(network.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(address.name())\n .build());\n\n var basicHub = new Hub(\"basicHub\", HubArgs.builder()\n .name(\"hub-basic\")\n .build());\n\n var linkedVpcSpoke = new Spoke(\"linkedVpcSpoke\", SpokeArgs.builder()\n .name(\"vpc-spoke\")\n .location(\"global\")\n .hub(basicHub.id())\n .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()\n .uri(network.selfLink())\n .build())\n .build());\n\n var primary = new Spoke(\"primary\", SpokeArgs.builder()\n .name(\"producer-spoke\")\n .location(\"global\")\n .description(\"A sample spoke with a linked router appliance instance\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .hub(basicHub.id())\n .linkedProducerVpcNetwork(SpokeLinkedProducerVpcNetworkArgs.builder()\n .network(network.name())\n .peering(peering.peering())\n .excludeExportRanges( \n \"198.51.100.0/24\",\n \"10.10.0.0/16\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(linkedVpcSpoke)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: net-spoke\n autoCreateSubnetworks: false\n address:\n type: gcp:compute:GlobalAddress\n properties:\n name: test-address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${network.id}\n peering:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${network.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${address.name}\n basicHub:\n type: gcp:networkconnectivity:Hub\n name: basic_hub\n properties:\n name: hub-basic\n linkedVpcSpoke:\n type: gcp:networkconnectivity:Spoke\n name: linked_vpc_spoke\n properties:\n name: vpc-spoke\n location: global\n hub: ${basicHub.id}\n linkedVpcNetwork:\n uri: ${network.selfLink}\n primary:\n type: gcp:networkconnectivity:Spoke\n properties:\n name: producer-spoke\n location: global\n description: A sample spoke with a linked router appliance instance\n labels:\n label-one: value-one\n hub: ${basicHub.id}\n linkedProducerVpcNetwork:\n network: ${network.name}\n peering: ${peering.peering}\n excludeExportRanges:\n - 198.51.100.0/24\n - 10.10.0.0/16\n options:\n dependsOn:\n - ${linkedVpcSpoke}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSpoke can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/spokes/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Spoke can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default projects/{{project}}/locations/{{location}}/spokes/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{location}}/{{name}}\n```\n\n",
"properties": {
"createTime": {
"type": "string",
@@ -243290,6 +245309,786 @@
"type": "object"
}
},
+ "gcp:networksecurity/mirroringDeployment:MirroringDeployment": {
+ "description": "## Example Usage\n\n### Network Security Mirroring Deployment Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"example-network\",\n autoCreateSubnetworks: false,\n});\nconst subnetwork = new gcp.compute.Subnetwork(\"subnetwork\", {\n name: \"example-subnet\",\n region: \"us-central1\",\n ipCidrRange: \"10.1.0.0/16\",\n network: network.name,\n});\nconst healthCheck = new gcp.compute.RegionHealthCheck(\"health_check\", {\n name: \"example-hc\",\n region: \"us-central1\",\n httpHealthCheck: {\n port: 80,\n },\n});\nconst backendService = new gcp.compute.RegionBackendService(\"backend_service\", {\n name: \"example-bs\",\n region: \"us-central1\",\n healthChecks: healthCheck.id,\n protocol: \"UDP\",\n loadBalancingScheme: \"INTERNAL\",\n});\nconst forwardingRule = new gcp.compute.ForwardingRule(\"forwarding_rule\", {\n name: \"example-fwr\",\n region: \"us-central1\",\n network: network.name,\n subnetwork: subnetwork.name,\n backendService: backendService.id,\n loadBalancingScheme: \"INTERNAL\",\n ports: [\"6081\"],\n ipProtocol: \"UDP\",\n isMirroringCollector: true,\n});\nconst deploymentGroup = new gcp.networksecurity.MirroringDeploymentGroup(\"deployment_group\", {\n mirroringDeploymentGroupId: \"example-dg\",\n location: \"global\",\n network: network.id,\n});\nconst _default = new gcp.networksecurity.MirroringDeployment(\"default\", {\n mirroringDeploymentId: \"example-deployment\",\n location: \"us-central1-a\",\n forwardingRule: forwardingRule.id,\n mirroringDeploymentGroup: deploymentGroup.id,\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"example-network\",\n auto_create_subnetworks=False)\nsubnetwork = gcp.compute.Subnetwork(\"subnetwork\",\n name=\"example-subnet\",\n region=\"us-central1\",\n ip_cidr_range=\"10.1.0.0/16\",\n network=network.name)\nhealth_check = gcp.compute.RegionHealthCheck(\"health_check\",\n name=\"example-hc\",\n region=\"us-central1\",\n http_health_check={\n \"port\": 80,\n })\nbackend_service = gcp.compute.RegionBackendService(\"backend_service\",\n name=\"example-bs\",\n region=\"us-central1\",\n health_checks=health_check.id,\n protocol=\"UDP\",\n load_balancing_scheme=\"INTERNAL\")\nforwarding_rule = gcp.compute.ForwardingRule(\"forwarding_rule\",\n name=\"example-fwr\",\n region=\"us-central1\",\n network=network.name,\n subnetwork=subnetwork.name,\n backend_service=backend_service.id,\n load_balancing_scheme=\"INTERNAL\",\n ports=[\"6081\"],\n ip_protocol=\"UDP\",\n is_mirroring_collector=True)\ndeployment_group = gcp.networksecurity.MirroringDeploymentGroup(\"deployment_group\",\n mirroring_deployment_group_id=\"example-dg\",\n location=\"global\",\n network=network.id)\ndefault = gcp.networksecurity.MirroringDeployment(\"default\",\n mirroring_deployment_id=\"example-deployment\",\n location=\"us-central1-a\",\n forwarding_rule=forwarding_rule.id,\n mirroring_deployment_group=deployment_group.id,\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"example-network\",\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork = new Gcp.Compute.Subnetwork(\"subnetwork\", new()\n {\n Name = \"example-subnet\",\n Region = \"us-central1\",\n IpCidrRange = \"10.1.0.0/16\",\n Network = network.Name,\n });\n\n var healthCheck = new Gcp.Compute.RegionHealthCheck(\"health_check\", new()\n {\n Name = \"example-hc\",\n Region = \"us-central1\",\n HttpHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckHttpHealthCheckArgs\n {\n Port = 80,\n },\n });\n\n var backendService = new Gcp.Compute.RegionBackendService(\"backend_service\", new()\n {\n Name = \"example-bs\",\n Region = \"us-central1\",\n HealthChecks = healthCheck.Id,\n Protocol = \"UDP\",\n LoadBalancingScheme = \"INTERNAL\",\n });\n\n var forwardingRule = new Gcp.Compute.ForwardingRule(\"forwarding_rule\", new()\n {\n Name = \"example-fwr\",\n Region = \"us-central1\",\n Network = network.Name,\n Subnetwork = subnetwork.Name,\n BackendService = backendService.Id,\n LoadBalancingScheme = \"INTERNAL\",\n Ports = new[]\n {\n \"6081\",\n },\n IpProtocol = \"UDP\",\n IsMirroringCollector = true,\n });\n\n var deploymentGroup = new Gcp.NetworkSecurity.MirroringDeploymentGroup(\"deployment_group\", new()\n {\n MirroringDeploymentGroupId = \"example-dg\",\n Location = \"global\",\n Network = network.Id,\n });\n\n var @default = new Gcp.NetworkSecurity.MirroringDeployment(\"default\", new()\n {\n MirroringDeploymentId = \"example-deployment\",\n Location = \"us-central1-a\",\n ForwardingRule = forwardingRule.Id,\n MirroringDeploymentGroup = deploymentGroup.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"example-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsubnetwork, err := compute.NewSubnetwork(ctx, \"subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"example-subnet\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.1.0.0/16\"),\n\t\t\tNetwork: network.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thealthCheck, err := compute.NewRegionHealthCheck(ctx, \"health_check\", \u0026compute.RegionHealthCheckArgs{\n\t\t\tName: pulumi.String(\"example-hc\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tHttpHealthCheck: \u0026compute.RegionHealthCheckHttpHealthCheckArgs{\n\t\t\t\tPort: pulumi.Int(80),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbackendService, err := compute.NewRegionBackendService(ctx, \"backend_service\", \u0026compute.RegionBackendServiceArgs{\n\t\t\tName: pulumi.String(\"example-bs\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tHealthChecks: healthCheck.ID(),\n\t\t\tProtocol: pulumi.String(\"UDP\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tforwardingRule, err := compute.NewForwardingRule(ctx, \"forwarding_rule\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"example-fwr\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.Name,\n\t\t\tSubnetwork: subnetwork.Name,\n\t\t\tBackendService: backendService.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"INTERNAL\"),\n\t\t\tPorts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"6081\"),\n\t\t\t},\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tIsMirroringCollector: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdeploymentGroup, err := networksecurity.NewMirroringDeploymentGroup(ctx, \"deployment_group\", \u0026networksecurity.MirroringDeploymentGroupArgs{\n\t\t\tMirroringDeploymentGroupId: pulumi.String(\"example-dg\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networksecurity.NewMirroringDeployment(ctx, \"default\", \u0026networksecurity.MirroringDeploymentArgs{\n\t\t\tMirroringDeploymentId: pulumi.String(\"example-deployment\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tForwardingRule: forwardingRule.ID(),\n\t\t\tMirroringDeploymentGroup: deploymentGroup.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.RegionHealthCheck;\nimport com.pulumi.gcp.compute.RegionHealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.RegionHealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.RegionBackendService;\nimport com.pulumi.gcp.compute.RegionBackendServiceArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.networksecurity.MirroringDeploymentGroup;\nimport com.pulumi.gcp.networksecurity.MirroringDeploymentGroupArgs;\nimport com.pulumi.gcp.networksecurity.MirroringDeployment;\nimport com.pulumi.gcp.networksecurity.MirroringDeploymentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"example-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork = new Subnetwork(\"subnetwork\", SubnetworkArgs.builder()\n .name(\"example-subnet\")\n .region(\"us-central1\")\n .ipCidrRange(\"10.1.0.0/16\")\n .network(network.name())\n .build());\n\n var healthCheck = new RegionHealthCheck(\"healthCheck\", RegionHealthCheckArgs.builder()\n .name(\"example-hc\")\n .region(\"us-central1\")\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var backendService = new RegionBackendService(\"backendService\", RegionBackendServiceArgs.builder()\n .name(\"example-bs\")\n .region(\"us-central1\")\n .healthChecks(healthCheck.id())\n .protocol(\"UDP\")\n .loadBalancingScheme(\"INTERNAL\")\n .build());\n\n var forwardingRule = new ForwardingRule(\"forwardingRule\", ForwardingRuleArgs.builder()\n .name(\"example-fwr\")\n .region(\"us-central1\")\n .network(network.name())\n .subnetwork(subnetwork.name())\n .backendService(backendService.id())\n .loadBalancingScheme(\"INTERNAL\")\n .ports(6081)\n .ipProtocol(\"UDP\")\n .isMirroringCollector(true)\n .build());\n\n var deploymentGroup = new MirroringDeploymentGroup(\"deploymentGroup\", MirroringDeploymentGroupArgs.builder()\n .mirroringDeploymentGroupId(\"example-dg\")\n .location(\"global\")\n .network(network.id())\n .build());\n\n var default_ = new MirroringDeployment(\"default\", MirroringDeploymentArgs.builder()\n .mirroringDeploymentId(\"example-deployment\")\n .location(\"us-central1-a\")\n .forwardingRule(forwardingRule.id())\n .mirroringDeploymentGroup(deploymentGroup.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: example-network\n autoCreateSubnetworks: false\n subnetwork:\n type: gcp:compute:Subnetwork\n properties:\n name: example-subnet\n region: us-central1\n ipCidrRange: 10.1.0.0/16\n network: ${network.name}\n healthCheck:\n type: gcp:compute:RegionHealthCheck\n name: health_check\n properties:\n name: example-hc\n region: us-central1\n httpHealthCheck:\n port: 80\n backendService:\n type: gcp:compute:RegionBackendService\n name: backend_service\n properties:\n name: example-bs\n region: us-central1\n healthChecks: ${healthCheck.id}\n protocol: UDP\n loadBalancingScheme: INTERNAL\n forwardingRule:\n type: gcp:compute:ForwardingRule\n name: forwarding_rule\n properties:\n name: example-fwr\n region: us-central1\n network: ${network.name}\n subnetwork: ${subnetwork.name}\n backendService: ${backendService.id}\n loadBalancingScheme: INTERNAL\n ports:\n - 6081\n ipProtocol: UDP\n isMirroringCollector: true\n deploymentGroup:\n type: gcp:networksecurity:MirroringDeploymentGroup\n name: deployment_group\n properties:\n mirroringDeploymentGroupId: example-dg\n location: global\n network: ${network.id}\n default:\n type: gcp:networksecurity:MirroringDeployment\n properties:\n mirroringDeploymentId: example-deployment\n location: us-central1-a\n forwardingRule: ${forwardingRule.id}\n mirroringDeploymentGroup: ${deploymentGroup.id}\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMirroringDeployment can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}}`\n\n* `{{project}}/{{location}}/{{mirroring_deployment_id}}`\n\n* `{{location}}/{{mirroring_deployment_id}}`\n\nWhen using the `pulumi import` command, MirroringDeployment can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{project}}/{{location}}/{{mirroring_deployment_id}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{location}}/{{mirroring_deployment_id}}\n```\n\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "forwardingRule": {
+ "type": "string",
+ "description": "Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded\nto. Format is:\nprojects/{project}/regions/{region}/forwardingRules/{forwardingRule}\n"
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringDeployment`.\n"
+ },
+ "mirroringDeploymentGroup": {
+ "type": "string",
+ "description": "Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is:\n`projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}`\n"
+ },
+ "mirroringDeploymentId": {
+ "type": "string",
+ "description": "Required. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_deployment_id from the method_signature of Create RPC\n\n\n- - -\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Immutable. Identifier. The name of the MirroringDeployment.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "reconciling": {
+ "type": "boolean",
+ "description": "Output only. Whether reconciling is in progress, recommended per\nhttps://google.aip.dev/128.\n"
+ },
+ "state": {
+ "type": "string",
+ "description": "Output only. Current state of the deployment.\nPossible values:\nSTATE_UNSPECIFIED\nACTIVE\nCREATING\nDELETING\nOUT_OF_SYNC\nDELETE_FAILED\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Update time stamp\n"
+ }
+ },
+ "required": [
+ "createTime",
+ "effectiveLabels",
+ "forwardingRule",
+ "location",
+ "mirroringDeploymentGroup",
+ "mirroringDeploymentId",
+ "name",
+ "project",
+ "reconciling",
+ "state",
+ "pulumiLabels",
+ "updateTime"
+ ],
+ "inputProperties": {
+ "forwardingRule": {
+ "type": "string",
+ "description": "Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded\nto. Format is:\nprojects/{project}/regions/{region}/forwardingRules/{forwardingRule}\n",
+ "willReplaceOnChanges": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringDeployment`.\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringDeploymentGroup": {
+ "type": "string",
+ "description": "Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is:\n`projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}`\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringDeploymentId": {
+ "type": "string",
+ "description": "Required. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_deployment_id from the method_signature of Create RPC\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "forwardingRule",
+ "location",
+ "mirroringDeploymentGroup",
+ "mirroringDeploymentId"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering MirroringDeployment resources.\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "forwardingRule": {
+ "type": "string",
+ "description": "Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded\nto. Format is:\nprojects/{project}/regions/{region}/forwardingRules/{forwardingRule}\n",
+ "willReplaceOnChanges": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringDeployment`.\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringDeploymentGroup": {
+ "type": "string",
+ "description": "Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is:\n`projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}`\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringDeploymentId": {
+ "type": "string",
+ "description": "Required. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_deployment_id from the method_signature of Create RPC\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Immutable. Identifier. The name of the MirroringDeployment.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "reconciling": {
+ "type": "boolean",
+ "description": "Output only. Whether reconciling is in progress, recommended per\nhttps://google.aip.dev/128.\n"
+ },
+ "state": {
+ "type": "string",
+ "description": "Output only. Current state of the deployment.\nPossible values:\nSTATE_UNSPECIFIED\nACTIVE\nCREATING\nDELETING\nOUT_OF_SYNC\nDELETE_FAILED\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Update time stamp\n"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup": {
+ "description": "## Example Usage\n\n### Network Security Mirroring Deployment Group Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"example-network\",\n autoCreateSubnetworks: false,\n});\nconst _default = new gcp.networksecurity.MirroringDeploymentGroup(\"default\", {\n mirroringDeploymentGroupId: \"example-dg\",\n location: \"global\",\n network: network.id,\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"example-network\",\n auto_create_subnetworks=False)\ndefault = gcp.networksecurity.MirroringDeploymentGroup(\"default\",\n mirroring_deployment_group_id=\"example-dg\",\n location=\"global\",\n network=network.id,\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"example-network\",\n AutoCreateSubnetworks = false,\n });\n\n var @default = new Gcp.NetworkSecurity.MirroringDeploymentGroup(\"default\", new()\n {\n MirroringDeploymentGroupId = \"example-dg\",\n Location = \"global\",\n Network = network.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"example-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networksecurity.NewMirroringDeploymentGroup(ctx, \"default\", \u0026networksecurity.MirroringDeploymentGroupArgs{\n\t\t\tMirroringDeploymentGroupId: pulumi.String(\"example-dg\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tNetwork: network.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.networksecurity.MirroringDeploymentGroup;\nimport com.pulumi.gcp.networksecurity.MirroringDeploymentGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"example-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var default_ = new MirroringDeploymentGroup(\"default\", MirroringDeploymentGroupArgs.builder()\n .mirroringDeploymentGroupId(\"example-dg\")\n .location(\"global\")\n .network(network.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: example-network\n autoCreateSubnetworks: false\n default:\n type: gcp:networksecurity:MirroringDeploymentGroup\n properties:\n mirroringDeploymentGroupId: example-dg\n location: global\n network: ${network.id}\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMirroringDeploymentGroup can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}}`\n\n* `{{project}}/{{location}}/{{mirroring_deployment_group_id}}`\n\n* `{{location}}/{{mirroring_deployment_group_id}}`\n\nWhen using the `pulumi import` command, MirroringDeploymentGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{project}}/{{location}}/{{mirroring_deployment_group_id}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{location}}/{{mirroring_deployment_group_id}}\n```\n\n",
+ "properties": {
+ "connectedEndpointGroups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:networksecurity/MirroringDeploymentGroupConnectedEndpointGroup:MirroringDeploymentGroupConnectedEndpointGroup"
+ },
+ "description": "Output only. The list of Mirroring Endpoint Groups that are connected to this resource.\nStructure is documented below.\n"
+ },
+ "createTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringDeploymentGroup`.\n"
+ },
+ "mirroringDeploymentGroupId": {
+ "type": "string",
+ "description": "Required. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_deployment_group_id from the method_signature of Create RPC\n\n\n- - -\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "(Output)\nOutput only. A connected mirroring endpoint group.\n"
+ },
+ "network": {
+ "type": "string",
+ "description": "Required. Immutable. The network that is being used for the deployment. Format is:\nprojects/{project}/global/networks/{network}.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "reconciling": {
+ "type": "boolean",
+ "description": "Output only. Whether reconciling is in progress, recommended per\nhttps://google.aip.dev/128.\n"
+ },
+ "state": {
+ "type": "string",
+ "description": "Output only. Current state of the deployment group.\nPossible values:\nSTATE_UNSPECIFIED\nACTIVE\nCREATING\nDELETING\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Update time stamp\n"
+ }
+ },
+ "required": [
+ "connectedEndpointGroups",
+ "createTime",
+ "effectiveLabels",
+ "location",
+ "mirroringDeploymentGroupId",
+ "name",
+ "network",
+ "project",
+ "reconciling",
+ "state",
+ "pulumiLabels",
+ "updateTime"
+ ],
+ "inputProperties": {
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringDeploymentGroup`.\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringDeploymentGroupId": {
+ "type": "string",
+ "description": "Required. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_deployment_group_id from the method_signature of Create RPC\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "network": {
+ "type": "string",
+ "description": "Required. Immutable. The network that is being used for the deployment. Format is:\nprojects/{project}/global/networks/{network}.\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "location",
+ "mirroringDeploymentGroupId",
+ "network"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering MirroringDeploymentGroup resources.\n",
+ "properties": {
+ "connectedEndpointGroups": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:networksecurity/MirroringDeploymentGroupConnectedEndpointGroup:MirroringDeploymentGroupConnectedEndpointGroup"
+ },
+ "description": "Output only. The list of Mirroring Endpoint Groups that are connected to this resource.\nStructure is documented below.\n"
+ },
+ "createTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringDeploymentGroup`.\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringDeploymentGroupId": {
+ "type": "string",
+ "description": "Required. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_deployment_group_id from the method_signature of Create RPC\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "(Output)\nOutput only. A connected mirroring endpoint group.\n"
+ },
+ "network": {
+ "type": "string",
+ "description": "Required. Immutable. The network that is being used for the deployment. Format is:\nprojects/{project}/global/networks/{network}.\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "reconciling": {
+ "type": "boolean",
+ "description": "Output only. Whether reconciling is in progress, recommended per\nhttps://google.aip.dev/128.\n"
+ },
+ "state": {
+ "type": "string",
+ "description": "Output only. Current state of the deployment group.\nPossible values:\nSTATE_UNSPECIFIED\nACTIVE\nCREATING\nDELETING\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Update time stamp\n"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup": {
+ "description": "## Example Usage\n\n### Network Security Mirroring Endpoint Group Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"example-network\",\n autoCreateSubnetworks: false,\n});\nconst deploymentGroup = new gcp.networksecurity.MirroringDeploymentGroup(\"deployment_group\", {\n mirroringDeploymentGroupId: \"example-dg\",\n location: \"global\",\n network: network.id,\n});\nconst _default = new gcp.networksecurity.MirroringEndpointGroup(\"default\", {\n mirroringEndpointGroupId: \"example-eg\",\n location: \"global\",\n mirroringDeploymentGroup: deploymentGroup.id,\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"example-network\",\n auto_create_subnetworks=False)\ndeployment_group = gcp.networksecurity.MirroringDeploymentGroup(\"deployment_group\",\n mirroring_deployment_group_id=\"example-dg\",\n location=\"global\",\n network=network.id)\ndefault = gcp.networksecurity.MirroringEndpointGroup(\"default\",\n mirroring_endpoint_group_id=\"example-eg\",\n location=\"global\",\n mirroring_deployment_group=deployment_group.id,\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"example-network\",\n AutoCreateSubnetworks = false,\n });\n\n var deploymentGroup = new Gcp.NetworkSecurity.MirroringDeploymentGroup(\"deployment_group\", new()\n {\n MirroringDeploymentGroupId = \"example-dg\",\n Location = \"global\",\n Network = network.Id,\n });\n\n var @default = new Gcp.NetworkSecurity.MirroringEndpointGroup(\"default\", new()\n {\n MirroringEndpointGroupId = \"example-eg\",\n Location = \"global\",\n MirroringDeploymentGroup = deploymentGroup.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"example-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdeploymentGroup, err := networksecurity.NewMirroringDeploymentGroup(ctx, \"deployment_group\", \u0026networksecurity.MirroringDeploymentGroupArgs{\n\t\t\tMirroringDeploymentGroupId: pulumi.String(\"example-dg\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networksecurity.NewMirroringEndpointGroup(ctx, \"default\", \u0026networksecurity.MirroringEndpointGroupArgs{\n\t\t\tMirroringEndpointGroupId: pulumi.String(\"example-eg\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tMirroringDeploymentGroup: deploymentGroup.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.networksecurity.MirroringDeploymentGroup;\nimport com.pulumi.gcp.networksecurity.MirroringDeploymentGroupArgs;\nimport com.pulumi.gcp.networksecurity.MirroringEndpointGroup;\nimport com.pulumi.gcp.networksecurity.MirroringEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"example-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var deploymentGroup = new MirroringDeploymentGroup(\"deploymentGroup\", MirroringDeploymentGroupArgs.builder()\n .mirroringDeploymentGroupId(\"example-dg\")\n .location(\"global\")\n .network(network.id())\n .build());\n\n var default_ = new MirroringEndpointGroup(\"default\", MirroringEndpointGroupArgs.builder()\n .mirroringEndpointGroupId(\"example-eg\")\n .location(\"global\")\n .mirroringDeploymentGroup(deploymentGroup.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n name: example-network\n autoCreateSubnetworks: false\n deploymentGroup:\n type: gcp:networksecurity:MirroringDeploymentGroup\n name: deployment_group\n properties:\n mirroringDeploymentGroupId: example-dg\n location: global\n network: ${network.id}\n default:\n type: gcp:networksecurity:MirroringEndpointGroup\n properties:\n mirroringEndpointGroupId: example-eg\n location: global\n mirroringDeploymentGroup: ${deploymentGroup.id}\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMirroringEndpointGroup can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}}`\n\n* `{{project}}/{{location}}/{{mirroring_endpoint_group_id}}`\n\n* `{{location}}/{{mirroring_endpoint_group_id}}`\n\nWhen using the `pulumi import` command, MirroringEndpointGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{project}}/{{location}}/{{mirroring_endpoint_group_id}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{location}}/{{mirroring_endpoint_group_id}}\n```\n\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringEndpointGroup`.\n"
+ },
+ "mirroringDeploymentGroup": {
+ "type": "string",
+ "description": "Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format\nis:\n`projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}`\n"
+ },
+ "mirroringEndpointGroupId": {
+ "type": "string",
+ "description": "Required. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_endpoint_group_id from the method_signature of Create RPC\n\n\n- - -\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Immutable. Identifier. The name of the MirroringEndpointGroup.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "reconciling": {
+ "type": "boolean",
+ "description": "Output only. Whether reconciling is in progress, recommended per\nhttps://google.aip.dev/128.\n"
+ },
+ "state": {
+ "type": "string",
+ "description": "Output only. Current state of the endpoint group.\nPossible values:\nSTATE_UNSPECIFIED\nACTIVE\nCLOSED\nCREATING\nDELETING\nOUT_OF_SYNC\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Update time stamp\n"
+ }
+ },
+ "required": [
+ "createTime",
+ "effectiveLabels",
+ "location",
+ "mirroringDeploymentGroup",
+ "mirroringEndpointGroupId",
+ "name",
+ "project",
+ "reconciling",
+ "state",
+ "pulumiLabels",
+ "updateTime"
+ ],
+ "inputProperties": {
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringEndpointGroup`.\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringDeploymentGroup": {
+ "type": "string",
+ "description": "Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format\nis:\n`projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}`\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringEndpointGroupId": {
+ "type": "string",
+ "description": "Required. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_endpoint_group_id from the method_signature of Create RPC\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "location",
+ "mirroringDeploymentGroup",
+ "mirroringEndpointGroupId"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering MirroringEndpointGroup resources.\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringEndpointGroup`.\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringDeploymentGroup": {
+ "type": "string",
+ "description": "Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format\nis:\n`projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}`\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringEndpointGroupId": {
+ "type": "string",
+ "description": "Required. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_endpoint_group_id from the method_signature of Create RPC\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Immutable. Identifier. The name of the MirroringEndpointGroup.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "reconciling": {
+ "type": "boolean",
+ "description": "Output only. Whether reconciling is in progress, recommended per\nhttps://google.aip.dev/128.\n"
+ },
+ "state": {
+ "type": "string",
+ "description": "Output only. Current state of the endpoint group.\nPossible values:\nSTATE_UNSPECIFIED\nACTIVE\nCLOSED\nCREATING\nDELETING\nOUT_OF_SYNC\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Update time stamp\n"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation": {
+ "description": "## Example Usage\n\n### Network Security Mirroring Endpoint Group Association Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNetwork = new gcp.compute.Network(\"producer_network\", {\n name: \"example-prod-network\",\n autoCreateSubnetworks: false,\n});\nconst consumerNetwork = new gcp.compute.Network(\"consumer_network\", {\n name: \"example-cons-network\",\n autoCreateSubnetworks: false,\n});\nconst deploymentGroup = new gcp.networksecurity.MirroringDeploymentGroup(\"deployment_group\", {\n mirroringDeploymentGroupId: \"example-dg\",\n location: \"global\",\n network: producerNetwork.id,\n});\nconst endpointGroup = new gcp.networksecurity.MirroringEndpointGroup(\"endpoint_group\", {\n mirroringEndpointGroupId: \"example-eg\",\n location: \"global\",\n mirroringDeploymentGroup: deploymentGroup.id,\n});\nconst _default = new gcp.networksecurity.MirroringEndpointGroupAssociation(\"default\", {\n mirroringEndpointGroupAssociationId: \"example-ega\",\n location: \"global\",\n network: consumerNetwork.id,\n mirroringEndpointGroup: endpointGroup.id,\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_network = gcp.compute.Network(\"producer_network\",\n name=\"example-prod-network\",\n auto_create_subnetworks=False)\nconsumer_network = gcp.compute.Network(\"consumer_network\",\n name=\"example-cons-network\",\n auto_create_subnetworks=False)\ndeployment_group = gcp.networksecurity.MirroringDeploymentGroup(\"deployment_group\",\n mirroring_deployment_group_id=\"example-dg\",\n location=\"global\",\n network=producer_network.id)\nendpoint_group = gcp.networksecurity.MirroringEndpointGroup(\"endpoint_group\",\n mirroring_endpoint_group_id=\"example-eg\",\n location=\"global\",\n mirroring_deployment_group=deployment_group.id)\ndefault = gcp.networksecurity.MirroringEndpointGroupAssociation(\"default\",\n mirroring_endpoint_group_association_id=\"example-ega\",\n location=\"global\",\n network=consumer_network.id,\n mirroring_endpoint_group=endpoint_group.id,\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNetwork = new Gcp.Compute.Network(\"producer_network\", new()\n {\n Name = \"example-prod-network\",\n AutoCreateSubnetworks = false,\n });\n\n var consumerNetwork = new Gcp.Compute.Network(\"consumer_network\", new()\n {\n Name = \"example-cons-network\",\n AutoCreateSubnetworks = false,\n });\n\n var deploymentGroup = new Gcp.NetworkSecurity.MirroringDeploymentGroup(\"deployment_group\", new()\n {\n MirroringDeploymentGroupId = \"example-dg\",\n Location = \"global\",\n Network = producerNetwork.Id,\n });\n\n var endpointGroup = new Gcp.NetworkSecurity.MirroringEndpointGroup(\"endpoint_group\", new()\n {\n MirroringEndpointGroupId = \"example-eg\",\n Location = \"global\",\n MirroringDeploymentGroup = deploymentGroup.Id,\n });\n\n var @default = new Gcp.NetworkSecurity.MirroringEndpointGroupAssociation(\"default\", new()\n {\n MirroringEndpointGroupAssociationId = \"example-ega\",\n Location = \"global\",\n Network = consumerNetwork.Id,\n MirroringEndpointGroup = endpointGroup.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNetwork, err := compute.NewNetwork(ctx, \"producer_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"example-prod-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconsumerNetwork, err := compute.NewNetwork(ctx, \"consumer_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"example-cons-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdeploymentGroup, err := networksecurity.NewMirroringDeploymentGroup(ctx, \"deployment_group\", \u0026networksecurity.MirroringDeploymentGroupArgs{\n\t\t\tMirroringDeploymentGroupId: pulumi.String(\"example-dg\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tNetwork: producerNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tendpointGroup, err := networksecurity.NewMirroringEndpointGroup(ctx, \"endpoint_group\", \u0026networksecurity.MirroringEndpointGroupArgs{\n\t\t\tMirroringEndpointGroupId: pulumi.String(\"example-eg\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tMirroringDeploymentGroup: deploymentGroup.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networksecurity.NewMirroringEndpointGroupAssociation(ctx, \"default\", \u0026networksecurity.MirroringEndpointGroupAssociationArgs{\n\t\t\tMirroringEndpointGroupAssociationId: pulumi.String(\"example-ega\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tNetwork: consumerNetwork.ID(),\n\t\t\tMirroringEndpointGroup: endpointGroup.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.networksecurity.MirroringDeploymentGroup;\nimport com.pulumi.gcp.networksecurity.MirroringDeploymentGroupArgs;\nimport com.pulumi.gcp.networksecurity.MirroringEndpointGroup;\nimport com.pulumi.gcp.networksecurity.MirroringEndpointGroupArgs;\nimport com.pulumi.gcp.networksecurity.MirroringEndpointGroupAssociation;\nimport com.pulumi.gcp.networksecurity.MirroringEndpointGroupAssociationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNetwork = new Network(\"producerNetwork\", NetworkArgs.builder()\n .name(\"example-prod-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var consumerNetwork = new Network(\"consumerNetwork\", NetworkArgs.builder()\n .name(\"example-cons-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var deploymentGroup = new MirroringDeploymentGroup(\"deploymentGroup\", MirroringDeploymentGroupArgs.builder()\n .mirroringDeploymentGroupId(\"example-dg\")\n .location(\"global\")\n .network(producerNetwork.id())\n .build());\n\n var endpointGroup = new MirroringEndpointGroup(\"endpointGroup\", MirroringEndpointGroupArgs.builder()\n .mirroringEndpointGroupId(\"example-eg\")\n .location(\"global\")\n .mirroringDeploymentGroup(deploymentGroup.id())\n .build());\n\n var default_ = new MirroringEndpointGroupAssociation(\"default\", MirroringEndpointGroupAssociationArgs.builder()\n .mirroringEndpointGroupAssociationId(\"example-ega\")\n .location(\"global\")\n .network(consumerNetwork.id())\n .mirroringEndpointGroup(endpointGroup.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n producerNetwork:\n type: gcp:compute:Network\n name: producer_network\n properties:\n name: example-prod-network\n autoCreateSubnetworks: false\n consumerNetwork:\n type: gcp:compute:Network\n name: consumer_network\n properties:\n name: example-cons-network\n autoCreateSubnetworks: false\n deploymentGroup:\n type: gcp:networksecurity:MirroringDeploymentGroup\n name: deployment_group\n properties:\n mirroringDeploymentGroupId: example-dg\n location: global\n network: ${producerNetwork.id}\n endpointGroup:\n type: gcp:networksecurity:MirroringEndpointGroup\n name: endpoint_group\n properties:\n mirroringEndpointGroupId: example-eg\n location: global\n mirroringDeploymentGroup: ${deploymentGroup.id}\n default:\n type: gcp:networksecurity:MirroringEndpointGroupAssociation\n properties:\n mirroringEndpointGroupAssociationId: example-ega\n location: global\n network: ${consumerNetwork.id}\n mirroringEndpointGroup: ${endpointGroup.id}\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMirroringEndpointGroupAssociation can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}}`\n\n* `{{project}}/{{location}}/{{mirroring_endpoint_group_association_id}}`\n\n* `{{location}}/{{mirroring_endpoint_group_association_id}}`\n\nWhen using the `pulumi import` command, MirroringEndpointGroupAssociation can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{project}}/{{location}}/{{mirroring_endpoint_group_association_id}}\n```\n\n```sh\n$ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{location}}/{{mirroring_endpoint_group_association_id}}\n```\n\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringEndpointGroupAssociation`.\n\n\n- - -\n"
+ },
+ "locationsDetails": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:networksecurity/MirroringEndpointGroupAssociationLocationsDetail:MirroringEndpointGroupAssociationLocationsDetail"
+ },
+ "description": "Output only. The list of locations that this association is in and its details.\nStructure is documented below.\n"
+ },
+ "mirroringEndpointGroup": {
+ "type": "string",
+ "description": "Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format\nis:\n`projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}`\n"
+ },
+ "mirroringEndpointGroupAssociationId": {
+ "type": "string",
+ "description": "Optional. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_endpoint_group_association_id from the method_signature of Create\nRPC\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Immutable. Identifier. The name of the MirroringEndpointGroupAssociation.\n"
+ },
+ "network": {
+ "type": "string",
+ "description": "Required. Immutable. The VPC network associated. Format:\nprojects/{project}/global/networks/{network}.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "reconciling": {
+ "type": "boolean",
+ "description": "Output only. Whether reconciling is in progress, recommended per\nhttps://google.aip.dev/128.\n"
+ },
+ "state": {
+ "type": "string",
+ "description": "(Output)\nOutput only. The association state in this location.\nPossible values:\nSTATE_UNSPECIFIED\nACTIVE\nOUT_OF_SYNC\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Update time stamp\n"
+ }
+ },
+ "required": [
+ "createTime",
+ "effectiveLabels",
+ "location",
+ "locationsDetails",
+ "mirroringEndpointGroup",
+ "name",
+ "network",
+ "project",
+ "reconciling",
+ "state",
+ "pulumiLabels",
+ "updateTime"
+ ],
+ "inputProperties": {
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringEndpointGroupAssociation`.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringEndpointGroup": {
+ "type": "string",
+ "description": "Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format\nis:\n`projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}`\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringEndpointGroupAssociationId": {
+ "type": "string",
+ "description": "Optional. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_endpoint_group_association_id from the method_signature of Create\nRPC\n",
+ "willReplaceOnChanges": true
+ },
+ "network": {
+ "type": "string",
+ "description": "Required. Immutable. The VPC network associated. Format:\nprojects/{project}/global/networks/{network}.\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "location",
+ "mirroringEndpointGroup",
+ "network"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering MirroringEndpointGroupAssociation resources.\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Create time stamp\n"
+ },
+ "effectiveLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n",
+ "secret": true
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "Optional. Labels as key value pairs\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122. See documentation for resource type `networksecurity.googleapis.com/MirroringEndpointGroupAssociation`.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "locationsDetails": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:networksecurity/MirroringEndpointGroupAssociationLocationsDetail:MirroringEndpointGroupAssociationLocationsDetail"
+ },
+ "description": "Output only. The list of locations that this association is in and its details.\nStructure is documented below.\n"
+ },
+ "mirroringEndpointGroup": {
+ "type": "string",
+ "description": "Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format\nis:\n`projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}`\n",
+ "willReplaceOnChanges": true
+ },
+ "mirroringEndpointGroupAssociationId": {
+ "type": "string",
+ "description": "Optional. Id of the requesting object\nIf auto-generating Id server-side, remove this field and\nmirroring_endpoint_group_association_id from the method_signature of Create\nRPC\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Immutable. Identifier. The name of the MirroringEndpointGroupAssociation.\n"
+ },
+ "network": {
+ "type": "string",
+ "description": "Required. Immutable. The VPC network associated. Format:\nprojects/{project}/global/networks/{network}.\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "pulumiLabels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ },
+ "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n",
+ "secret": true
+ },
+ "reconciling": {
+ "type": "boolean",
+ "description": "Output only. Whether reconciling is in progress, recommended per\nhttps://google.aip.dev/128.\n"
+ },
+ "state": {
+ "type": "string",
+ "description": "(Output)\nOutput only. The association state in this location.\nPossible values:\nSTATE_UNSPECIFIED\nACTIVE\nOUT_OF_SYNC\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. [Output only] Update time stamp\n"
+ }
+ },
+ "type": "object"
+ }
+ },
"gcp:networksecurity/securityProfile:SecurityProfile": {
"description": "A security profile defines the behavior associated to a profile type.\n\n\nTo get more information about SecurityProfile, see:\n\n* [API documentation](https://cloud.google.com/firewall/docs/reference/network-security/rest/v1/organizations.locations.securityProfiles)\n* How-to Guides\n * [Create and manage security profiles](https://cloud.google.com/firewall/docs/configure-security-profiles)\n\n## Example Usage\n\n### Network Security Security Profile Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.networksecurity.SecurityProfile(\"default\", {\n name: \"my-security-profile\",\n parent: \"organizations/123456789\",\n description: \"my description\",\n type: \"THREAT_PREVENTION\",\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.networksecurity.SecurityProfile(\"default\",\n name=\"my-security-profile\",\n parent=\"organizations/123456789\",\n description=\"my description\",\n type=\"THREAT_PREVENTION\",\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.NetworkSecurity.SecurityProfile(\"default\", new()\n {\n Name = \"my-security-profile\",\n Parent = \"organizations/123456789\",\n Description = \"my description\",\n Type = \"THREAT_PREVENTION\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networksecurity.NewSecurityProfile(ctx, \"default\", \u0026networksecurity.SecurityProfileArgs{\n\t\t\tName: pulumi.String(\"my-security-profile\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tType: pulumi.String(\"THREAT_PREVENTION\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networksecurity.SecurityProfile;\nimport com.pulumi.gcp.networksecurity.SecurityProfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new SecurityProfile(\"default\", SecurityProfileArgs.builder()\n .name(\"my-security-profile\")\n .parent(\"organizations/123456789\")\n .description(\"my description\")\n .type(\"THREAT_PREVENTION\")\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:networksecurity:SecurityProfile\n properties:\n name: my-security-profile\n parent: organizations/123456789\n description: my description\n type: THREAT_PREVENTION\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Security Security Profile Overrides\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.networksecurity.SecurityProfile(\"default\", {\n name: \"my-security-profile\",\n parent: \"organizations/123456789\",\n description: \"my description\",\n type: \"THREAT_PREVENTION\",\n threatPreventionProfile: {\n severityOverrides: [\n {\n action: \"ALLOW\",\n severity: \"INFORMATIONAL\",\n },\n {\n action: \"DENY\",\n severity: \"HIGH\",\n },\n ],\n threatOverrides: [{\n action: \"ALLOW\",\n threatId: \"280647\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.networksecurity.SecurityProfile(\"default\",\n name=\"my-security-profile\",\n parent=\"organizations/123456789\",\n description=\"my description\",\n type=\"THREAT_PREVENTION\",\n threat_prevention_profile={\n \"severity_overrides\": [\n {\n \"action\": \"ALLOW\",\n \"severity\": \"INFORMATIONAL\",\n },\n {\n \"action\": \"DENY\",\n \"severity\": \"HIGH\",\n },\n ],\n \"threat_overrides\": [{\n \"action\": \"ALLOW\",\n \"threat_id\": \"280647\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.NetworkSecurity.SecurityProfile(\"default\", new()\n {\n Name = \"my-security-profile\",\n Parent = \"organizations/123456789\",\n Description = \"my description\",\n Type = \"THREAT_PREVENTION\",\n ThreatPreventionProfile = new Gcp.NetworkSecurity.Inputs.SecurityProfileThreatPreventionProfileArgs\n {\n SeverityOverrides = new[]\n {\n new Gcp.NetworkSecurity.Inputs.SecurityProfileThreatPreventionProfileSeverityOverrideArgs\n {\n Action = \"ALLOW\",\n Severity = \"INFORMATIONAL\",\n },\n new Gcp.NetworkSecurity.Inputs.SecurityProfileThreatPreventionProfileSeverityOverrideArgs\n {\n Action = \"DENY\",\n Severity = \"HIGH\",\n },\n },\n ThreatOverrides = new[]\n {\n new Gcp.NetworkSecurity.Inputs.SecurityProfileThreatPreventionProfileThreatOverrideArgs\n {\n Action = \"ALLOW\",\n ThreatId = \"280647\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networksecurity.NewSecurityProfile(ctx, \"default\", \u0026networksecurity.SecurityProfileArgs{\n\t\t\tName: pulumi.String(\"my-security-profile\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tType: pulumi.String(\"THREAT_PREVENTION\"),\n\t\t\tThreatPreventionProfile: \u0026networksecurity.SecurityProfileThreatPreventionProfileArgs{\n\t\t\t\tSeverityOverrides: networksecurity.SecurityProfileThreatPreventionProfileSeverityOverrideArray{\n\t\t\t\t\t\u0026networksecurity.SecurityProfileThreatPreventionProfileSeverityOverrideArgs{\n\t\t\t\t\t\tAction: pulumi.String(\"ALLOW\"),\n\t\t\t\t\t\tSeverity: pulumi.String(\"INFORMATIONAL\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026networksecurity.SecurityProfileThreatPreventionProfileSeverityOverrideArgs{\n\t\t\t\t\t\tAction: pulumi.String(\"DENY\"),\n\t\t\t\t\t\tSeverity: pulumi.String(\"HIGH\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tThreatOverrides: networksecurity.SecurityProfileThreatPreventionProfileThreatOverrideArray{\n\t\t\t\t\t\u0026networksecurity.SecurityProfileThreatPreventionProfileThreatOverrideArgs{\n\t\t\t\t\t\tAction: pulumi.String(\"ALLOW\"),\n\t\t\t\t\t\tThreatId: pulumi.String(\"280647\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networksecurity.SecurityProfile;\nimport com.pulumi.gcp.networksecurity.SecurityProfileArgs;\nimport com.pulumi.gcp.networksecurity.inputs.SecurityProfileThreatPreventionProfileArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var default_ = new SecurityProfile(\"default\", SecurityProfileArgs.builder()\n .name(\"my-security-profile\")\n .parent(\"organizations/123456789\")\n .description(\"my description\")\n .type(\"THREAT_PREVENTION\")\n .threatPreventionProfile(SecurityProfileThreatPreventionProfileArgs.builder()\n .severityOverrides( \n SecurityProfileThreatPreventionProfileSeverityOverrideArgs.builder()\n .action(\"ALLOW\")\n .severity(\"INFORMATIONAL\")\n .build(),\n SecurityProfileThreatPreventionProfileSeverityOverrideArgs.builder()\n .action(\"DENY\")\n .severity(\"HIGH\")\n .build())\n .threatOverrides(SecurityProfileThreatPreventionProfileThreatOverrideArgs.builder()\n .action(\"ALLOW\")\n .threatId(\"280647\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:networksecurity:SecurityProfile\n properties:\n name: my-security-profile\n parent: organizations/123456789\n description: my description\n type: THREAT_PREVENTION\n threatPreventionProfile:\n severityOverrides:\n - action: ALLOW\n severity: INFORMATIONAL\n - action: DENY\n severity: HIGH\n threatOverrides:\n - action: ALLOW\n threatId: '280647'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSecurityProfile can be imported using any of these accepted formats:\n\n* `{{parent}}/locations/{{location}}/securityProfiles/{{name}}`\n\nWhen using the `pulumi import` command, SecurityProfile can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networksecurity/securityProfile:SecurityProfile default {{parent}}/locations/{{location}}/securityProfiles/{{name}}\n```\n\n",
"properties": {
@@ -248546,7 +251345,7 @@
}
},
"gcp:oracledatabase/autonomousDatabase:AutonomousDatabase": {
- "description": "An AutonomousDatabase resource.\n\n\nTo get more information about AutonomousDatabase, see:\n\n* [API documentation](https://cloud.google.com/oracle/database/docs/reference/rest/v1/projects.locations.autonomousDatabases)\n* How-to Guides\n * [Create Autonomous databases](https://cloud.google.com/oracle/database/docs/create-databases)\n\n## Example Usage\n\n### Oracledatabase Autonomous Database Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getNetwork({\n name: \"new\",\n project: \"my-project\",\n});\nconst myADB = new gcp.oracledatabase.AutonomousDatabase(\"myADB\", {\n autonomousDatabaseId: \"my-instance\",\n location: \"us-east4\",\n project: \"my-project\",\n database: \"testdb\",\n adminPassword: \"123Abpassword\",\n network: _default.then(_default =\u003e _default.id),\n cidr: \"10.5.0.0/24\",\n properties: {\n computeCount: 2,\n dataStorageSizeTb: 1,\n dbVersion: \"19c\",\n dbWorkload: \"OLTP\",\n licenseType: \"LICENSE_INCLUDED\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_network(name=\"new\",\n project=\"my-project\")\nmy_adb = gcp.oracledatabase.AutonomousDatabase(\"myADB\",\n autonomous_database_id=\"my-instance\",\n location=\"us-east4\",\n project=\"my-project\",\n database=\"testdb\",\n admin_password=\"123Abpassword\",\n network=default.id,\n cidr=\"10.5.0.0/24\",\n properties={\n \"compute_count\": 2,\n \"data_storage_size_tb\": 1,\n \"db_version\": \"19c\",\n \"db_workload\": \"OLTP\",\n \"license_type\": \"LICENSE_INCLUDED\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"new\",\n Project = \"my-project\",\n });\n\n var myADB = new Gcp.OracleDatabase.AutonomousDatabase(\"myADB\", new()\n {\n AutonomousDatabaseId = \"my-instance\",\n Location = \"us-east4\",\n Project = \"my-project\",\n Database = \"testdb\",\n AdminPassword = \"123Abpassword\",\n Network = @default.Apply(@default =\u003e @default.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Cidr = \"10.5.0.0/24\",\n Properties = new Gcp.OracleDatabase.Inputs.AutonomousDatabasePropertiesArgs\n {\n ComputeCount = 2,\n DataStorageSizeTb = 1,\n DbVersion = \"19c\",\n DbWorkload = \"OLTP\",\n LicenseType = \"LICENSE_INCLUDED\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"new\",\n\t\t\tProject: pulumi.StringRef(\"my-project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oracledatabase.NewAutonomousDatabase(ctx, \"myADB\", \u0026oracledatabase.AutonomousDatabaseArgs{\n\t\t\tAutonomousDatabaseId: pulumi.String(\"my-instance\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tDatabase: pulumi.String(\"testdb\"),\n\t\t\tAdminPassword: pulumi.String(\"123Abpassword\"),\n\t\t\tNetwork: pulumi.String(_default.Id),\n\t\t\tCidr: pulumi.String(\"10.5.0.0/24\"),\n\t\t\tProperties: \u0026oracledatabase.AutonomousDatabasePropertiesArgs{\n\t\t\t\tComputeCount: pulumi.Float64(2),\n\t\t\t\tDataStorageSizeTb: pulumi.Int(1),\n\t\t\t\tDbVersion: pulumi.String(\"19c\"),\n\t\t\t\tDbWorkload: pulumi.String(\"OLTP\"),\n\t\t\t\tLicenseType: pulumi.String(\"LICENSE_INCLUDED\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.oracledatabase.AutonomousDatabase;\nimport com.pulumi.gcp.oracledatabase.AutonomousDatabaseArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.AutonomousDatabasePropertiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"new\")\n .project(\"my-project\")\n .build());\n\n var myADB = new AutonomousDatabase(\"myADB\", AutonomousDatabaseArgs.builder()\n .autonomousDatabaseId(\"my-instance\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .database(\"testdb\")\n .adminPassword(\"123Abpassword\")\n .network(default_.id())\n .cidr(\"10.5.0.0/24\")\n .properties(AutonomousDatabasePropertiesArgs.builder()\n .computeCount(\"2\")\n .dataStorageSizeTb(\"1\")\n .dbVersion(\"19c\")\n .dbWorkload(\"OLTP\")\n .licenseType(\"LICENSE_INCLUDED\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myADB:\n type: gcp:oracledatabase:AutonomousDatabase\n properties:\n autonomousDatabaseId: my-instance\n location: us-east4\n project: my-project\n database: testdb\n adminPassword: 123Abpassword\n network: ${default.id}\n cidr: 10.5.0.0/24\n properties:\n computeCount: '2'\n dataStorageSizeTb: '1'\n dbVersion: 19c\n dbWorkload: OLTP\n licenseType: LICENSE_INCLUDED\nvariables:\n default:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: new\n project: my-project\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Oracledatabase Autonomous Database Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getNetwork({\n name: \"new\",\n project: \"my-project\",\n});\nconst myADB = new gcp.oracledatabase.AutonomousDatabase(\"myADB\", {\n autonomousDatabaseId: \"my-instance\",\n location: \"us-east4\",\n project: \"my-project\",\n displayName: \"autonomousDatabase displayname\",\n database: \"testdatabase\",\n adminPassword: \"123Abpassword\",\n network: _default.then(_default =\u003e _default.id),\n cidr: \"10.5.0.0/24\",\n labels: {\n \"label-one\": \"value-one\",\n },\n properties: {\n computeCount: 2,\n dataStorageSizeGb: 48,\n dbVersion: \"19c\",\n dbEdition: \"STANDARD_EDITION\",\n dbWorkload: \"OLTP\",\n isAutoScalingEnabled: true,\n licenseType: \"BRING_YOUR_OWN_LICENSE\",\n backupRetentionPeriodDays: 60,\n characterSet: \"AL32UTF8\",\n isStorageAutoScalingEnabled: false,\n maintenanceScheduleType: \"REGULAR\",\n mtlsConnectionRequired: false,\n nCharacterSet: \"AL16UTF16\",\n operationsInsightsState: \"NOT_ENABLED\",\n customerContacts: [{\n email: \"xyz@example.com\",\n }],\n privateEndpointIp: \"10.5.0.11\",\n privateEndpointLabel: \"testhost\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_network(name=\"new\",\n project=\"my-project\")\nmy_adb = gcp.oracledatabase.AutonomousDatabase(\"myADB\",\n autonomous_database_id=\"my-instance\",\n location=\"us-east4\",\n project=\"my-project\",\n display_name=\"autonomousDatabase displayname\",\n database=\"testdatabase\",\n admin_password=\"123Abpassword\",\n network=default.id,\n cidr=\"10.5.0.0/24\",\n labels={\n \"label-one\": \"value-one\",\n },\n properties={\n \"compute_count\": 2,\n \"data_storage_size_gb\": 48,\n \"db_version\": \"19c\",\n \"db_edition\": \"STANDARD_EDITION\",\n \"db_workload\": \"OLTP\",\n \"is_auto_scaling_enabled\": True,\n \"license_type\": \"BRING_YOUR_OWN_LICENSE\",\n \"backup_retention_period_days\": 60,\n \"character_set\": \"AL32UTF8\",\n \"is_storage_auto_scaling_enabled\": False,\n \"maintenance_schedule_type\": \"REGULAR\",\n \"mtls_connection_required\": False,\n \"n_character_set\": \"AL16UTF16\",\n \"operations_insights_state\": \"NOT_ENABLED\",\n \"customer_contacts\": [{\n \"email\": \"xyz@example.com\",\n }],\n \"private_endpoint_ip\": \"10.5.0.11\",\n \"private_endpoint_label\": \"testhost\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"new\",\n Project = \"my-project\",\n });\n\n var myADB = new Gcp.OracleDatabase.AutonomousDatabase(\"myADB\", new()\n {\n AutonomousDatabaseId = \"my-instance\",\n Location = \"us-east4\",\n Project = \"my-project\",\n DisplayName = \"autonomousDatabase displayname\",\n Database = \"testdatabase\",\n AdminPassword = \"123Abpassword\",\n Network = @default.Apply(@default =\u003e @default.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Cidr = \"10.5.0.0/24\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Properties = new Gcp.OracleDatabase.Inputs.AutonomousDatabasePropertiesArgs\n {\n ComputeCount = 2,\n DataStorageSizeGb = 48,\n DbVersion = \"19c\",\n DbEdition = \"STANDARD_EDITION\",\n DbWorkload = \"OLTP\",\n IsAutoScalingEnabled = true,\n LicenseType = \"BRING_YOUR_OWN_LICENSE\",\n BackupRetentionPeriodDays = 60,\n CharacterSet = \"AL32UTF8\",\n IsStorageAutoScalingEnabled = false,\n MaintenanceScheduleType = \"REGULAR\",\n MtlsConnectionRequired = false,\n NCharacterSet = \"AL16UTF16\",\n OperationsInsightsState = \"NOT_ENABLED\",\n CustomerContacts = new[]\n {\n new Gcp.OracleDatabase.Inputs.AutonomousDatabasePropertiesCustomerContactArgs\n {\n Email = \"xyz@example.com\",\n },\n },\n PrivateEndpointIp = \"10.5.0.11\",\n PrivateEndpointLabel = \"testhost\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"new\",\n\t\t\tProject: pulumi.StringRef(\"my-project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oracledatabase.NewAutonomousDatabase(ctx, \"myADB\", \u0026oracledatabase.AutonomousDatabaseArgs{\n\t\t\tAutonomousDatabaseId: pulumi.String(\"my-instance\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tDisplayName: pulumi.String(\"autonomousDatabase displayname\"),\n\t\t\tDatabase: pulumi.String(\"testdatabase\"),\n\t\t\tAdminPassword: pulumi.String(\"123Abpassword\"),\n\t\t\tNetwork: pulumi.String(_default.Id),\n\t\t\tCidr: pulumi.String(\"10.5.0.0/24\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tProperties: \u0026oracledatabase.AutonomousDatabasePropertiesArgs{\n\t\t\t\tComputeCount: pulumi.Float64(2),\n\t\t\t\tDataStorageSizeGb: pulumi.Int(48),\n\t\t\t\tDbVersion: pulumi.String(\"19c\"),\n\t\t\t\tDbEdition: pulumi.String(\"STANDARD_EDITION\"),\n\t\t\t\tDbWorkload: pulumi.String(\"OLTP\"),\n\t\t\t\tIsAutoScalingEnabled: pulumi.Bool(true),\n\t\t\t\tLicenseType: pulumi.String(\"BRING_YOUR_OWN_LICENSE\"),\n\t\t\t\tBackupRetentionPeriodDays: pulumi.Int(60),\n\t\t\t\tCharacterSet: pulumi.String(\"AL32UTF8\"),\n\t\t\t\tIsStorageAutoScalingEnabled: pulumi.Bool(false),\n\t\t\t\tMaintenanceScheduleType: pulumi.String(\"REGULAR\"),\n\t\t\t\tMtlsConnectionRequired: pulumi.Bool(false),\n\t\t\t\tNCharacterSet: pulumi.String(\"AL16UTF16\"),\n\t\t\t\tOperationsInsightsState: pulumi.String(\"NOT_ENABLED\"),\n\t\t\t\tCustomerContacts: oracledatabase.AutonomousDatabasePropertiesCustomerContactArray{\n\t\t\t\t\t\u0026oracledatabase.AutonomousDatabasePropertiesCustomerContactArgs{\n\t\t\t\t\t\tEmail: pulumi.String(\"xyz@example.com\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPrivateEndpointIp: pulumi.String(\"10.5.0.11\"),\n\t\t\t\tPrivateEndpointLabel: pulumi.String(\"testhost\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.oracledatabase.AutonomousDatabase;\nimport com.pulumi.gcp.oracledatabase.AutonomousDatabaseArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.AutonomousDatabasePropertiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"new\")\n .project(\"my-project\")\n .build());\n\n var myADB = new AutonomousDatabase(\"myADB\", AutonomousDatabaseArgs.builder()\n .autonomousDatabaseId(\"my-instance\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .displayName(\"autonomousDatabase displayname\")\n .database(\"testdatabase\")\n .adminPassword(\"123Abpassword\")\n .network(default_.id())\n .cidr(\"10.5.0.0/24\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .properties(AutonomousDatabasePropertiesArgs.builder()\n .computeCount(\"2\")\n .dataStorageSizeGb(\"48\")\n .dbVersion(\"19c\")\n .dbEdition(\"STANDARD_EDITION\")\n .dbWorkload(\"OLTP\")\n .isAutoScalingEnabled(\"true\")\n .licenseType(\"BRING_YOUR_OWN_LICENSE\")\n .backupRetentionPeriodDays(\"60\")\n .characterSet(\"AL32UTF8\")\n .isStorageAutoScalingEnabled(\"false\")\n .maintenanceScheduleType(\"REGULAR\")\n .mtlsConnectionRequired(\"false\")\n .nCharacterSet(\"AL16UTF16\")\n .operationsInsightsState(\"NOT_ENABLED\")\n .customerContacts(AutonomousDatabasePropertiesCustomerContactArgs.builder()\n .email(\"xyz@example.com\")\n .build())\n .privateEndpointIp(\"10.5.0.11\")\n .privateEndpointLabel(\"testhost\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myADB:\n type: gcp:oracledatabase:AutonomousDatabase\n properties:\n autonomousDatabaseId: my-instance\n location: us-east4\n project: my-project\n displayName: autonomousDatabase displayname\n database: testdatabase\n adminPassword: 123Abpassword\n network: ${default.id}\n cidr: 10.5.0.0/24\n labels:\n label-one: value-one\n properties:\n computeCount: '2'\n dataStorageSizeGb: '48'\n dbVersion: 19c\n dbEdition: STANDARD_EDITION\n dbWorkload: OLTP\n isAutoScalingEnabled: 'true'\n licenseType: BRING_YOUR_OWN_LICENSE\n backupRetentionPeriodDays: '60'\n characterSet: AL32UTF8\n isStorageAutoScalingEnabled: 'false'\n maintenanceScheduleType: REGULAR\n mtlsConnectionRequired: 'false'\n nCharacterSet: AL16UTF16\n operationsInsightsState: NOT_ENABLED\n customerContacts:\n - email: xyz@example.com\n privateEndpointIp: 10.5.0.11\n privateEndpointLabel: testhost\nvariables:\n default:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: new\n project: my-project\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAutonomousDatabase can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/autonomousDatabases/{{autonomous_database_id}}`\n\n* `{{project}}/{{location}}/{{autonomous_database_id}}`\n\n* `{{location}}/{{autonomous_database_id}}`\n\nWhen using the `pulumi import` command, AutonomousDatabase can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:oracledatabase/autonomousDatabase:AutonomousDatabase default projects/{{project}}/locations/{{location}}/autonomousDatabases/{{autonomous_database_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/autonomousDatabase:AutonomousDatabase default {{project}}/{{location}}/{{autonomous_database_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/autonomousDatabase:AutonomousDatabase default {{location}}/{{autonomous_database_id}}\n```\n\n",
+ "description": "An AutonomousDatabase resource.\n\n\nTo get more information about AutonomousDatabase, see:\n\n* [API documentation](https://cloud.google.com/oracle/database/docs/reference/rest/v1/projects.locations.autonomousDatabases)\n* How-to Guides\n * [Create Autonomous databases](https://cloud.google.com/oracle/database/docs/create-databases)\n\n## Example Usage\n\n### Oracledatabase Autonomous Database Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getNetwork({\n name: \"new\",\n project: \"my-project\",\n});\nconst myADB = new gcp.oracledatabase.AutonomousDatabase(\"myADB\", {\n autonomousDatabaseId: \"my-instance\",\n location: \"us-east4\",\n project: \"my-project\",\n database: \"testdb\",\n adminPassword: \"123Abpassword\",\n network: _default.then(_default =\u003e _default.id),\n cidr: \"10.5.0.0/24\",\n properties: {\n computeCount: 2,\n dataStorageSizeTb: 1,\n dbVersion: \"19c\",\n dbWorkload: \"OLTP\",\n licenseType: \"LICENSE_INCLUDED\",\n },\n deletionProtection: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_network(name=\"new\",\n project=\"my-project\")\nmy_adb = gcp.oracledatabase.AutonomousDatabase(\"myADB\",\n autonomous_database_id=\"my-instance\",\n location=\"us-east4\",\n project=\"my-project\",\n database=\"testdb\",\n admin_password=\"123Abpassword\",\n network=default.id,\n cidr=\"10.5.0.0/24\",\n properties={\n \"compute_count\": 2,\n \"data_storage_size_tb\": 1,\n \"db_version\": \"19c\",\n \"db_workload\": \"OLTP\",\n \"license_type\": \"LICENSE_INCLUDED\",\n },\n deletion_protection=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"new\",\n Project = \"my-project\",\n });\n\n var myADB = new Gcp.OracleDatabase.AutonomousDatabase(\"myADB\", new()\n {\n AutonomousDatabaseId = \"my-instance\",\n Location = \"us-east4\",\n Project = \"my-project\",\n Database = \"testdb\",\n AdminPassword = \"123Abpassword\",\n Network = @default.Apply(@default =\u003e @default.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Cidr = \"10.5.0.0/24\",\n Properties = new Gcp.OracleDatabase.Inputs.AutonomousDatabasePropertiesArgs\n {\n ComputeCount = 2,\n DataStorageSizeTb = 1,\n DbVersion = \"19c\",\n DbWorkload = \"OLTP\",\n LicenseType = \"LICENSE_INCLUDED\",\n },\n DeletionProtection = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"new\",\n\t\t\tProject: pulumi.StringRef(\"my-project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oracledatabase.NewAutonomousDatabase(ctx, \"myADB\", \u0026oracledatabase.AutonomousDatabaseArgs{\n\t\t\tAutonomousDatabaseId: pulumi.String(\"my-instance\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tDatabase: pulumi.String(\"testdb\"),\n\t\t\tAdminPassword: pulumi.String(\"123Abpassword\"),\n\t\t\tNetwork: pulumi.String(_default.Id),\n\t\t\tCidr: pulumi.String(\"10.5.0.0/24\"),\n\t\t\tProperties: \u0026oracledatabase.AutonomousDatabasePropertiesArgs{\n\t\t\t\tComputeCount: pulumi.Float64(2),\n\t\t\t\tDataStorageSizeTb: pulumi.Int(1),\n\t\t\t\tDbVersion: pulumi.String(\"19c\"),\n\t\t\t\tDbWorkload: pulumi.String(\"OLTP\"),\n\t\t\t\tLicenseType: pulumi.String(\"LICENSE_INCLUDED\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.oracledatabase.AutonomousDatabase;\nimport com.pulumi.gcp.oracledatabase.AutonomousDatabaseArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.AutonomousDatabasePropertiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"new\")\n .project(\"my-project\")\n .build());\n\n var myADB = new AutonomousDatabase(\"myADB\", AutonomousDatabaseArgs.builder()\n .autonomousDatabaseId(\"my-instance\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .database(\"testdb\")\n .adminPassword(\"123Abpassword\")\n .network(default_.id())\n .cidr(\"10.5.0.0/24\")\n .properties(AutonomousDatabasePropertiesArgs.builder()\n .computeCount(\"2\")\n .dataStorageSizeTb(\"1\")\n .dbVersion(\"19c\")\n .dbWorkload(\"OLTP\")\n .licenseType(\"LICENSE_INCLUDED\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myADB:\n type: gcp:oracledatabase:AutonomousDatabase\n properties:\n autonomousDatabaseId: my-instance\n location: us-east4\n project: my-project\n database: testdb\n adminPassword: 123Abpassword\n network: ${default.id}\n cidr: 10.5.0.0/24\n properties:\n computeCount: '2'\n dataStorageSizeTb: '1'\n dbVersion: 19c\n dbWorkload: OLTP\n licenseType: LICENSE_INCLUDED\n deletionProtection: 'true'\nvariables:\n default:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: new\n project: my-project\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Oracledatabase Autonomous Database Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getNetwork({\n name: \"new\",\n project: \"my-project\",\n});\nconst myADB = new gcp.oracledatabase.AutonomousDatabase(\"myADB\", {\n autonomousDatabaseId: \"my-instance\",\n location: \"us-east4\",\n project: \"my-project\",\n displayName: \"autonomousDatabase displayname\",\n database: \"testdatabase\",\n adminPassword: \"123Abpassword\",\n network: _default.then(_default =\u003e _default.id),\n cidr: \"10.5.0.0/24\",\n labels: {\n \"label-one\": \"value-one\",\n },\n properties: {\n computeCount: 2,\n dataStorageSizeGb: 48,\n dbVersion: \"19c\",\n dbEdition: \"STANDARD_EDITION\",\n dbWorkload: \"OLTP\",\n isAutoScalingEnabled: true,\n licenseType: \"BRING_YOUR_OWN_LICENSE\",\n backupRetentionPeriodDays: 60,\n characterSet: \"AL32UTF8\",\n isStorageAutoScalingEnabled: false,\n maintenanceScheduleType: \"REGULAR\",\n mtlsConnectionRequired: false,\n nCharacterSet: \"AL16UTF16\",\n operationsInsightsState: \"NOT_ENABLED\",\n customerContacts: [{\n email: \"xyz@example.com\",\n }],\n privateEndpointIp: \"10.5.0.11\",\n privateEndpointLabel: \"testhost\",\n },\n deletionProtection: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_network(name=\"new\",\n project=\"my-project\")\nmy_adb = gcp.oracledatabase.AutonomousDatabase(\"myADB\",\n autonomous_database_id=\"my-instance\",\n location=\"us-east4\",\n project=\"my-project\",\n display_name=\"autonomousDatabase displayname\",\n database=\"testdatabase\",\n admin_password=\"123Abpassword\",\n network=default.id,\n cidr=\"10.5.0.0/24\",\n labels={\n \"label-one\": \"value-one\",\n },\n properties={\n \"compute_count\": 2,\n \"data_storage_size_gb\": 48,\n \"db_version\": \"19c\",\n \"db_edition\": \"STANDARD_EDITION\",\n \"db_workload\": \"OLTP\",\n \"is_auto_scaling_enabled\": True,\n \"license_type\": \"BRING_YOUR_OWN_LICENSE\",\n \"backup_retention_period_days\": 60,\n \"character_set\": \"AL32UTF8\",\n \"is_storage_auto_scaling_enabled\": False,\n \"maintenance_schedule_type\": \"REGULAR\",\n \"mtls_connection_required\": False,\n \"n_character_set\": \"AL16UTF16\",\n \"operations_insights_state\": \"NOT_ENABLED\",\n \"customer_contacts\": [{\n \"email\": \"xyz@example.com\",\n }],\n \"private_endpoint_ip\": \"10.5.0.11\",\n \"private_endpoint_label\": \"testhost\",\n },\n deletion_protection=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"new\",\n Project = \"my-project\",\n });\n\n var myADB = new Gcp.OracleDatabase.AutonomousDatabase(\"myADB\", new()\n {\n AutonomousDatabaseId = \"my-instance\",\n Location = \"us-east4\",\n Project = \"my-project\",\n DisplayName = \"autonomousDatabase displayname\",\n Database = \"testdatabase\",\n AdminPassword = \"123Abpassword\",\n Network = @default.Apply(@default =\u003e @default.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Cidr = \"10.5.0.0/24\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Properties = new Gcp.OracleDatabase.Inputs.AutonomousDatabasePropertiesArgs\n {\n ComputeCount = 2,\n DataStorageSizeGb = 48,\n DbVersion = \"19c\",\n DbEdition = \"STANDARD_EDITION\",\n DbWorkload = \"OLTP\",\n IsAutoScalingEnabled = true,\n LicenseType = \"BRING_YOUR_OWN_LICENSE\",\n BackupRetentionPeriodDays = 60,\n CharacterSet = \"AL32UTF8\",\n IsStorageAutoScalingEnabled = false,\n MaintenanceScheduleType = \"REGULAR\",\n MtlsConnectionRequired = false,\n NCharacterSet = \"AL16UTF16\",\n OperationsInsightsState = \"NOT_ENABLED\",\n CustomerContacts = new[]\n {\n new Gcp.OracleDatabase.Inputs.AutonomousDatabasePropertiesCustomerContactArgs\n {\n Email = \"xyz@example.com\",\n },\n },\n PrivateEndpointIp = \"10.5.0.11\",\n PrivateEndpointLabel = \"testhost\",\n },\n DeletionProtection = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"new\",\n\t\t\tProject: pulumi.StringRef(\"my-project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oracledatabase.NewAutonomousDatabase(ctx, \"myADB\", \u0026oracledatabase.AutonomousDatabaseArgs{\n\t\t\tAutonomousDatabaseId: pulumi.String(\"my-instance\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tDisplayName: pulumi.String(\"autonomousDatabase displayname\"),\n\t\t\tDatabase: pulumi.String(\"testdatabase\"),\n\t\t\tAdminPassword: pulumi.String(\"123Abpassword\"),\n\t\t\tNetwork: pulumi.String(_default.Id),\n\t\t\tCidr: pulumi.String(\"10.5.0.0/24\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tProperties: \u0026oracledatabase.AutonomousDatabasePropertiesArgs{\n\t\t\t\tComputeCount: pulumi.Float64(2),\n\t\t\t\tDataStorageSizeGb: pulumi.Int(48),\n\t\t\t\tDbVersion: pulumi.String(\"19c\"),\n\t\t\t\tDbEdition: pulumi.String(\"STANDARD_EDITION\"),\n\t\t\t\tDbWorkload: pulumi.String(\"OLTP\"),\n\t\t\t\tIsAutoScalingEnabled: pulumi.Bool(true),\n\t\t\t\tLicenseType: pulumi.String(\"BRING_YOUR_OWN_LICENSE\"),\n\t\t\t\tBackupRetentionPeriodDays: pulumi.Int(60),\n\t\t\t\tCharacterSet: pulumi.String(\"AL32UTF8\"),\n\t\t\t\tIsStorageAutoScalingEnabled: pulumi.Bool(false),\n\t\t\t\tMaintenanceScheduleType: pulumi.String(\"REGULAR\"),\n\t\t\t\tMtlsConnectionRequired: pulumi.Bool(false),\n\t\t\t\tNCharacterSet: pulumi.String(\"AL16UTF16\"),\n\t\t\t\tOperationsInsightsState: pulumi.String(\"NOT_ENABLED\"),\n\t\t\t\tCustomerContacts: oracledatabase.AutonomousDatabasePropertiesCustomerContactArray{\n\t\t\t\t\t\u0026oracledatabase.AutonomousDatabasePropertiesCustomerContactArgs{\n\t\t\t\t\t\tEmail: pulumi.String(\"xyz@example.com\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPrivateEndpointIp: pulumi.String(\"10.5.0.11\"),\n\t\t\t\tPrivateEndpointLabel: pulumi.String(\"testhost\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.oracledatabase.AutonomousDatabase;\nimport com.pulumi.gcp.oracledatabase.AutonomousDatabaseArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.AutonomousDatabasePropertiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"new\")\n .project(\"my-project\")\n .build());\n\n var myADB = new AutonomousDatabase(\"myADB\", AutonomousDatabaseArgs.builder()\n .autonomousDatabaseId(\"my-instance\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .displayName(\"autonomousDatabase displayname\")\n .database(\"testdatabase\")\n .adminPassword(\"123Abpassword\")\n .network(default_.id())\n .cidr(\"10.5.0.0/24\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .properties(AutonomousDatabasePropertiesArgs.builder()\n .computeCount(\"2\")\n .dataStorageSizeGb(\"48\")\n .dbVersion(\"19c\")\n .dbEdition(\"STANDARD_EDITION\")\n .dbWorkload(\"OLTP\")\n .isAutoScalingEnabled(\"true\")\n .licenseType(\"BRING_YOUR_OWN_LICENSE\")\n .backupRetentionPeriodDays(\"60\")\n .characterSet(\"AL32UTF8\")\n .isStorageAutoScalingEnabled(\"false\")\n .maintenanceScheduleType(\"REGULAR\")\n .mtlsConnectionRequired(\"false\")\n .nCharacterSet(\"AL16UTF16\")\n .operationsInsightsState(\"NOT_ENABLED\")\n .customerContacts(AutonomousDatabasePropertiesCustomerContactArgs.builder()\n .email(\"xyz@example.com\")\n .build())\n .privateEndpointIp(\"10.5.0.11\")\n .privateEndpointLabel(\"testhost\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myADB:\n type: gcp:oracledatabase:AutonomousDatabase\n properties:\n autonomousDatabaseId: my-instance\n location: us-east4\n project: my-project\n displayName: autonomousDatabase displayname\n database: testdatabase\n adminPassword: 123Abpassword\n network: ${default.id}\n cidr: 10.5.0.0/24\n labels:\n label-one: value-one\n properties:\n computeCount: '2'\n dataStorageSizeGb: '48'\n dbVersion: 19c\n dbEdition: STANDARD_EDITION\n dbWorkload: OLTP\n isAutoScalingEnabled: 'true'\n licenseType: BRING_YOUR_OWN_LICENSE\n backupRetentionPeriodDays: '60'\n characterSet: AL32UTF8\n isStorageAutoScalingEnabled: 'false'\n maintenanceScheduleType: REGULAR\n mtlsConnectionRequired: 'false'\n nCharacterSet: AL16UTF16\n operationsInsightsState: NOT_ENABLED\n customerContacts:\n - email: xyz@example.com\n privateEndpointIp: 10.5.0.11\n privateEndpointLabel: testhost\n deletionProtection: 'true'\nvariables:\n default:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: new\n project: my-project\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAutonomousDatabase can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/autonomousDatabases/{{autonomous_database_id}}`\n\n* `{{project}}/{{location}}/{{autonomous_database_id}}`\n\n* `{{location}}/{{autonomous_database_id}}`\n\nWhen using the `pulumi import` command, AutonomousDatabase can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:oracledatabase/autonomousDatabase:AutonomousDatabase default projects/{{project}}/locations/{{location}}/autonomousDatabases/{{autonomous_database_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/autonomousDatabase:AutonomousDatabase default {{project}}/{{location}}/{{autonomous_database_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/autonomousDatabase:AutonomousDatabase default {{location}}/{{autonomous_database_id}}\n```\n\n",
"properties": {
"adminPassword": {
"type": "string",
@@ -248568,6 +251367,9 @@
"type": "string",
"description": "The name of the Autonomous Database. The database name must be unique in\nthe project. The name must begin with a letter and can\ncontain a maximum of 30 alphanumeric characters.\n"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "The display name for the Autonomous Database. The name does not have to be unique within your project.\n"
@@ -248655,6 +251457,9 @@
"description": "The name of the Autonomous Database. The database name must be unique in\nthe project. The name must begin with a letter and can\ncontain a maximum of 30 alphanumeric characters.\n",
"willReplaceOnChanges": true
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "The display name for the Autonomous Database. The name does not have to be unique within your project.\n",
@@ -248722,6 +251527,9 @@
"description": "The name of the Autonomous Database. The database name must be unique in\nthe project. The name must begin with a letter and can\ncontain a maximum of 30 alphanumeric characters.\n",
"willReplaceOnChanges": true
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "The display name for the Autonomous Database. The name does not have to be unique within your project.\n",
@@ -248783,7 +251591,7 @@
}
},
"gcp:oracledatabase/cloudExadataInfrastructure:CloudExadataInfrastructure": {
- "description": "A CloudExadataInfrastructure resource.\n\n\nTo get more information about CloudExadataInfrastructure, see:\n\n* [API documentation](https://cloud.google.com/oracle/database/docs/reference/rest/v1/projects.locations.cloudExadataInfrastructures)\n* How-to Guides\n * [Create Exadata Infrastructure instances](https://cloud.google.com/oracle/database/docs/create-instances)\n\n## Example Usage\n\n### Oracledatabase Cloud Exadata Infrastructure Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_cloud_exadata = new gcp.oracledatabase.CloudExadataInfrastructure(\"my-cloud-exadata\", {\n cloudExadataInfrastructureId: \"my-instance\",\n displayName: \"my-instance displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n properties: {\n shape: \"Exadata.X9M\",\n computeCount: 2,\n storageCount: 3,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_cloud_exadata = gcp.oracledatabase.CloudExadataInfrastructure(\"my-cloud-exadata\",\n cloud_exadata_infrastructure_id=\"my-instance\",\n display_name=\"my-instance displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n properties={\n \"shape\": \"Exadata.X9M\",\n \"compute_count\": 2,\n \"storage_count\": 3,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_cloud_exadata = new Gcp.OracleDatabase.CloudExadataInfrastructure(\"my-cloud-exadata\", new()\n {\n CloudExadataInfrastructureId = \"my-instance\",\n DisplayName = \"my-instance displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesArgs\n {\n Shape = \"Exadata.X9M\",\n ComputeCount = 2,\n StorageCount = 3,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oracledatabase.NewCloudExadataInfrastructure(ctx, \"my-cloud-exadata\", \u0026oracledatabase.CloudExadataInfrastructureArgs{\n\t\t\tCloudExadataInfrastructureId: pulumi.String(\"my-instance\"),\n\t\t\tDisplayName: pulumi.String(\"my-instance displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tProperties: \u0026oracledatabase.CloudExadataInfrastructurePropertiesArgs{\n\t\t\t\tShape: pulumi.String(\"Exadata.X9M\"),\n\t\t\t\tComputeCount: pulumi.Int(2),\n\t\t\t\tStorageCount: pulumi.Int(3),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructure;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructureArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_cloud_exadata = new CloudExadataInfrastructure(\"my-cloud-exadata\", CloudExadataInfrastructureArgs.builder()\n .cloudExadataInfrastructureId(\"my-instance\")\n .displayName(\"my-instance displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .properties(CloudExadataInfrastructurePropertiesArgs.builder()\n .shape(\"Exadata.X9M\")\n .computeCount(\"2\")\n .storageCount(\"3\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-cloud-exadata:\n type: gcp:oracledatabase:CloudExadataInfrastructure\n properties:\n cloudExadataInfrastructureId: my-instance\n displayName: my-instance displayname\n location: us-east4\n project: my-project\n properties:\n shape: Exadata.X9M\n computeCount: '2'\n storageCount: '3'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Oracledatabase Cloud Exadata Infrastructure Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_cloud_exadata = new gcp.oracledatabase.CloudExadataInfrastructure(\"my-cloud-exadata\", {\n cloudExadataInfrastructureId: \"my-instance\",\n displayName: \"my-instance displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n gcpOracleZone: \"us-east4-b-r1\",\n properties: {\n shape: \"Exadata.X9M\",\n computeCount: 2,\n storageCount: 3,\n customerContacts: [{\n email: \"xyz@example.com\",\n }],\n maintenanceWindow: {\n customActionTimeoutMins: 20,\n daysOfWeeks: [\"SUNDAY\"],\n hoursOfDays: [4],\n isCustomActionTimeoutEnabled: false,\n leadTimeWeek: 1,\n months: [\n \"JANUARY\",\n \"APRIL\",\n \"MAY\",\n \"OCTOBER\",\n ],\n patchingMode: \"ROLLING\",\n preference: \"CUSTOM_PREFERENCE\",\n weeksOfMonths: [4],\n },\n totalStorageSizeGb: 196608,\n },\n labels: {\n \"label-one\": \"value-one\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_cloud_exadata = gcp.oracledatabase.CloudExadataInfrastructure(\"my-cloud-exadata\",\n cloud_exadata_infrastructure_id=\"my-instance\",\n display_name=\"my-instance displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n gcp_oracle_zone=\"us-east4-b-r1\",\n properties={\n \"shape\": \"Exadata.X9M\",\n \"compute_count\": 2,\n \"storage_count\": 3,\n \"customer_contacts\": [{\n \"email\": \"xyz@example.com\",\n }],\n \"maintenance_window\": {\n \"custom_action_timeout_mins\": 20,\n \"days_of_weeks\": [\"SUNDAY\"],\n \"hours_of_days\": [4],\n \"is_custom_action_timeout_enabled\": False,\n \"lead_time_week\": 1,\n \"months\": [\n \"JANUARY\",\n \"APRIL\",\n \"MAY\",\n \"OCTOBER\",\n ],\n \"patching_mode\": \"ROLLING\",\n \"preference\": \"CUSTOM_PREFERENCE\",\n \"weeks_of_months\": [4],\n },\n \"total_storage_size_gb\": 196608,\n },\n labels={\n \"label-one\": \"value-one\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_cloud_exadata = new Gcp.OracleDatabase.CloudExadataInfrastructure(\"my-cloud-exadata\", new()\n {\n CloudExadataInfrastructureId = \"my-instance\",\n DisplayName = \"my-instance displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n GcpOracleZone = \"us-east4-b-r1\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesArgs\n {\n Shape = \"Exadata.X9M\",\n ComputeCount = 2,\n StorageCount = 3,\n CustomerContacts = new[]\n {\n new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesCustomerContactArgs\n {\n Email = \"xyz@example.com\",\n },\n },\n MaintenanceWindow = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesMaintenanceWindowArgs\n {\n CustomActionTimeoutMins = 20,\n DaysOfWeeks = new[]\n {\n \"SUNDAY\",\n },\n HoursOfDays = new[]\n {\n 4,\n },\n IsCustomActionTimeoutEnabled = false,\n LeadTimeWeek = 1,\n Months = new[]\n {\n \"JANUARY\",\n \"APRIL\",\n \"MAY\",\n \"OCTOBER\",\n },\n PatchingMode = \"ROLLING\",\n Preference = \"CUSTOM_PREFERENCE\",\n WeeksOfMonths = new[]\n {\n 4,\n },\n },\n TotalStorageSizeGb = 196608,\n },\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oracledatabase.NewCloudExadataInfrastructure(ctx, \"my-cloud-exadata\", \u0026oracledatabase.CloudExadataInfrastructureArgs{\n\t\t\tCloudExadataInfrastructureId: pulumi.String(\"my-instance\"),\n\t\t\tDisplayName: pulumi.String(\"my-instance displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tGcpOracleZone: pulumi.String(\"us-east4-b-r1\"),\n\t\t\tProperties: \u0026oracledatabase.CloudExadataInfrastructurePropertiesArgs{\n\t\t\t\tShape: pulumi.String(\"Exadata.X9M\"),\n\t\t\t\tComputeCount: pulumi.Int(2),\n\t\t\t\tStorageCount: pulumi.Int(3),\n\t\t\t\tCustomerContacts: oracledatabase.CloudExadataInfrastructurePropertiesCustomerContactArray{\n\t\t\t\t\t\u0026oracledatabase.CloudExadataInfrastructurePropertiesCustomerContactArgs{\n\t\t\t\t\t\tEmail: pulumi.String(\"xyz@example.com\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMaintenanceWindow: \u0026oracledatabase.CloudExadataInfrastructurePropertiesMaintenanceWindowArgs{\n\t\t\t\t\tCustomActionTimeoutMins: pulumi.Int(20),\n\t\t\t\t\tDaysOfWeeks: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"SUNDAY\"),\n\t\t\t\t\t},\n\t\t\t\t\tHoursOfDays: pulumi.IntArray{\n\t\t\t\t\t\tpulumi.Int(4),\n\t\t\t\t\t},\n\t\t\t\t\tIsCustomActionTimeoutEnabled: pulumi.Bool(false),\n\t\t\t\t\tLeadTimeWeek: pulumi.Int(1),\n\t\t\t\t\tMonths: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"JANUARY\"),\n\t\t\t\t\t\tpulumi.String(\"APRIL\"),\n\t\t\t\t\t\tpulumi.String(\"MAY\"),\n\t\t\t\t\t\tpulumi.String(\"OCTOBER\"),\n\t\t\t\t\t},\n\t\t\t\t\tPatchingMode: pulumi.String(\"ROLLING\"),\n\t\t\t\t\tPreference: pulumi.String(\"CUSTOM_PREFERENCE\"),\n\t\t\t\t\tWeeksOfMonths: pulumi.IntArray{\n\t\t\t\t\t\tpulumi.Int(4),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTotalStorageSizeGb: pulumi.Int(196608),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructure;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructureArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesMaintenanceWindowArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_cloud_exadata = new CloudExadataInfrastructure(\"my-cloud-exadata\", CloudExadataInfrastructureArgs.builder()\n .cloudExadataInfrastructureId(\"my-instance\")\n .displayName(\"my-instance displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .gcpOracleZone(\"us-east4-b-r1\")\n .properties(CloudExadataInfrastructurePropertiesArgs.builder()\n .shape(\"Exadata.X9M\")\n .computeCount(\"2\")\n .storageCount(\"3\")\n .customerContacts(CloudExadataInfrastructurePropertiesCustomerContactArgs.builder()\n .email(\"xyz@example.com\")\n .build())\n .maintenanceWindow(CloudExadataInfrastructurePropertiesMaintenanceWindowArgs.builder()\n .customActionTimeoutMins(\"20\")\n .daysOfWeeks(\"SUNDAY\")\n .hoursOfDays(4)\n .isCustomActionTimeoutEnabled(\"0\")\n .leadTimeWeek(\"1\")\n .months( \n \"JANUARY\",\n \"APRIL\",\n \"MAY\",\n \"OCTOBER\")\n .patchingMode(\"ROLLING\")\n .preference(\"CUSTOM_PREFERENCE\")\n .weeksOfMonths(4)\n .build())\n .totalStorageSizeGb(\"196608\")\n .build())\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-cloud-exadata:\n type: gcp:oracledatabase:CloudExadataInfrastructure\n properties:\n cloudExadataInfrastructureId: my-instance\n displayName: my-instance displayname\n location: us-east4\n project: my-project\n gcpOracleZone: us-east4-b-r1\n properties:\n shape: Exadata.X9M\n computeCount: '2'\n storageCount: '3'\n customerContacts:\n - email: xyz@example.com\n maintenanceWindow:\n customActionTimeoutMins: '20'\n daysOfWeeks:\n - SUNDAY\n hoursOfDays:\n - 4\n isCustomActionTimeoutEnabled: '0'\n leadTimeWeek: '1'\n months:\n - JANUARY\n - APRIL\n - MAY\n - OCTOBER\n patchingMode: ROLLING\n preference: CUSTOM_PREFERENCE\n weeksOfMonths:\n - 4\n totalStorageSizeGb: '196608'\n labels:\n label-one: value-one\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCloudExadataInfrastructure can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/cloudExadataInfrastructures/{{cloud_exadata_infrastructure_id}}`\n\n* `{{project}}/{{location}}/{{cloud_exadata_infrastructure_id}}`\n\n* `{{location}}/{{cloud_exadata_infrastructure_id}}`\n\nWhen using the `pulumi import` command, CloudExadataInfrastructure can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudExadataInfrastructure:CloudExadataInfrastructure default projects/{{project}}/locations/{{location}}/cloudExadataInfrastructures/{{cloud_exadata_infrastructure_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudExadataInfrastructure:CloudExadataInfrastructure default {{project}}/{{location}}/{{cloud_exadata_infrastructure_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudExadataInfrastructure:CloudExadataInfrastructure default {{location}}/{{cloud_exadata_infrastructure_id}}\n```\n\n",
+ "description": "A CloudExadataInfrastructure resource.\n\n\nTo get more information about CloudExadataInfrastructure, see:\n\n* [API documentation](https://cloud.google.com/oracle/database/docs/reference/rest/v1/projects.locations.cloudExadataInfrastructures)\n* How-to Guides\n * [Create Exadata Infrastructure instances](https://cloud.google.com/oracle/database/docs/create-instances)\n\n## Example Usage\n\n### Oracledatabase Cloud Exadata Infrastructure Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_cloud_exadata = new gcp.oracledatabase.CloudExadataInfrastructure(\"my-cloud-exadata\", {\n cloudExadataInfrastructureId: \"my-instance\",\n displayName: \"my-instance displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n properties: {\n shape: \"Exadata.X9M\",\n computeCount: 2,\n storageCount: 3,\n },\n deletionProtection: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_cloud_exadata = gcp.oracledatabase.CloudExadataInfrastructure(\"my-cloud-exadata\",\n cloud_exadata_infrastructure_id=\"my-instance\",\n display_name=\"my-instance displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n properties={\n \"shape\": \"Exadata.X9M\",\n \"compute_count\": 2,\n \"storage_count\": 3,\n },\n deletion_protection=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_cloud_exadata = new Gcp.OracleDatabase.CloudExadataInfrastructure(\"my-cloud-exadata\", new()\n {\n CloudExadataInfrastructureId = \"my-instance\",\n DisplayName = \"my-instance displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesArgs\n {\n Shape = \"Exadata.X9M\",\n ComputeCount = 2,\n StorageCount = 3,\n },\n DeletionProtection = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oracledatabase.NewCloudExadataInfrastructure(ctx, \"my-cloud-exadata\", \u0026oracledatabase.CloudExadataInfrastructureArgs{\n\t\t\tCloudExadataInfrastructureId: pulumi.String(\"my-instance\"),\n\t\t\tDisplayName: pulumi.String(\"my-instance displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tProperties: \u0026oracledatabase.CloudExadataInfrastructurePropertiesArgs{\n\t\t\t\tShape: pulumi.String(\"Exadata.X9M\"),\n\t\t\t\tComputeCount: pulumi.Int(2),\n\t\t\t\tStorageCount: pulumi.Int(3),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructure;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructureArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_cloud_exadata = new CloudExadataInfrastructure(\"my-cloud-exadata\", CloudExadataInfrastructureArgs.builder()\n .cloudExadataInfrastructureId(\"my-instance\")\n .displayName(\"my-instance displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .properties(CloudExadataInfrastructurePropertiesArgs.builder()\n .shape(\"Exadata.X9M\")\n .computeCount(\"2\")\n .storageCount(\"3\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-cloud-exadata:\n type: gcp:oracledatabase:CloudExadataInfrastructure\n properties:\n cloudExadataInfrastructureId: my-instance\n displayName: my-instance displayname\n location: us-east4\n project: my-project\n properties:\n shape: Exadata.X9M\n computeCount: '2'\n storageCount: '3'\n deletionProtection: 'true'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Oracledatabase Cloud Exadata Infrastructure Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_cloud_exadata = new gcp.oracledatabase.CloudExadataInfrastructure(\"my-cloud-exadata\", {\n cloudExadataInfrastructureId: \"my-instance\",\n displayName: \"my-instance displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n gcpOracleZone: \"us-east4-b-r1\",\n properties: {\n shape: \"Exadata.X9M\",\n computeCount: 2,\n storageCount: 3,\n customerContacts: [{\n email: \"xyz@example.com\",\n }],\n maintenanceWindow: {\n customActionTimeoutMins: 20,\n daysOfWeeks: [\"SUNDAY\"],\n hoursOfDays: [4],\n isCustomActionTimeoutEnabled: false,\n leadTimeWeek: 1,\n months: [\n \"JANUARY\",\n \"APRIL\",\n \"MAY\",\n \"OCTOBER\",\n ],\n patchingMode: \"ROLLING\",\n preference: \"CUSTOM_PREFERENCE\",\n weeksOfMonths: [4],\n },\n totalStorageSizeGb: 196608,\n },\n labels: {\n \"label-one\": \"value-one\",\n },\n deletionProtection: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_cloud_exadata = gcp.oracledatabase.CloudExadataInfrastructure(\"my-cloud-exadata\",\n cloud_exadata_infrastructure_id=\"my-instance\",\n display_name=\"my-instance displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n gcp_oracle_zone=\"us-east4-b-r1\",\n properties={\n \"shape\": \"Exadata.X9M\",\n \"compute_count\": 2,\n \"storage_count\": 3,\n \"customer_contacts\": [{\n \"email\": \"xyz@example.com\",\n }],\n \"maintenance_window\": {\n \"custom_action_timeout_mins\": 20,\n \"days_of_weeks\": [\"SUNDAY\"],\n \"hours_of_days\": [4],\n \"is_custom_action_timeout_enabled\": False,\n \"lead_time_week\": 1,\n \"months\": [\n \"JANUARY\",\n \"APRIL\",\n \"MAY\",\n \"OCTOBER\",\n ],\n \"patching_mode\": \"ROLLING\",\n \"preference\": \"CUSTOM_PREFERENCE\",\n \"weeks_of_months\": [4],\n },\n \"total_storage_size_gb\": 196608,\n },\n labels={\n \"label-one\": \"value-one\",\n },\n deletion_protection=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_cloud_exadata = new Gcp.OracleDatabase.CloudExadataInfrastructure(\"my-cloud-exadata\", new()\n {\n CloudExadataInfrastructureId = \"my-instance\",\n DisplayName = \"my-instance displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n GcpOracleZone = \"us-east4-b-r1\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesArgs\n {\n Shape = \"Exadata.X9M\",\n ComputeCount = 2,\n StorageCount = 3,\n CustomerContacts = new[]\n {\n new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesCustomerContactArgs\n {\n Email = \"xyz@example.com\",\n },\n },\n MaintenanceWindow = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesMaintenanceWindowArgs\n {\n CustomActionTimeoutMins = 20,\n DaysOfWeeks = new[]\n {\n \"SUNDAY\",\n },\n HoursOfDays = new[]\n {\n 4,\n },\n IsCustomActionTimeoutEnabled = false,\n LeadTimeWeek = 1,\n Months = new[]\n {\n \"JANUARY\",\n \"APRIL\",\n \"MAY\",\n \"OCTOBER\",\n },\n PatchingMode = \"ROLLING\",\n Preference = \"CUSTOM_PREFERENCE\",\n WeeksOfMonths = new[]\n {\n 4,\n },\n },\n TotalStorageSizeGb = 196608,\n },\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n DeletionProtection = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := oracledatabase.NewCloudExadataInfrastructure(ctx, \"my-cloud-exadata\", \u0026oracledatabase.CloudExadataInfrastructureArgs{\n\t\t\tCloudExadataInfrastructureId: pulumi.String(\"my-instance\"),\n\t\t\tDisplayName: pulumi.String(\"my-instance displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tGcpOracleZone: pulumi.String(\"us-east4-b-r1\"),\n\t\t\tProperties: \u0026oracledatabase.CloudExadataInfrastructurePropertiesArgs{\n\t\t\t\tShape: pulumi.String(\"Exadata.X9M\"),\n\t\t\t\tComputeCount: pulumi.Int(2),\n\t\t\t\tStorageCount: pulumi.Int(3),\n\t\t\t\tCustomerContacts: oracledatabase.CloudExadataInfrastructurePropertiesCustomerContactArray{\n\t\t\t\t\t\u0026oracledatabase.CloudExadataInfrastructurePropertiesCustomerContactArgs{\n\t\t\t\t\t\tEmail: pulumi.String(\"xyz@example.com\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMaintenanceWindow: \u0026oracledatabase.CloudExadataInfrastructurePropertiesMaintenanceWindowArgs{\n\t\t\t\t\tCustomActionTimeoutMins: pulumi.Int(20),\n\t\t\t\t\tDaysOfWeeks: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"SUNDAY\"),\n\t\t\t\t\t},\n\t\t\t\t\tHoursOfDays: pulumi.IntArray{\n\t\t\t\t\t\tpulumi.Int(4),\n\t\t\t\t\t},\n\t\t\t\t\tIsCustomActionTimeoutEnabled: pulumi.Bool(false),\n\t\t\t\t\tLeadTimeWeek: pulumi.Int(1),\n\t\t\t\t\tMonths: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"JANUARY\"),\n\t\t\t\t\t\tpulumi.String(\"APRIL\"),\n\t\t\t\t\t\tpulumi.String(\"MAY\"),\n\t\t\t\t\t\tpulumi.String(\"OCTOBER\"),\n\t\t\t\t\t},\n\t\t\t\t\tPatchingMode: pulumi.String(\"ROLLING\"),\n\t\t\t\t\tPreference: pulumi.String(\"CUSTOM_PREFERENCE\"),\n\t\t\t\t\tWeeksOfMonths: pulumi.IntArray{\n\t\t\t\t\t\tpulumi.Int(4),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tTotalStorageSizeGb: pulumi.Int(196608),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructure;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructureArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesMaintenanceWindowArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var my_cloud_exadata = new CloudExadataInfrastructure(\"my-cloud-exadata\", CloudExadataInfrastructureArgs.builder()\n .cloudExadataInfrastructureId(\"my-instance\")\n .displayName(\"my-instance displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .gcpOracleZone(\"us-east4-b-r1\")\n .properties(CloudExadataInfrastructurePropertiesArgs.builder()\n .shape(\"Exadata.X9M\")\n .computeCount(\"2\")\n .storageCount(\"3\")\n .customerContacts(CloudExadataInfrastructurePropertiesCustomerContactArgs.builder()\n .email(\"xyz@example.com\")\n .build())\n .maintenanceWindow(CloudExadataInfrastructurePropertiesMaintenanceWindowArgs.builder()\n .customActionTimeoutMins(\"20\")\n .daysOfWeeks(\"SUNDAY\")\n .hoursOfDays(4)\n .isCustomActionTimeoutEnabled(\"0\")\n .leadTimeWeek(\"1\")\n .months( \n \"JANUARY\",\n \"APRIL\",\n \"MAY\",\n \"OCTOBER\")\n .patchingMode(\"ROLLING\")\n .preference(\"CUSTOM_PREFERENCE\")\n .weeksOfMonths(4)\n .build())\n .totalStorageSizeGb(\"196608\")\n .build())\n .labels(Map.of(\"label-one\", \"value-one\"))\n .deletionProtection(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-cloud-exadata:\n type: gcp:oracledatabase:CloudExadataInfrastructure\n properties:\n cloudExadataInfrastructureId: my-instance\n displayName: my-instance displayname\n location: us-east4\n project: my-project\n gcpOracleZone: us-east4-b-r1\n properties:\n shape: Exadata.X9M\n computeCount: '2'\n storageCount: '3'\n customerContacts:\n - email: xyz@example.com\n maintenanceWindow:\n customActionTimeoutMins: '20'\n daysOfWeeks:\n - SUNDAY\n hoursOfDays:\n - 4\n isCustomActionTimeoutEnabled: '0'\n leadTimeWeek: '1'\n months:\n - JANUARY\n - APRIL\n - MAY\n - OCTOBER\n patchingMode: ROLLING\n preference: CUSTOM_PREFERENCE\n weeksOfMonths:\n - 4\n totalStorageSizeGb: '196608'\n labels:\n label-one: value-one\n deletionProtection: 'true'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCloudExadataInfrastructure can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/cloudExadataInfrastructures/{{cloud_exadata_infrastructure_id}}`\n\n* `{{project}}/{{location}}/{{cloud_exadata_infrastructure_id}}`\n\n* `{{location}}/{{cloud_exadata_infrastructure_id}}`\n\nWhen using the `pulumi import` command, CloudExadataInfrastructure can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudExadataInfrastructure:CloudExadataInfrastructure default projects/{{project}}/locations/{{location}}/cloudExadataInfrastructures/{{cloud_exadata_infrastructure_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudExadataInfrastructure:CloudExadataInfrastructure default {{project}}/{{location}}/{{cloud_exadata_infrastructure_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudExadataInfrastructure:CloudExadataInfrastructure default {{location}}/{{cloud_exadata_infrastructure_id}}\n```\n\n",
"properties": {
"cloudExadataInfrastructureId": {
"type": "string",
@@ -248793,6 +251601,9 @@
"type": "string",
"description": "The date and time that the Exadata Infrastructure was created.\n"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "User friendly name for this resource.\n"
@@ -248862,6 +251673,9 @@
"description": "The ID of the Exadata Infrastructure to create. This value is restricted\nto (^a-z?$) and must be a maximum of 63\ncharacters in length. The value must start with a letter and end with\na letter or a number.\n\n\n- - -\n",
"willReplaceOnChanges": true
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "User friendly name for this resource.\n",
@@ -248911,6 +251725,9 @@
"type": "string",
"description": "The date and time that the Exadata Infrastructure was created.\n"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "User friendly name for this resource.\n",
@@ -248973,7 +251790,7 @@
}
},
"gcp:oracledatabase/cloudVmCluster:CloudVmCluster": {
- "description": "A CloudVmCluster resource.\n\n\nTo get more information about CloudVmCluster, see:\n\n* [API documentation](https://cloud.google.com/oracle/database/docs/reference/rest/v1/projects.locations.cloudVmClusters)\n* How-to Guides\n * [Create VM clusters](https://cloud.google.com/oracle/database/docs/create-clusters)\n\n## Example Usage\n\n### Oracledatabase Cloud Vmcluster Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudExadataInfrastructures = new gcp.oracledatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\", {\n cloudExadataInfrastructureId: \"my-exadata\",\n displayName: \"my-exadata displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n properties: {\n shape: \"Exadata.X9M\",\n computeCount: 2,\n storageCount: 3,\n },\n});\nconst default = gcp.compute.getNetwork({\n name: \"new\",\n project: \"my-project\",\n});\nconst myVmcluster = new gcp.oracledatabase.CloudVmCluster(\"my_vmcluster\", {\n cloudVmClusterId: \"my-instance\",\n displayName: \"my-instance displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n exadataInfrastructure: cloudExadataInfrastructures.id,\n network: _default.then(_default =\u003e _default.id),\n cidr: \"10.5.0.0/24\",\n backupSubnetCidr: \"10.6.0.0/24\",\n properties: {\n licenseType: \"LICENSE_INCLUDED\",\n sshPublicKeys: [\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"],\n cpuCoreCount: 4,\n giVersion: \"19.0.0.0\",\n hostnamePrefix: \"hostname1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloud_exadata_infrastructures = gcp.oracledatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\",\n cloud_exadata_infrastructure_id=\"my-exadata\",\n display_name=\"my-exadata displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n properties={\n \"shape\": \"Exadata.X9M\",\n \"compute_count\": 2,\n \"storage_count\": 3,\n })\ndefault = gcp.compute.get_network(name=\"new\",\n project=\"my-project\")\nmy_vmcluster = gcp.oracledatabase.CloudVmCluster(\"my_vmcluster\",\n cloud_vm_cluster_id=\"my-instance\",\n display_name=\"my-instance displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n exadata_infrastructure=cloud_exadata_infrastructures.id,\n network=default.id,\n cidr=\"10.5.0.0/24\",\n backup_subnet_cidr=\"10.6.0.0/24\",\n properties={\n \"license_type\": \"LICENSE_INCLUDED\",\n \"ssh_public_keys\": [\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"],\n \"cpu_core_count\": 4,\n \"gi_version\": \"19.0.0.0\",\n \"hostname_prefix\": \"hostname1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudExadataInfrastructures = new Gcp.OracleDatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\", new()\n {\n CloudExadataInfrastructureId = \"my-exadata\",\n DisplayName = \"my-exadata displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesArgs\n {\n Shape = \"Exadata.X9M\",\n ComputeCount = 2,\n StorageCount = 3,\n },\n });\n\n var @default = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"new\",\n Project = \"my-project\",\n });\n\n var myVmcluster = new Gcp.OracleDatabase.CloudVmCluster(\"my_vmcluster\", new()\n {\n CloudVmClusterId = \"my-instance\",\n DisplayName = \"my-instance displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n ExadataInfrastructure = cloudExadataInfrastructures.Id,\n Network = @default.Apply(@default =\u003e @default.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Cidr = \"10.5.0.0/24\",\n BackupSubnetCidr = \"10.6.0.0/24\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudVmClusterPropertiesArgs\n {\n LicenseType = \"LICENSE_INCLUDED\",\n SshPublicKeys = new[]\n {\n \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\",\n },\n CpuCoreCount = 4,\n GiVersion = \"19.0.0.0\",\n HostnamePrefix = \"hostname1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudExadataInfrastructures, err := oracledatabase.NewCloudExadataInfrastructure(ctx, \"cloudExadataInfrastructures\", \u0026oracledatabase.CloudExadataInfrastructureArgs{\n\t\t\tCloudExadataInfrastructureId: pulumi.String(\"my-exadata\"),\n\t\t\tDisplayName: pulumi.String(\"my-exadata displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tProperties: \u0026oracledatabase.CloudExadataInfrastructurePropertiesArgs{\n\t\t\t\tShape: pulumi.String(\"Exadata.X9M\"),\n\t\t\t\tComputeCount: pulumi.Int(2),\n\t\t\t\tStorageCount: pulumi.Int(3),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_default, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"new\",\n\t\t\tProject: pulumi.StringRef(\"my-project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oracledatabase.NewCloudVmCluster(ctx, \"my_vmcluster\", \u0026oracledatabase.CloudVmClusterArgs{\n\t\t\tCloudVmClusterId: pulumi.String(\"my-instance\"),\n\t\t\tDisplayName: pulumi.String(\"my-instance displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tExadataInfrastructure: cloudExadataInfrastructures.ID(),\n\t\t\tNetwork: pulumi.String(_default.Id),\n\t\t\tCidr: pulumi.String(\"10.5.0.0/24\"),\n\t\t\tBackupSubnetCidr: pulumi.String(\"10.6.0.0/24\"),\n\t\t\tProperties: \u0026oracledatabase.CloudVmClusterPropertiesArgs{\n\t\t\t\tLicenseType: pulumi.String(\"LICENSE_INCLUDED\"),\n\t\t\t\tSshPublicKeys: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"),\n\t\t\t\t},\n\t\t\t\tCpuCoreCount: pulumi.Int(4),\n\t\t\t\tGiVersion: pulumi.String(\"19.0.0.0\"),\n\t\t\t\tHostnamePrefix: pulumi.String(\"hostname1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructure;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructureArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.oracledatabase.CloudVmCluster;\nimport com.pulumi.gcp.oracledatabase.CloudVmClusterArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudExadataInfrastructures = new CloudExadataInfrastructure(\"cloudExadataInfrastructures\", CloudExadataInfrastructureArgs.builder()\n .cloudExadataInfrastructureId(\"my-exadata\")\n .displayName(\"my-exadata displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .properties(CloudExadataInfrastructurePropertiesArgs.builder()\n .shape(\"Exadata.X9M\")\n .computeCount(\"2\")\n .storageCount(\"3\")\n .build())\n .build());\n\n final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"new\")\n .project(\"my-project\")\n .build());\n\n var myVmcluster = new CloudVmCluster(\"myVmcluster\", CloudVmClusterArgs.builder()\n .cloudVmClusterId(\"my-instance\")\n .displayName(\"my-instance displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .exadataInfrastructure(cloudExadataInfrastructures.id())\n .network(default_.id())\n .cidr(\"10.5.0.0/24\")\n .backupSubnetCidr(\"10.6.0.0/24\")\n .properties(CloudVmClusterPropertiesArgs.builder()\n .licenseType(\"LICENSE_INCLUDED\")\n .sshPublicKeys(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\")\n .cpuCoreCount(\"4\")\n .giVersion(\"19.0.0.0\")\n .hostnamePrefix(\"hostname1\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myVmcluster:\n type: gcp:oracledatabase:CloudVmCluster\n name: my_vmcluster\n properties:\n cloudVmClusterId: my-instance\n displayName: my-instance displayname\n location: us-east4\n project: my-project\n exadataInfrastructure: ${cloudExadataInfrastructures.id}\n network: ${default.id}\n cidr: 10.5.0.0/24\n backupSubnetCidr: 10.6.0.0/24\n properties:\n licenseType: LICENSE_INCLUDED\n sshPublicKeys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\n cpuCoreCount: '4'\n giVersion: 19.0.0.0\n hostnamePrefix: hostname1\n cloudExadataInfrastructures:\n type: gcp:oracledatabase:CloudExadataInfrastructure\n properties:\n cloudExadataInfrastructureId: my-exadata\n displayName: my-exadata displayname\n location: us-east4\n project: my-project\n properties:\n shape: Exadata.X9M\n computeCount: '2'\n storageCount: '3'\nvariables:\n default:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: new\n project: my-project\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Oracledatabase Cloud Vmcluster Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudExadataInfrastructures = new gcp.oracledatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\", {\n cloudExadataInfrastructureId: \"my-exadata\",\n displayName: \"my-exadata displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n properties: {\n shape: \"Exadata.X9M\",\n computeCount: 2,\n storageCount: 3,\n },\n});\nconst default = gcp.compute.getNetwork({\n name: \"new\",\n project: \"my-project\",\n});\nconst mydbserver = gcp.oracledatabase.getDbServersOutput({\n location: \"us-east4\",\n project: \"my-project\",\n cloudExadataInfrastructure: cloudExadataInfrastructures.cloudExadataInfrastructureId,\n});\nconst myVmcluster = new gcp.oracledatabase.CloudVmCluster(\"my_vmcluster\", {\n cloudVmClusterId: \"my-instance\",\n displayName: \"my-instance displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n exadataInfrastructure: cloudExadataInfrastructures.id,\n network: _default.then(_default =\u003e _default.id),\n cidr: \"10.5.0.0/24\",\n backupSubnetCidr: \"10.6.0.0/24\",\n labels: {\n \"label-one\": \"value-one\",\n },\n properties: {\n licenseType: \"LICENSE_INCLUDED\",\n sshPublicKeys: [\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"],\n cpuCoreCount: 4,\n giVersion: \"19.0.0.0\",\n timeZone: {\n id: \"UTC\",\n },\n nodeCount: 2,\n ocpuCount: 4,\n dataStorageSizeTb: 2,\n dbNodeStorageSizeGb: 120,\n dbServerOcids: [\n mydbserver.apply(mydbserver =\u003e mydbserver.dbServers?.[0]?.properties?.[0]?.ocid),\n mydbserver.apply(mydbserver =\u003e mydbserver.dbServers?.[1]?.properties?.[0]?.ocid),\n ],\n diskRedundancy: \"HIGH\",\n sparseDiskgroupEnabled: false,\n localBackupEnabled: false,\n clusterName: \"pq-ppat4\",\n hostnamePrefix: \"hostname1\",\n diagnosticsDataCollectionOptions: {\n diagnosticsEventsEnabled: true,\n healthMonitoringEnabled: true,\n incidentLogsEnabled: true,\n },\n memorySizeGb: 60,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloud_exadata_infrastructures = gcp.oracledatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\",\n cloud_exadata_infrastructure_id=\"my-exadata\",\n display_name=\"my-exadata displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n properties={\n \"shape\": \"Exadata.X9M\",\n \"compute_count\": 2,\n \"storage_count\": 3,\n })\ndefault = gcp.compute.get_network(name=\"new\",\n project=\"my-project\")\nmydbserver = gcp.oracledatabase.get_db_servers_output(location=\"us-east4\",\n project=\"my-project\",\n cloud_exadata_infrastructure=cloud_exadata_infrastructures.cloud_exadata_infrastructure_id)\nmy_vmcluster = gcp.oracledatabase.CloudVmCluster(\"my_vmcluster\",\n cloud_vm_cluster_id=\"my-instance\",\n display_name=\"my-instance displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n exadata_infrastructure=cloud_exadata_infrastructures.id,\n network=default.id,\n cidr=\"10.5.0.0/24\",\n backup_subnet_cidr=\"10.6.0.0/24\",\n labels={\n \"label-one\": \"value-one\",\n },\n properties={\n \"license_type\": \"LICENSE_INCLUDED\",\n \"ssh_public_keys\": [\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"],\n \"cpu_core_count\": 4,\n \"gi_version\": \"19.0.0.0\",\n \"time_zone\": {\n \"id\": \"UTC\",\n },\n \"node_count\": 2,\n \"ocpu_count\": 4,\n \"data_storage_size_tb\": 2,\n \"db_node_storage_size_gb\": 120,\n \"db_server_ocids\": [\n mydbserver.db_servers[0].properties[0].ocid,\n mydbserver.db_servers[1].properties[0].ocid,\n ],\n \"disk_redundancy\": \"HIGH\",\n \"sparse_diskgroup_enabled\": False,\n \"local_backup_enabled\": False,\n \"cluster_name\": \"pq-ppat4\",\n \"hostname_prefix\": \"hostname1\",\n \"diagnostics_data_collection_options\": {\n \"diagnostics_events_enabled\": True,\n \"health_monitoring_enabled\": True,\n \"incident_logs_enabled\": True,\n },\n \"memory_size_gb\": 60,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudExadataInfrastructures = new Gcp.OracleDatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\", new()\n {\n CloudExadataInfrastructureId = \"my-exadata\",\n DisplayName = \"my-exadata displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesArgs\n {\n Shape = \"Exadata.X9M\",\n ComputeCount = 2,\n StorageCount = 3,\n },\n });\n\n var @default = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"new\",\n Project = \"my-project\",\n });\n\n var mydbserver = Gcp.OracleDatabase.GetDbServers.Invoke(new()\n {\n Location = \"us-east4\",\n Project = \"my-project\",\n CloudExadataInfrastructure = cloudExadataInfrastructures.CloudExadataInfrastructureId,\n });\n\n var myVmcluster = new Gcp.OracleDatabase.CloudVmCluster(\"my_vmcluster\", new()\n {\n CloudVmClusterId = \"my-instance\",\n DisplayName = \"my-instance displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n ExadataInfrastructure = cloudExadataInfrastructures.Id,\n Network = @default.Apply(@default =\u003e @default.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Cidr = \"10.5.0.0/24\",\n BackupSubnetCidr = \"10.6.0.0/24\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Properties = new Gcp.OracleDatabase.Inputs.CloudVmClusterPropertiesArgs\n {\n LicenseType = \"LICENSE_INCLUDED\",\n SshPublicKeys = new[]\n {\n \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\",\n },\n CpuCoreCount = 4,\n GiVersion = \"19.0.0.0\",\n TimeZone = new Gcp.OracleDatabase.Inputs.CloudVmClusterPropertiesTimeZoneArgs\n {\n Id = \"UTC\",\n },\n NodeCount = 2,\n OcpuCount = 4,\n DataStorageSizeTb = 2,\n DbNodeStorageSizeGb = 120,\n DbServerOcids = new[]\n {\n mydbserver.Apply(getDbServersResult =\u003e getDbServersResult.DbServers[0]?.Properties[0]?.Ocid),\n mydbserver.Apply(getDbServersResult =\u003e getDbServersResult.DbServers[1]?.Properties[0]?.Ocid),\n },\n DiskRedundancy = \"HIGH\",\n SparseDiskgroupEnabled = false,\n LocalBackupEnabled = false,\n ClusterName = \"pq-ppat4\",\n HostnamePrefix = \"hostname1\",\n DiagnosticsDataCollectionOptions = new Gcp.OracleDatabase.Inputs.CloudVmClusterPropertiesDiagnosticsDataCollectionOptionsArgs\n {\n DiagnosticsEventsEnabled = true,\n HealthMonitoringEnabled = true,\n IncidentLogsEnabled = true,\n },\n MemorySizeGb = 60,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudExadataInfrastructures, err := oracledatabase.NewCloudExadataInfrastructure(ctx, \"cloudExadataInfrastructures\", \u0026oracledatabase.CloudExadataInfrastructureArgs{\n\t\t\tCloudExadataInfrastructureId: pulumi.String(\"my-exadata\"),\n\t\t\tDisplayName: pulumi.String(\"my-exadata displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tProperties: \u0026oracledatabase.CloudExadataInfrastructurePropertiesArgs{\n\t\t\t\tShape: pulumi.String(\"Exadata.X9M\"),\n\t\t\t\tComputeCount: pulumi.Int(2),\n\t\t\t\tStorageCount: pulumi.Int(3),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_default, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"new\",\n\t\t\tProject: pulumi.StringRef(\"my-project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmydbserver := oracledatabase.GetDbServersOutput(ctx, oracledatabase.GetDbServersOutputArgs{\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tCloudExadataInfrastructure: cloudExadataInfrastructures.CloudExadataInfrastructureId,\n\t\t}, nil)\n\t\t_, err = oracledatabase.NewCloudVmCluster(ctx, \"my_vmcluster\", \u0026oracledatabase.CloudVmClusterArgs{\n\t\t\tCloudVmClusterId: pulumi.String(\"my-instance\"),\n\t\t\tDisplayName: pulumi.String(\"my-instance displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tExadataInfrastructure: cloudExadataInfrastructures.ID(),\n\t\t\tNetwork: pulumi.String(_default.Id),\n\t\t\tCidr: pulumi.String(\"10.5.0.0/24\"),\n\t\t\tBackupSubnetCidr: pulumi.String(\"10.6.0.0/24\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tProperties: \u0026oracledatabase.CloudVmClusterPropertiesArgs{\n\t\t\t\tLicenseType: pulumi.String(\"LICENSE_INCLUDED\"),\n\t\t\t\tSshPublicKeys: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"),\n\t\t\t\t},\n\t\t\t\tCpuCoreCount: pulumi.Int(4),\n\t\t\t\tGiVersion: pulumi.String(\"19.0.0.0\"),\n\t\t\t\tTimeZone: \u0026oracledatabase.CloudVmClusterPropertiesTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"UTC\"),\n\t\t\t\t},\n\t\t\t\tNodeCount: pulumi.Int(2),\n\t\t\t\tOcpuCount: pulumi.Float64(4),\n\t\t\t\tDataStorageSizeTb: pulumi.Float64(2),\n\t\t\t\tDbNodeStorageSizeGb: pulumi.Int(120),\n\t\t\t\tDbServerOcids: pulumi.StringArray{\n\t\t\t\t\tmydbserver.ApplyT(func(mydbserver oracledatabase.GetDbServersResult) (*string, error) {\n\t\t\t\t\t\treturn \u0026mydbserver.DbServers[0].Properties[0].Ocid, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\tmydbserver.ApplyT(func(mydbserver oracledatabase.GetDbServersResult) (*string, error) {\n\t\t\t\t\t\treturn \u0026mydbserver.DbServers[1].Properties[0].Ocid, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t},\n\t\t\t\tDiskRedundancy: pulumi.String(\"HIGH\"),\n\t\t\t\tSparseDiskgroupEnabled: pulumi.Bool(false),\n\t\t\t\tLocalBackupEnabled: pulumi.Bool(false),\n\t\t\t\tClusterName: pulumi.String(\"pq-ppat4\"),\n\t\t\t\tHostnamePrefix: pulumi.String(\"hostname1\"),\n\t\t\t\tDiagnosticsDataCollectionOptions: \u0026oracledatabase.CloudVmClusterPropertiesDiagnosticsDataCollectionOptionsArgs{\n\t\t\t\t\tDiagnosticsEventsEnabled: pulumi.Bool(true),\n\t\t\t\t\tHealthMonitoringEnabled: pulumi.Bool(true),\n\t\t\t\t\tIncidentLogsEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tMemorySizeGb: pulumi.Int(60),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructure;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructureArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.oracledatabase.OracledatabaseFunctions;\nimport com.pulumi.gcp.oracledatabase.inputs.GetDbServersArgs;\nimport com.pulumi.gcp.oracledatabase.CloudVmCluster;\nimport com.pulumi.gcp.oracledatabase.CloudVmClusterArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesTimeZoneArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesDiagnosticsDataCollectionOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudExadataInfrastructures = new CloudExadataInfrastructure(\"cloudExadataInfrastructures\", CloudExadataInfrastructureArgs.builder()\n .cloudExadataInfrastructureId(\"my-exadata\")\n .displayName(\"my-exadata displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .properties(CloudExadataInfrastructurePropertiesArgs.builder()\n .shape(\"Exadata.X9M\")\n .computeCount(\"2\")\n .storageCount(\"3\")\n .build())\n .build());\n\n final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"new\")\n .project(\"my-project\")\n .build());\n\n final var mydbserver = OracledatabaseFunctions.getDbServers(GetDbServersArgs.builder()\n .location(\"us-east4\")\n .project(\"my-project\")\n .cloudExadataInfrastructure(cloudExadataInfrastructures.cloudExadataInfrastructureId())\n .build());\n\n var myVmcluster = new CloudVmCluster(\"myVmcluster\", CloudVmClusterArgs.builder()\n .cloudVmClusterId(\"my-instance\")\n .displayName(\"my-instance displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .exadataInfrastructure(cloudExadataInfrastructures.id())\n .network(default_.id())\n .cidr(\"10.5.0.0/24\")\n .backupSubnetCidr(\"10.6.0.0/24\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .properties(CloudVmClusterPropertiesArgs.builder()\n .licenseType(\"LICENSE_INCLUDED\")\n .sshPublicKeys(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\")\n .cpuCoreCount(\"4\")\n .giVersion(\"19.0.0.0\")\n .timeZone(CloudVmClusterPropertiesTimeZoneArgs.builder()\n .id(\"UTC\")\n .build())\n .nodeCount(\"2\")\n .ocpuCount(\"4.0\")\n .dataStorageSizeTb(2)\n .dbNodeStorageSizeGb(120)\n .dbServerOcids( \n mydbserver.applyValue(getDbServersResult -\u003e getDbServersResult).applyValue(mydbserver -\u003e mydbserver.applyValue(getDbServersResult -\u003e getDbServersResult.dbServers()[0].properties()[0].ocid())),\n mydbserver.applyValue(getDbServersResult -\u003e getDbServersResult).applyValue(mydbserver -\u003e mydbserver.applyValue(getDbServersResult -\u003e getDbServersResult.dbServers()[1].properties()[0].ocid())))\n .diskRedundancy(\"HIGH\")\n .sparseDiskgroupEnabled(false)\n .localBackupEnabled(false)\n .clusterName(\"pq-ppat4\")\n .hostnamePrefix(\"hostname1\")\n .diagnosticsDataCollectionOptions(CloudVmClusterPropertiesDiagnosticsDataCollectionOptionsArgs.builder()\n .diagnosticsEventsEnabled(true)\n .healthMonitoringEnabled(true)\n .incidentLogsEnabled(true)\n .build())\n .memorySizeGb(60)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myVmcluster:\n type: gcp:oracledatabase:CloudVmCluster\n name: my_vmcluster\n properties:\n cloudVmClusterId: my-instance\n displayName: my-instance displayname\n location: us-east4\n project: my-project\n exadataInfrastructure: ${cloudExadataInfrastructures.id}\n network: ${default.id}\n cidr: 10.5.0.0/24\n backupSubnetCidr: 10.6.0.0/24\n labels:\n label-one: value-one\n properties:\n licenseType: LICENSE_INCLUDED\n sshPublicKeys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\n cpuCoreCount: '4'\n giVersion: 19.0.0.0\n timeZone:\n id: UTC\n nodeCount: '2'\n ocpuCount: '4.0'\n dataStorageSizeTb: 2\n dbNodeStorageSizeGb: 120\n dbServerOcids:\n - ${mydbserver.dbServers[0].properties[0].ocid}\n - ${mydbserver.dbServers[1].properties[0].ocid}\n diskRedundancy: HIGH\n sparseDiskgroupEnabled: false\n localBackupEnabled: false\n clusterName: pq-ppat4\n hostnamePrefix: hostname1\n diagnosticsDataCollectionOptions:\n diagnosticsEventsEnabled: true\n healthMonitoringEnabled: true\n incidentLogsEnabled: true\n memorySizeGb: 60\n cloudExadataInfrastructures:\n type: gcp:oracledatabase:CloudExadataInfrastructure\n properties:\n cloudExadataInfrastructureId: my-exadata\n displayName: my-exadata displayname\n location: us-east4\n project: my-project\n properties:\n shape: Exadata.X9M\n computeCount: '2'\n storageCount: '3'\nvariables:\n default:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: new\n project: my-project\n mydbserver:\n fn::invoke:\n function: gcp:oracledatabase:getDbServers\n arguments:\n location: us-east4\n project: my-project\n cloudExadataInfrastructure: ${cloudExadataInfrastructures.cloudExadataInfrastructureId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCloudVmCluster can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/cloudVmClusters/{{cloud_vm_cluster_id}}`\n\n* `{{project}}/{{location}}/{{cloud_vm_cluster_id}}`\n\n* `{{location}}/{{cloud_vm_cluster_id}}`\n\nWhen using the `pulumi import` command, CloudVmCluster can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudVmCluster:CloudVmCluster default projects/{{project}}/locations/{{location}}/cloudVmClusters/{{cloud_vm_cluster_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudVmCluster:CloudVmCluster default {{project}}/{{location}}/{{cloud_vm_cluster_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudVmCluster:CloudVmCluster default {{location}}/{{cloud_vm_cluster_id}}\n```\n\n",
+ "description": "A CloudVmCluster resource.\n\n\nTo get more information about CloudVmCluster, see:\n\n* [API documentation](https://cloud.google.com/oracle/database/docs/reference/rest/v1/projects.locations.cloudVmClusters)\n* How-to Guides\n * [Create VM clusters](https://cloud.google.com/oracle/database/docs/create-clusters)\n\n## Example Usage\n\n### Oracledatabase Cloud Vmcluster Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudExadataInfrastructures = new gcp.oracledatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\", {\n cloudExadataInfrastructureId: \"my-exadata\",\n displayName: \"my-exadata displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n properties: {\n shape: \"Exadata.X9M\",\n computeCount: 2,\n storageCount: 3,\n },\n deletionProtection: true,\n});\nconst default = gcp.compute.getNetwork({\n name: \"new\",\n project: \"my-project\",\n});\nconst myVmcluster = new gcp.oracledatabase.CloudVmCluster(\"my_vmcluster\", {\n cloudVmClusterId: \"my-instance\",\n displayName: \"my-instance displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n exadataInfrastructure: cloudExadataInfrastructures.id,\n network: _default.then(_default =\u003e _default.id),\n cidr: \"10.5.0.0/24\",\n backupSubnetCidr: \"10.6.0.0/24\",\n properties: {\n licenseType: \"LICENSE_INCLUDED\",\n sshPublicKeys: [\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"],\n cpuCoreCount: 4,\n giVersion: \"19.0.0.0\",\n hostnamePrefix: \"hostname1\",\n },\n deletionProtection: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloud_exadata_infrastructures = gcp.oracledatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\",\n cloud_exadata_infrastructure_id=\"my-exadata\",\n display_name=\"my-exadata displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n properties={\n \"shape\": \"Exadata.X9M\",\n \"compute_count\": 2,\n \"storage_count\": 3,\n },\n deletion_protection=True)\ndefault = gcp.compute.get_network(name=\"new\",\n project=\"my-project\")\nmy_vmcluster = gcp.oracledatabase.CloudVmCluster(\"my_vmcluster\",\n cloud_vm_cluster_id=\"my-instance\",\n display_name=\"my-instance displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n exadata_infrastructure=cloud_exadata_infrastructures.id,\n network=default.id,\n cidr=\"10.5.0.0/24\",\n backup_subnet_cidr=\"10.6.0.0/24\",\n properties={\n \"license_type\": \"LICENSE_INCLUDED\",\n \"ssh_public_keys\": [\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"],\n \"cpu_core_count\": 4,\n \"gi_version\": \"19.0.0.0\",\n \"hostname_prefix\": \"hostname1\",\n },\n deletion_protection=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudExadataInfrastructures = new Gcp.OracleDatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\", new()\n {\n CloudExadataInfrastructureId = \"my-exadata\",\n DisplayName = \"my-exadata displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesArgs\n {\n Shape = \"Exadata.X9M\",\n ComputeCount = 2,\n StorageCount = 3,\n },\n DeletionProtection = true,\n });\n\n var @default = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"new\",\n Project = \"my-project\",\n });\n\n var myVmcluster = new Gcp.OracleDatabase.CloudVmCluster(\"my_vmcluster\", new()\n {\n CloudVmClusterId = \"my-instance\",\n DisplayName = \"my-instance displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n ExadataInfrastructure = cloudExadataInfrastructures.Id,\n Network = @default.Apply(@default =\u003e @default.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Cidr = \"10.5.0.0/24\",\n BackupSubnetCidr = \"10.6.0.0/24\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudVmClusterPropertiesArgs\n {\n LicenseType = \"LICENSE_INCLUDED\",\n SshPublicKeys = new[]\n {\n \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\",\n },\n CpuCoreCount = 4,\n GiVersion = \"19.0.0.0\",\n HostnamePrefix = \"hostname1\",\n },\n DeletionProtection = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudExadataInfrastructures, err := oracledatabase.NewCloudExadataInfrastructure(ctx, \"cloudExadataInfrastructures\", \u0026oracledatabase.CloudExadataInfrastructureArgs{\n\t\t\tCloudExadataInfrastructureId: pulumi.String(\"my-exadata\"),\n\t\t\tDisplayName: pulumi.String(\"my-exadata displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tProperties: \u0026oracledatabase.CloudExadataInfrastructurePropertiesArgs{\n\t\t\t\tShape: pulumi.String(\"Exadata.X9M\"),\n\t\t\t\tComputeCount: pulumi.Int(2),\n\t\t\t\tStorageCount: pulumi.Int(3),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_default, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"new\",\n\t\t\tProject: pulumi.StringRef(\"my-project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = oracledatabase.NewCloudVmCluster(ctx, \"my_vmcluster\", \u0026oracledatabase.CloudVmClusterArgs{\n\t\t\tCloudVmClusterId: pulumi.String(\"my-instance\"),\n\t\t\tDisplayName: pulumi.String(\"my-instance displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tExadataInfrastructure: cloudExadataInfrastructures.ID(),\n\t\t\tNetwork: pulumi.String(_default.Id),\n\t\t\tCidr: pulumi.String(\"10.5.0.0/24\"),\n\t\t\tBackupSubnetCidr: pulumi.String(\"10.6.0.0/24\"),\n\t\t\tProperties: \u0026oracledatabase.CloudVmClusterPropertiesArgs{\n\t\t\t\tLicenseType: pulumi.String(\"LICENSE_INCLUDED\"),\n\t\t\t\tSshPublicKeys: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"),\n\t\t\t\t},\n\t\t\t\tCpuCoreCount: pulumi.Int(4),\n\t\t\t\tGiVersion: pulumi.String(\"19.0.0.0\"),\n\t\t\t\tHostnamePrefix: pulumi.String(\"hostname1\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructure;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructureArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.oracledatabase.CloudVmCluster;\nimport com.pulumi.gcp.oracledatabase.CloudVmClusterArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudExadataInfrastructures = new CloudExadataInfrastructure(\"cloudExadataInfrastructures\", CloudExadataInfrastructureArgs.builder()\n .cloudExadataInfrastructureId(\"my-exadata\")\n .displayName(\"my-exadata displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .properties(CloudExadataInfrastructurePropertiesArgs.builder()\n .shape(\"Exadata.X9M\")\n .computeCount(\"2\")\n .storageCount(\"3\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"new\")\n .project(\"my-project\")\n .build());\n\n var myVmcluster = new CloudVmCluster(\"myVmcluster\", CloudVmClusterArgs.builder()\n .cloudVmClusterId(\"my-instance\")\n .displayName(\"my-instance displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .exadataInfrastructure(cloudExadataInfrastructures.id())\n .network(default_.id())\n .cidr(\"10.5.0.0/24\")\n .backupSubnetCidr(\"10.6.0.0/24\")\n .properties(CloudVmClusterPropertiesArgs.builder()\n .licenseType(\"LICENSE_INCLUDED\")\n .sshPublicKeys(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\")\n .cpuCoreCount(\"4\")\n .giVersion(\"19.0.0.0\")\n .hostnamePrefix(\"hostname1\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myVmcluster:\n type: gcp:oracledatabase:CloudVmCluster\n name: my_vmcluster\n properties:\n cloudVmClusterId: my-instance\n displayName: my-instance displayname\n location: us-east4\n project: my-project\n exadataInfrastructure: ${cloudExadataInfrastructures.id}\n network: ${default.id}\n cidr: 10.5.0.0/24\n backupSubnetCidr: 10.6.0.0/24\n properties:\n licenseType: LICENSE_INCLUDED\n sshPublicKeys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\n cpuCoreCount: '4'\n giVersion: 19.0.0.0\n hostnamePrefix: hostname1\n deletionProtection: 'true'\n cloudExadataInfrastructures:\n type: gcp:oracledatabase:CloudExadataInfrastructure\n properties:\n cloudExadataInfrastructureId: my-exadata\n displayName: my-exadata displayname\n location: us-east4\n project: my-project\n properties:\n shape: Exadata.X9M\n computeCount: '2'\n storageCount: '3'\n deletionProtection: 'true'\nvariables:\n default:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: new\n project: my-project\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Oracledatabase Cloud Vmcluster Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudExadataInfrastructures = new gcp.oracledatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\", {\n cloudExadataInfrastructureId: \"my-exadata\",\n displayName: \"my-exadata displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n properties: {\n shape: \"Exadata.X9M\",\n computeCount: 2,\n storageCount: 3,\n },\n deletionProtection: true,\n});\nconst default = gcp.compute.getNetwork({\n name: \"new\",\n project: \"my-project\",\n});\nconst mydbserver = gcp.oracledatabase.getDbServersOutput({\n location: \"us-east4\",\n project: \"my-project\",\n cloudExadataInfrastructure: cloudExadataInfrastructures.cloudExadataInfrastructureId,\n});\nconst myVmcluster = new gcp.oracledatabase.CloudVmCluster(\"my_vmcluster\", {\n cloudVmClusterId: \"my-instance\",\n displayName: \"my-instance displayname\",\n location: \"us-east4\",\n project: \"my-project\",\n exadataInfrastructure: cloudExadataInfrastructures.id,\n network: _default.then(_default =\u003e _default.id),\n cidr: \"10.5.0.0/24\",\n backupSubnetCidr: \"10.6.0.0/24\",\n labels: {\n \"label-one\": \"value-one\",\n },\n properties: {\n licenseType: \"LICENSE_INCLUDED\",\n sshPublicKeys: [\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"],\n cpuCoreCount: 4,\n giVersion: \"19.0.0.0\",\n timeZone: {\n id: \"UTC\",\n },\n nodeCount: 2,\n ocpuCount: 4,\n dataStorageSizeTb: 2,\n dbNodeStorageSizeGb: 120,\n dbServerOcids: [\n mydbserver.apply(mydbserver =\u003e mydbserver.dbServers?.[0]?.properties?.[0]?.ocid),\n mydbserver.apply(mydbserver =\u003e mydbserver.dbServers?.[1]?.properties?.[0]?.ocid),\n ],\n diskRedundancy: \"HIGH\",\n sparseDiskgroupEnabled: false,\n localBackupEnabled: false,\n clusterName: \"pq-ppat4\",\n hostnamePrefix: \"hostname1\",\n diagnosticsDataCollectionOptions: {\n diagnosticsEventsEnabled: true,\n healthMonitoringEnabled: true,\n incidentLogsEnabled: true,\n },\n memorySizeGb: 60,\n },\n deletionProtection: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloud_exadata_infrastructures = gcp.oracledatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\",\n cloud_exadata_infrastructure_id=\"my-exadata\",\n display_name=\"my-exadata displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n properties={\n \"shape\": \"Exadata.X9M\",\n \"compute_count\": 2,\n \"storage_count\": 3,\n },\n deletion_protection=True)\ndefault = gcp.compute.get_network(name=\"new\",\n project=\"my-project\")\nmydbserver = gcp.oracledatabase.get_db_servers_output(location=\"us-east4\",\n project=\"my-project\",\n cloud_exadata_infrastructure=cloud_exadata_infrastructures.cloud_exadata_infrastructure_id)\nmy_vmcluster = gcp.oracledatabase.CloudVmCluster(\"my_vmcluster\",\n cloud_vm_cluster_id=\"my-instance\",\n display_name=\"my-instance displayname\",\n location=\"us-east4\",\n project=\"my-project\",\n exadata_infrastructure=cloud_exadata_infrastructures.id,\n network=default.id,\n cidr=\"10.5.0.0/24\",\n backup_subnet_cidr=\"10.6.0.0/24\",\n labels={\n \"label-one\": \"value-one\",\n },\n properties={\n \"license_type\": \"LICENSE_INCLUDED\",\n \"ssh_public_keys\": [\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"],\n \"cpu_core_count\": 4,\n \"gi_version\": \"19.0.0.0\",\n \"time_zone\": {\n \"id\": \"UTC\",\n },\n \"node_count\": 2,\n \"ocpu_count\": 4,\n \"data_storage_size_tb\": 2,\n \"db_node_storage_size_gb\": 120,\n \"db_server_ocids\": [\n mydbserver.db_servers[0].properties[0].ocid,\n mydbserver.db_servers[1].properties[0].ocid,\n ],\n \"disk_redundancy\": \"HIGH\",\n \"sparse_diskgroup_enabled\": False,\n \"local_backup_enabled\": False,\n \"cluster_name\": \"pq-ppat4\",\n \"hostname_prefix\": \"hostname1\",\n \"diagnostics_data_collection_options\": {\n \"diagnostics_events_enabled\": True,\n \"health_monitoring_enabled\": True,\n \"incident_logs_enabled\": True,\n },\n \"memory_size_gb\": 60,\n },\n deletion_protection=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudExadataInfrastructures = new Gcp.OracleDatabase.CloudExadataInfrastructure(\"cloudExadataInfrastructures\", new()\n {\n CloudExadataInfrastructureId = \"my-exadata\",\n DisplayName = \"my-exadata displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n Properties = new Gcp.OracleDatabase.Inputs.CloudExadataInfrastructurePropertiesArgs\n {\n Shape = \"Exadata.X9M\",\n ComputeCount = 2,\n StorageCount = 3,\n },\n DeletionProtection = true,\n });\n\n var @default = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"new\",\n Project = \"my-project\",\n });\n\n var mydbserver = Gcp.OracleDatabase.GetDbServers.Invoke(new()\n {\n Location = \"us-east4\",\n Project = \"my-project\",\n CloudExadataInfrastructure = cloudExadataInfrastructures.CloudExadataInfrastructureId,\n });\n\n var myVmcluster = new Gcp.OracleDatabase.CloudVmCluster(\"my_vmcluster\", new()\n {\n CloudVmClusterId = \"my-instance\",\n DisplayName = \"my-instance displayname\",\n Location = \"us-east4\",\n Project = \"my-project\",\n ExadataInfrastructure = cloudExadataInfrastructures.Id,\n Network = @default.Apply(@default =\u003e @default.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Cidr = \"10.5.0.0/24\",\n BackupSubnetCidr = \"10.6.0.0/24\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Properties = new Gcp.OracleDatabase.Inputs.CloudVmClusterPropertiesArgs\n {\n LicenseType = \"LICENSE_INCLUDED\",\n SshPublicKeys = new[]\n {\n \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\",\n },\n CpuCoreCount = 4,\n GiVersion = \"19.0.0.0\",\n TimeZone = new Gcp.OracleDatabase.Inputs.CloudVmClusterPropertiesTimeZoneArgs\n {\n Id = \"UTC\",\n },\n NodeCount = 2,\n OcpuCount = 4,\n DataStorageSizeTb = 2,\n DbNodeStorageSizeGb = 120,\n DbServerOcids = new[]\n {\n mydbserver.Apply(getDbServersResult =\u003e getDbServersResult.DbServers[0]?.Properties[0]?.Ocid),\n mydbserver.Apply(getDbServersResult =\u003e getDbServersResult.DbServers[1]?.Properties[0]?.Ocid),\n },\n DiskRedundancy = \"HIGH\",\n SparseDiskgroupEnabled = false,\n LocalBackupEnabled = false,\n ClusterName = \"pq-ppat4\",\n HostnamePrefix = \"hostname1\",\n DiagnosticsDataCollectionOptions = new Gcp.OracleDatabase.Inputs.CloudVmClusterPropertiesDiagnosticsDataCollectionOptionsArgs\n {\n DiagnosticsEventsEnabled = true,\n HealthMonitoringEnabled = true,\n IncidentLogsEnabled = true,\n },\n MemorySizeGb = 60,\n },\n DeletionProtection = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/oracledatabase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudExadataInfrastructures, err := oracledatabase.NewCloudExadataInfrastructure(ctx, \"cloudExadataInfrastructures\", \u0026oracledatabase.CloudExadataInfrastructureArgs{\n\t\t\tCloudExadataInfrastructureId: pulumi.String(\"my-exadata\"),\n\t\t\tDisplayName: pulumi.String(\"my-exadata displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tProperties: \u0026oracledatabase.CloudExadataInfrastructurePropertiesArgs{\n\t\t\t\tShape: pulumi.String(\"Exadata.X9M\"),\n\t\t\t\tComputeCount: pulumi.Int(2),\n\t\t\t\tStorageCount: pulumi.Int(3),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_default, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"new\",\n\t\t\tProject: pulumi.StringRef(\"my-project\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmydbserver := oracledatabase.GetDbServersOutput(ctx, oracledatabase.GetDbServersOutputArgs{\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tCloudExadataInfrastructure: cloudExadataInfrastructures.CloudExadataInfrastructureId,\n\t\t}, nil)\n\t\t_, err = oracledatabase.NewCloudVmCluster(ctx, \"my_vmcluster\", \u0026oracledatabase.CloudVmClusterArgs{\n\t\t\tCloudVmClusterId: pulumi.String(\"my-instance\"),\n\t\t\tDisplayName: pulumi.String(\"my-instance displayname\"),\n\t\t\tLocation: pulumi.String(\"us-east4\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tExadataInfrastructure: cloudExadataInfrastructures.ID(),\n\t\t\tNetwork: pulumi.String(_default.Id),\n\t\t\tCidr: pulumi.String(\"10.5.0.0/24\"),\n\t\t\tBackupSubnetCidr: pulumi.String(\"10.6.0.0/24\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tProperties: \u0026oracledatabase.CloudVmClusterPropertiesArgs{\n\t\t\t\tLicenseType: pulumi.String(\"LICENSE_INCLUDED\"),\n\t\t\t\tSshPublicKeys: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\"),\n\t\t\t\t},\n\t\t\t\tCpuCoreCount: pulumi.Int(4),\n\t\t\t\tGiVersion: pulumi.String(\"19.0.0.0\"),\n\t\t\t\tTimeZone: \u0026oracledatabase.CloudVmClusterPropertiesTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"UTC\"),\n\t\t\t\t},\n\t\t\t\tNodeCount: pulumi.Int(2),\n\t\t\t\tOcpuCount: pulumi.Float64(4),\n\t\t\t\tDataStorageSizeTb: pulumi.Float64(2),\n\t\t\t\tDbNodeStorageSizeGb: pulumi.Int(120),\n\t\t\t\tDbServerOcids: pulumi.StringArray{\n\t\t\t\t\tmydbserver.ApplyT(func(mydbserver oracledatabase.GetDbServersResult) (*string, error) {\n\t\t\t\t\t\treturn \u0026mydbserver.DbServers[0].Properties[0].Ocid, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\tmydbserver.ApplyT(func(mydbserver oracledatabase.GetDbServersResult) (*string, error) {\n\t\t\t\t\t\treturn \u0026mydbserver.DbServers[1].Properties[0].Ocid, nil\n\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t},\n\t\t\t\tDiskRedundancy: pulumi.String(\"HIGH\"),\n\t\t\t\tSparseDiskgroupEnabled: pulumi.Bool(false),\n\t\t\t\tLocalBackupEnabled: pulumi.Bool(false),\n\t\t\t\tClusterName: pulumi.String(\"pq-ppat4\"),\n\t\t\t\tHostnamePrefix: pulumi.String(\"hostname1\"),\n\t\t\t\tDiagnosticsDataCollectionOptions: \u0026oracledatabase.CloudVmClusterPropertiesDiagnosticsDataCollectionOptionsArgs{\n\t\t\t\t\tDiagnosticsEventsEnabled: pulumi.Bool(true),\n\t\t\t\t\tHealthMonitoringEnabled: pulumi.Bool(true),\n\t\t\t\t\tIncidentLogsEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tMemorySizeGb: pulumi.Int(60),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructure;\nimport com.pulumi.gcp.oracledatabase.CloudExadataInfrastructureArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.oracledatabase.OracledatabaseFunctions;\nimport com.pulumi.gcp.oracledatabase.inputs.GetDbServersArgs;\nimport com.pulumi.gcp.oracledatabase.CloudVmCluster;\nimport com.pulumi.gcp.oracledatabase.CloudVmClusterArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesTimeZoneArgs;\nimport com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesDiagnosticsDataCollectionOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudExadataInfrastructures = new CloudExadataInfrastructure(\"cloudExadataInfrastructures\", CloudExadataInfrastructureArgs.builder()\n .cloudExadataInfrastructureId(\"my-exadata\")\n .displayName(\"my-exadata displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .properties(CloudExadataInfrastructurePropertiesArgs.builder()\n .shape(\"Exadata.X9M\")\n .computeCount(\"2\")\n .storageCount(\"3\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"new\")\n .project(\"my-project\")\n .build());\n\n final var mydbserver = OracledatabaseFunctions.getDbServers(GetDbServersArgs.builder()\n .location(\"us-east4\")\n .project(\"my-project\")\n .cloudExadataInfrastructure(cloudExadataInfrastructures.cloudExadataInfrastructureId())\n .build());\n\n var myVmcluster = new CloudVmCluster(\"myVmcluster\", CloudVmClusterArgs.builder()\n .cloudVmClusterId(\"my-instance\")\n .displayName(\"my-instance displayname\")\n .location(\"us-east4\")\n .project(\"my-project\")\n .exadataInfrastructure(cloudExadataInfrastructures.id())\n .network(default_.id())\n .cidr(\"10.5.0.0/24\")\n .backupSubnetCidr(\"10.6.0.0/24\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .properties(CloudVmClusterPropertiesArgs.builder()\n .licenseType(\"LICENSE_INCLUDED\")\n .sshPublicKeys(\"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\")\n .cpuCoreCount(\"4\")\n .giVersion(\"19.0.0.0\")\n .timeZone(CloudVmClusterPropertiesTimeZoneArgs.builder()\n .id(\"UTC\")\n .build())\n .nodeCount(\"2\")\n .ocpuCount(\"4.0\")\n .dataStorageSizeTb(2)\n .dbNodeStorageSizeGb(120)\n .dbServerOcids( \n mydbserver.applyValue(getDbServersResult -\u003e getDbServersResult).applyValue(mydbserver -\u003e mydbserver.applyValue(getDbServersResult -\u003e getDbServersResult.dbServers()[0].properties()[0].ocid())),\n mydbserver.applyValue(getDbServersResult -\u003e getDbServersResult).applyValue(mydbserver -\u003e mydbserver.applyValue(getDbServersResult -\u003e getDbServersResult.dbServers()[1].properties()[0].ocid())))\n .diskRedundancy(\"HIGH\")\n .sparseDiskgroupEnabled(false)\n .localBackupEnabled(false)\n .clusterName(\"pq-ppat4\")\n .hostnamePrefix(\"hostname1\")\n .diagnosticsDataCollectionOptions(CloudVmClusterPropertiesDiagnosticsDataCollectionOptionsArgs.builder()\n .diagnosticsEventsEnabled(true)\n .healthMonitoringEnabled(true)\n .incidentLogsEnabled(true)\n .build())\n .memorySizeGb(60)\n .build())\n .deletionProtection(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myVmcluster:\n type: gcp:oracledatabase:CloudVmCluster\n name: my_vmcluster\n properties:\n cloudVmClusterId: my-instance\n displayName: my-instance displayname\n location: us-east4\n project: my-project\n exadataInfrastructure: ${cloudExadataInfrastructures.id}\n network: ${default.id}\n cidr: 10.5.0.0/24\n backupSubnetCidr: 10.6.0.0/24\n labels:\n label-one: value-one\n properties:\n licenseType: LICENSE_INCLUDED\n sshPublicKeys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz1X2744t+6vRLmE5u6nHi6/QWh8bQDgHmd+OIxRQIGA/IWUtCs2FnaCNZcqvZkaeyjk5v0lTA/n+9jvO42Ipib53athrfVG8gRt8fzPL66C6ZqHq+6zZophhrCdfJh/0G4x9xJh5gdMprlaCR1P8yAaVvhBQSKGc4SiIkyMNBcHJ5YTtMQMTfxaB4G1sHZ6SDAY9a6Cq/zNjDwfPapWLsiP4mRhE5SSjJX6l6EYbkm0JeLQg+AbJiNEPvrvDp1wtTxzlPJtIivthmLMThFxK7+DkrYFuLvN5AHUdo9KTDLvHtDCvV70r8v0gafsrKkM/OE9Jtzoo0e1N/5K/ZdyFRbAkFT4QSF3nwpbmBWLf2Evg//YyEuxnz4CwPqFST2mucnrCCGCVWp1vnHZ0y30nM35njLOmWdRDFy5l27pKUTwLp02y3UYiiZyP7d3/u5pKiN4vC27VuvzprSdJxWoAvluOiDeRh+/oeQDowxoT/Oop8DzB9uJmjktXw8jyMW2+Rpg+ENQqeNgF1OGlEzypaWiRskEFlkpLb4v/s3ZDYkL1oW0Nv/J8LTjTOTEaYt2Udjoe9x2xWiGnQixhdChWuG+MaoWffzUgx1tsVj/DBXijR5DjkPkrA1GA98zd3q8GKEaAdcDenJjHhNYSd4+rE9pIsnYn7fo5X/tFfcQH1XQ== nobody@google.com\n cpuCoreCount: '4'\n giVersion: 19.0.0.0\n timeZone:\n id: UTC\n nodeCount: '2'\n ocpuCount: '4.0'\n dataStorageSizeTb: 2\n dbNodeStorageSizeGb: 120\n dbServerOcids:\n - ${mydbserver.dbServers[0].properties[0].ocid}\n - ${mydbserver.dbServers[1].properties[0].ocid}\n diskRedundancy: HIGH\n sparseDiskgroupEnabled: false\n localBackupEnabled: false\n clusterName: pq-ppat4\n hostnamePrefix: hostname1\n diagnosticsDataCollectionOptions:\n diagnosticsEventsEnabled: true\n healthMonitoringEnabled: true\n incidentLogsEnabled: true\n memorySizeGb: 60\n deletionProtection: 'true'\n cloudExadataInfrastructures:\n type: gcp:oracledatabase:CloudExadataInfrastructure\n properties:\n cloudExadataInfrastructureId: my-exadata\n displayName: my-exadata displayname\n location: us-east4\n project: my-project\n properties:\n shape: Exadata.X9M\n computeCount: '2'\n storageCount: '3'\n deletionProtection: 'true'\nvariables:\n default:\n fn::invoke:\n function: gcp:compute:getNetwork\n arguments:\n name: new\n project: my-project\n mydbserver:\n fn::invoke:\n function: gcp:oracledatabase:getDbServers\n arguments:\n location: us-east4\n project: my-project\n cloudExadataInfrastructure: ${cloudExadataInfrastructures.cloudExadataInfrastructureId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCloudVmCluster can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/cloudVmClusters/{{cloud_vm_cluster_id}}`\n\n* `{{project}}/{{location}}/{{cloud_vm_cluster_id}}`\n\n* `{{location}}/{{cloud_vm_cluster_id}}`\n\nWhen using the `pulumi import` command, CloudVmCluster can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudVmCluster:CloudVmCluster default projects/{{project}}/locations/{{location}}/cloudVmClusters/{{cloud_vm_cluster_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudVmCluster:CloudVmCluster default {{project}}/{{location}}/{{cloud_vm_cluster_id}}\n```\n\n```sh\n$ pulumi import gcp:oracledatabase/cloudVmCluster:CloudVmCluster default {{location}}/{{cloud_vm_cluster_id}}\n```\n\n",
"properties": {
"backupSubnetCidr": {
"type": "string",
@@ -248991,6 +251808,9 @@
"type": "string",
"description": "The date and time that the VM cluster was created.\n"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "User friendly name for this resource.\n"
@@ -249077,6 +251897,9 @@
"description": "The ID of the VM Cluster to create. This value is restricted\nto (^a-z?$) and must be a maximum of 63\ncharacters in length. The value must start with a letter and end with\na letter or a number.\n\n\n- - -\n",
"willReplaceOnChanges": true
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "User friendly name for this resource.\n",
@@ -249145,6 +251968,9 @@
"type": "string",
"description": "The date and time that the VM cluster was created.\n"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string",
"description": "User friendly name for this resource.\n",
@@ -250353,7 +253179,7 @@
}
},
"gcp:orgpolicy/policy:Policy": {
- "description": "Defines an organization policy which is used to specify constraints for configurations of Google Cloud resources.\n\n\nTo get more information about Policy, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/docs/reference/orgpolicy/rest/v2/organizations.policies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/organization-policy/creating-managing-custom-constraints)\n * [Supported Services](https://cloud.google.com/resource-manager/docs/organization-policy/custom-constraint-supported-services)\n\n## Example Usage\n\n### Org Policy Policy Enforce\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.name}/policies/iam.disableServiceAccountKeyUpload`,\n parent: pulumi.interpolate`projects/${basic.name}`,\n spec: {\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"projects/{name}/policies/iam.disableServiceAccountKeyUpload\"),\n parent=basic.name.apply(lambda name: f\"projects/{name}\"),\n spec={\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"projects/{name}/policies/iam.disableServiceAccountKeyUpload\"),\n Parent = basic.Name.Apply(name =\u003e $\"projects/{name}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/iam.disableServiceAccountKeyUpload\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"projects/%s/policies/iam.disableServiceAccountKeyUpload\", name)))\n .parent(basic.name().applyValue(name -\u003e String.format(\"projects/%s\", name)))\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.name}/policies/iam.disableServiceAccountKeyUpload\n parent: projects/${basic.name}\n spec:\n rules:\n - enforce: FALSE\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Folder\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Folder(\"basic\", {\n parent: \"organizations/123456789\",\n displayName: \"folder\",\n deletionProtection: false,\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`${basic.name}/policies/gcp.resourceLocations`,\n parent: basic.name,\n spec: {\n inheritFromParent: true,\n rules: [{\n denyAll: \"TRUE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Folder(\"basic\",\n parent=\"organizations/123456789\",\n display_name=\"folder\",\n deletion_protection=False)\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"{name}/policies/gcp.resourceLocations\"),\n parent=basic.name,\n spec={\n \"inherit_from_parent\": True,\n \"rules\": [{\n \"deny_all\": \"TRUE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Folder(\"basic\", new()\n {\n Parent = \"organizations/123456789\",\n DisplayName = \"folder\",\n DeletionProtection = false,\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"{name}/policies/gcp.resourceLocations\"),\n Parent = basic.Name,\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n InheritFromParent = true,\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n DenyAll = \"TRUE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewFolder(ctx, \"basic\", \u0026organizations.FolderArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDisplayName: pulumi.String(\"folder\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v/policies/gcp.resourceLocations\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name,\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tInheritFromParent: pulumi.Bool(true),\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tDenyAll: pulumi.String(\"TRUE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Folder(\"basic\", FolderArgs.builder()\n .parent(\"organizations/123456789\")\n .displayName(\"folder\")\n .deletionProtection(false)\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"%s/policies/gcp.resourceLocations\", name)))\n .parent(basic.name())\n .spec(PolicySpecArgs.builder()\n .inheritFromParent(true)\n .rules(PolicySpecRuleArgs.builder()\n .denyAll(\"TRUE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: ${basic.name}/policies/gcp.resourceLocations\n parent: ${basic.name}\n spec:\n inheritFromParent: true\n rules:\n - denyAll: TRUE\n basic:\n type: gcp:organizations:Folder\n properties:\n parent: organizations/123456789\n displayName: folder\n deletionProtection: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Organization\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: \"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n parent: \"organizations/123456789\",\n spec: {\n reset: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n parent=\"organizations/123456789\",\n spec={\n \"reset\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = \"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n Parent = \"organizations/123456789\",\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Reset = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: pulumi.String(\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tReset: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\")\n .parent(\"organizations/123456789\")\n .spec(PolicySpecArgs.builder()\n .reset(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: organizations/123456789/policies/gcp.detailedAuditLoggingMode\n parent: organizations/123456789\n spec:\n reset: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.name}/policies/gcp.resourceLocations`,\n parent: pulumi.interpolate`projects/${basic.name}`,\n spec: {\n rules: [\n {\n condition: {\n description: \"A sample condition for the policy\",\n expression: \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n location: \"sample-location.log\",\n title: \"sample-condition\",\n },\n values: {\n allowedValues: [\"projects/allowed-project\"],\n deniedValues: [\"projects/denied-project\"],\n },\n },\n {\n allowAll: \"TRUE\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"projects/{name}/policies/gcp.resourceLocations\"),\n parent=basic.name.apply(lambda name: f\"projects/{name}\"),\n spec={\n \"rules\": [\n {\n \"condition\": {\n \"description\": \"A sample condition for the policy\",\n \"expression\": \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n \"location\": \"sample-location.log\",\n \"title\": \"sample-condition\",\n },\n \"values\": {\n \"allowed_values\": [\"projects/allowed-project\"],\n \"denied_values\": [\"projects/denied-project\"],\n },\n },\n {\n \"allow_all\": \"TRUE\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"projects/{name}/policies/gcp.resourceLocations\"),\n Parent = basic.Name.Apply(name =\u003e $\"projects/{name}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Condition = new Gcp.OrgPolicy.Inputs.PolicySpecRuleConditionArgs\n {\n Description = \"A sample condition for the policy\",\n Expression = \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n Location = \"sample-location.log\",\n Title = \"sample-condition\",\n },\n Values = new Gcp.OrgPolicy.Inputs.PolicySpecRuleValuesArgs\n {\n AllowedValues = new[]\n {\n \"projects/allowed-project\",\n },\n DeniedValues = new[]\n {\n \"projects/denied-project\",\n },\n },\n },\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n AllowAll = \"TRUE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/gcp.resourceLocations\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tCondition: \u0026orgpolicy.PolicySpecRuleConditionArgs{\n\t\t\t\t\t\t\tDescription: pulumi.String(\"A sample condition for the policy\"),\n\t\t\t\t\t\t\tExpression: pulumi.String(\"resource.matchTagId('tagKeys/123', 'tagValues/345')\"),\n\t\t\t\t\t\t\tLocation: pulumi.String(\"sample-location.log\"),\n\t\t\t\t\t\t\tTitle: pulumi.String(\"sample-condition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tValues: \u0026orgpolicy.PolicySpecRuleValuesArgs{\n\t\t\t\t\t\t\tAllowedValues: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"projects/allowed-project\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDeniedValues: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"projects/denied-project\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tAllowAll: pulumi.String(\"TRUE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"projects/%s/policies/gcp.resourceLocations\", name)))\n .parent(basic.name().applyValue(name -\u003e String.format(\"projects/%s\", name)))\n .spec(PolicySpecArgs.builder()\n .rules( \n PolicySpecRuleArgs.builder()\n .condition(PolicySpecRuleConditionArgs.builder()\n .description(\"A sample condition for the policy\")\n .expression(\"resource.matchTagId('tagKeys/123', 'tagValues/345')\")\n .location(\"sample-location.log\")\n .title(\"sample-condition\")\n .build())\n .values(PolicySpecRuleValuesArgs.builder()\n .allowedValues(\"projects/allowed-project\")\n .deniedValues(\"projects/denied-project\")\n .build())\n .build(),\n PolicySpecRuleArgs.builder()\n .allowAll(\"TRUE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.name}/policies/gcp.resourceLocations\n parent: projects/${basic.name}\n spec:\n rules:\n - condition:\n description: A sample condition for the policy\n expression: resource.matchTagId('tagKeys/123', 'tagValues/345')\n location: sample-location.log\n title: sample-condition\n values:\n allowedValues:\n - projects/allowed-project\n deniedValues:\n - projects/denied-project\n - allowAll: TRUE\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Dry Run Spec\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst constraint = new gcp.orgpolicy.CustomConstraint(\"constraint\", {\n name: \"custom.disableGkeAutoUpgrade_13293\",\n parent: \"organizations/123456789\",\n displayName: \"Disable GKE auto upgrade\",\n description: \"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n actionType: \"ALLOW\",\n condition: \"resource.management.autoUpgrade == false\",\n methodTypes: [\"CREATE\"],\n resourceTypes: [\"container.googleapis.com/NodePool\"],\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`organizations/123456789/policies/${constraint.name}`,\n parent: \"organizations/123456789\",\n spec: {\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n dryRunSpec: {\n inheritFromParent: false,\n reset: false,\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconstraint = gcp.orgpolicy.CustomConstraint(\"constraint\",\n name=\"custom.disableGkeAutoUpgrade_13293\",\n parent=\"organizations/123456789\",\n display_name=\"Disable GKE auto upgrade\",\n description=\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n action_type=\"ALLOW\",\n condition=\"resource.management.autoUpgrade == false\",\n method_types=[\"CREATE\"],\n resource_types=[\"container.googleapis.com/NodePool\"])\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=constraint.name.apply(lambda name: f\"organizations/123456789/policies/{name}\"),\n parent=\"organizations/123456789\",\n spec={\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n },\n dry_run_spec={\n \"inherit_from_parent\": False,\n \"reset\": False,\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var constraint = new Gcp.OrgPolicy.CustomConstraint(\"constraint\", new()\n {\n Name = \"custom.disableGkeAutoUpgrade_13293\",\n Parent = \"organizations/123456789\",\n DisplayName = \"Disable GKE auto upgrade\",\n Description = \"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n ActionType = \"ALLOW\",\n Condition = \"resource.management.autoUpgrade == false\",\n MethodTypes = new[]\n {\n \"CREATE\",\n },\n ResourceTypes = new[]\n {\n \"container.googleapis.com/NodePool\",\n },\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = constraint.Name.Apply(name =\u003e $\"organizations/123456789/policies/{name}\"),\n Parent = \"organizations/123456789\",\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n DryRunSpec = new Gcp.OrgPolicy.Inputs.PolicyDryRunSpecArgs\n {\n InheritFromParent = false,\n Reset = false,\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicyDryRunSpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tconstraint, err := orgpolicy.NewCustomConstraint(ctx, \"constraint\", \u0026orgpolicy.CustomConstraintArgs{\n\t\t\tName: pulumi.String(\"custom.disableGkeAutoUpgrade_13293\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDisplayName: pulumi.String(\"Disable GKE auto upgrade\"),\n\t\t\tDescription: pulumi.String(\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\"),\n\t\t\tActionType: pulumi.String(\"ALLOW\"),\n\t\t\tCondition: pulumi.String(\"resource.management.autoUpgrade == false\"),\n\t\t\tMethodTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"CREATE\"),\n\t\t\t},\n\t\t\tResourceTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"container.googleapis.com/NodePool\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: constraint.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"organizations/123456789/policies/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tDryRunSpec: \u0026orgpolicy.PolicyDryRunSpecArgs{\n\t\t\t\tInheritFromParent: pulumi.Bool(false),\n\t\t\t\tReset: pulumi.Bool(false),\n\t\t\t\tRules: orgpolicy.PolicyDryRunSpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicyDryRunSpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.orgpolicy.CustomConstraint;\nimport com.pulumi.gcp.orgpolicy.CustomConstraintArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicyDryRunSpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var constraint = new CustomConstraint(\"constraint\", CustomConstraintArgs.builder()\n .name(\"custom.disableGkeAutoUpgrade_13293\")\n .parent(\"organizations/123456789\")\n .displayName(\"Disable GKE auto upgrade\")\n .description(\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\")\n .actionType(\"ALLOW\")\n .condition(\"resource.management.autoUpgrade == false\")\n .methodTypes(\"CREATE\")\n .resourceTypes(\"container.googleapis.com/NodePool\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(constraint.name().applyValue(name -\u003e String.format(\"organizations/123456789/policies/%s\", name)))\n .parent(\"organizations/123456789\")\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .dryRunSpec(PolicyDryRunSpecArgs.builder()\n .inheritFromParent(false)\n .reset(false)\n .rules(PolicyDryRunSpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n constraint:\n type: gcp:orgpolicy:CustomConstraint\n properties:\n name: custom.disableGkeAutoUpgrade_13293\n parent: organizations/123456789\n displayName: Disable GKE auto upgrade\n description: Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\n actionType: ALLOW\n condition: resource.management.autoUpgrade == false\n methodTypes:\n - CREATE\n resourceTypes:\n - container.googleapis.com/NodePool\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: organizations/123456789/policies/${constraint.name}\n parent: organizations/123456789\n spec:\n rules:\n - enforce: FALSE\n dryRunSpec:\n inheritFromParent: false\n reset: false\n rules:\n - enforce: FALSE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPolicy can be imported using any of these accepted formats:\n\n* `{{parent}}/policies/{{name}}`\n\nWhen using the `pulumi import` command, Policy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:orgpolicy/policy:Policy default {{parent}}/policies/{{name}}\n```\n\n",
+ "description": "Defines an organization policy which is used to specify constraints for configurations of Google Cloud resources.\n\n\nTo get more information about Policy, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/docs/reference/orgpolicy/rest/v2/organizations.policies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/organization-policy/creating-managing-custom-constraints)\n * [Supported Services](https://cloud.google.com/resource-manager/docs/organization-policy/custom-constraint-supported-services)\n\n## Example Usage\n\n### Org Policy Policy Enforce\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.name}/policies/iam.disableServiceAccountKeyUpload`,\n parent: pulumi.interpolate`projects/${basic.name}`,\n spec: {\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"projects/{name}/policies/iam.disableServiceAccountKeyUpload\"),\n parent=basic.name.apply(lambda name: f\"projects/{name}\"),\n spec={\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"projects/{name}/policies/iam.disableServiceAccountKeyUpload\"),\n Parent = basic.Name.Apply(name =\u003e $\"projects/{name}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/iam.disableServiceAccountKeyUpload\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"projects/%s/policies/iam.disableServiceAccountKeyUpload\", name)))\n .parent(basic.name().applyValue(name -\u003e String.format(\"projects/%s\", name)))\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.name}/policies/iam.disableServiceAccountKeyUpload\n parent: projects/${basic.name}\n spec:\n rules:\n - enforce: FALSE\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Folder\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Folder(\"basic\", {\n parent: \"organizations/123456789\",\n displayName: \"folder\",\n deletionProtection: false,\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`${basic.name}/policies/gcp.resourceLocations`,\n parent: basic.name,\n spec: {\n inheritFromParent: true,\n rules: [{\n denyAll: \"TRUE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Folder(\"basic\",\n parent=\"organizations/123456789\",\n display_name=\"folder\",\n deletion_protection=False)\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"{name}/policies/gcp.resourceLocations\"),\n parent=basic.name,\n spec={\n \"inherit_from_parent\": True,\n \"rules\": [{\n \"deny_all\": \"TRUE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Folder(\"basic\", new()\n {\n Parent = \"organizations/123456789\",\n DisplayName = \"folder\",\n DeletionProtection = false,\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"{name}/policies/gcp.resourceLocations\"),\n Parent = basic.Name,\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n InheritFromParent = true,\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n DenyAll = \"TRUE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewFolder(ctx, \"basic\", \u0026organizations.FolderArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDisplayName: pulumi.String(\"folder\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v/policies/gcp.resourceLocations\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name,\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tInheritFromParent: pulumi.Bool(true),\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tDenyAll: pulumi.String(\"TRUE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Folder(\"basic\", FolderArgs.builder()\n .parent(\"organizations/123456789\")\n .displayName(\"folder\")\n .deletionProtection(false)\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"%s/policies/gcp.resourceLocations\", name)))\n .parent(basic.name())\n .spec(PolicySpecArgs.builder()\n .inheritFromParent(true)\n .rules(PolicySpecRuleArgs.builder()\n .denyAll(\"TRUE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: ${basic.name}/policies/gcp.resourceLocations\n parent: ${basic.name}\n spec:\n inheritFromParent: true\n rules:\n - denyAll: TRUE\n basic:\n type: gcp:organizations:Folder\n properties:\n parent: organizations/123456789\n displayName: folder\n deletionProtection: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Organization\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: \"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n parent: \"organizations/123456789\",\n spec: {\n reset: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n parent=\"organizations/123456789\",\n spec={\n \"reset\": True,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = \"organizations/123456789/policies/gcp.detailedAuditLoggingMode\",\n Parent = \"organizations/123456789\",\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Reset = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: pulumi.String(\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tReset: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(\"organizations/123456789/policies/gcp.detailedAuditLoggingMode\")\n .parent(\"organizations/123456789\")\n .spec(PolicySpecArgs.builder()\n .reset(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: organizations/123456789/policies/gcp.detailedAuditLoggingMode\n parent: organizations/123456789\n spec:\n reset: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.organizations.Project(\"basic\", {\n projectId: \"id\",\n name: \"id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`projects/${basic.name}/policies/gcp.resourceLocations`,\n parent: pulumi.interpolate`projects/${basic.name}`,\n spec: {\n rules: [\n {\n condition: {\n description: \"A sample condition for the policy\",\n expression: \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n location: \"sample-location.log\",\n title: \"sample-condition\",\n },\n values: {\n allowedValues: [\"projects/allowed-project\"],\n deniedValues: [\"projects/denied-project\"],\n },\n },\n {\n allowAll: \"TRUE\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.organizations.Project(\"basic\",\n project_id=\"id\",\n name=\"id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=basic.name.apply(lambda name: f\"projects/{name}/policies/gcp.resourceLocations\"),\n parent=basic.name.apply(lambda name: f\"projects/{name}\"),\n spec={\n \"rules\": [\n {\n \"condition\": {\n \"description\": \"A sample condition for the policy\",\n \"expression\": \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n \"location\": \"sample-location.log\",\n \"title\": \"sample-condition\",\n },\n \"values\": {\n \"allowed_values\": [\"projects/allowed-project\"],\n \"denied_values\": [\"projects/denied-project\"],\n },\n },\n {\n \"allow_all\": \"TRUE\",\n },\n ],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Organizations.Project(\"basic\", new()\n {\n ProjectId = \"id\",\n Name = \"id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = basic.Name.Apply(name =\u003e $\"projects/{name}/policies/gcp.resourceLocations\"),\n Parent = basic.Name.Apply(name =\u003e $\"projects/{name}\"),\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Condition = new Gcp.OrgPolicy.Inputs.PolicySpecRuleConditionArgs\n {\n Description = \"A sample condition for the policy\",\n Expression = \"resource.matchTagId('tagKeys/123', 'tagValues/345')\",\n Location = \"sample-location.log\",\n Title = \"sample-condition\",\n },\n Values = new Gcp.OrgPolicy.Inputs.PolicySpecRuleValuesArgs\n {\n AllowedValues = new[]\n {\n \"projects/allowed-project\",\n },\n DeniedValues = new[]\n {\n \"projects/denied-project\",\n },\n },\n },\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n AllowAll = \"TRUE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasic, err := organizations.NewProject(ctx, \"basic\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"id\"),\n\t\t\tName: pulumi.String(\"id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/policies/gcp.resourceLocations\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: basic.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tCondition: \u0026orgpolicy.PolicySpecRuleConditionArgs{\n\t\t\t\t\t\t\tDescription: pulumi.String(\"A sample condition for the policy\"),\n\t\t\t\t\t\t\tExpression: pulumi.String(\"resource.matchTagId('tagKeys/123', 'tagValues/345')\"),\n\t\t\t\t\t\t\tLocation: pulumi.String(\"sample-location.log\"),\n\t\t\t\t\t\t\tTitle: pulumi.String(\"sample-condition\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tValues: \u0026orgpolicy.PolicySpecRuleValuesArgs{\n\t\t\t\t\t\t\tAllowedValues: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"projects/allowed-project\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDeniedValues: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"projects/denied-project\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tAllowAll: pulumi.String(\"TRUE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basic = new Project(\"basic\", ProjectArgs.builder()\n .projectId(\"id\")\n .name(\"id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(basic.name().applyValue(name -\u003e String.format(\"projects/%s/policies/gcp.resourceLocations\", name)))\n .parent(basic.name().applyValue(name -\u003e String.format(\"projects/%s\", name)))\n .spec(PolicySpecArgs.builder()\n .rules( \n PolicySpecRuleArgs.builder()\n .condition(PolicySpecRuleConditionArgs.builder()\n .description(\"A sample condition for the policy\")\n .expression(\"resource.matchTagId('tagKeys/123', 'tagValues/345')\")\n .location(\"sample-location.log\")\n .title(\"sample-condition\")\n .build())\n .values(PolicySpecRuleValuesArgs.builder()\n .allowedValues(\"projects/allowed-project\")\n .deniedValues(\"projects/denied-project\")\n .build())\n .build(),\n PolicySpecRuleArgs.builder()\n .allowAll(\"TRUE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: projects/${basic.name}/policies/gcp.resourceLocations\n parent: projects/${basic.name}\n spec:\n rules:\n - condition:\n description: A sample condition for the policy\n expression: resource.matchTagId('tagKeys/123', 'tagValues/345')\n location: sample-location.log\n title: sample-condition\n values:\n allowedValues:\n - projects/allowed-project\n deniedValues:\n - projects/denied-project\n - allowAll: TRUE\n basic:\n type: gcp:organizations:Project\n properties:\n projectId: id\n name: id\n orgId: '123456789'\n deletionPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Org Policy Policy Dry Run Spec\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst constraint = new gcp.orgpolicy.CustomConstraint(\"constraint\", {\n name: \"custom.disableGkeAutoUpgrade_40289\",\n parent: \"organizations/123456789\",\n displayName: \"Disable GKE auto upgrade\",\n description: \"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n actionType: \"ALLOW\",\n condition: \"resource.management.autoUpgrade == false\",\n methodTypes: [\"CREATE\"],\n resourceTypes: [\"container.googleapis.com/NodePool\"],\n});\nconst primary = new gcp.orgpolicy.Policy(\"primary\", {\n name: pulumi.interpolate`organizations/123456789/policies/${constraint.name}`,\n parent: \"organizations/123456789\",\n spec: {\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n dryRunSpec: {\n inheritFromParent: false,\n reset: false,\n rules: [{\n enforce: \"FALSE\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconstraint = gcp.orgpolicy.CustomConstraint(\"constraint\",\n name=\"custom.disableGkeAutoUpgrade_40289\",\n parent=\"organizations/123456789\",\n display_name=\"Disable GKE auto upgrade\",\n description=\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n action_type=\"ALLOW\",\n condition=\"resource.management.autoUpgrade == false\",\n method_types=[\"CREATE\"],\n resource_types=[\"container.googleapis.com/NodePool\"])\nprimary = gcp.orgpolicy.Policy(\"primary\",\n name=constraint.name.apply(lambda name: f\"organizations/123456789/policies/{name}\"),\n parent=\"organizations/123456789\",\n spec={\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n },\n dry_run_spec={\n \"inherit_from_parent\": False,\n \"reset\": False,\n \"rules\": [{\n \"enforce\": \"FALSE\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var constraint = new Gcp.OrgPolicy.CustomConstraint(\"constraint\", new()\n {\n Name = \"custom.disableGkeAutoUpgrade_40289\",\n Parent = \"organizations/123456789\",\n DisplayName = \"Disable GKE auto upgrade\",\n Description = \"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\",\n ActionType = \"ALLOW\",\n Condition = \"resource.management.autoUpgrade == false\",\n MethodTypes = new[]\n {\n \"CREATE\",\n },\n ResourceTypes = new[]\n {\n \"container.googleapis.com/NodePool\",\n },\n });\n\n var primary = new Gcp.OrgPolicy.Policy(\"primary\", new()\n {\n Name = constraint.Name.Apply(name =\u003e $\"organizations/123456789/policies/{name}\"),\n Parent = \"organizations/123456789\",\n Spec = new Gcp.OrgPolicy.Inputs.PolicySpecArgs\n {\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicySpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n DryRunSpec = new Gcp.OrgPolicy.Inputs.PolicyDryRunSpecArgs\n {\n InheritFromParent = false,\n Reset = false,\n Rules = new[]\n {\n new Gcp.OrgPolicy.Inputs.PolicyDryRunSpecRuleArgs\n {\n Enforce = \"FALSE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/orgpolicy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tconstraint, err := orgpolicy.NewCustomConstraint(ctx, \"constraint\", \u0026orgpolicy.CustomConstraintArgs{\n\t\t\tName: pulumi.String(\"custom.disableGkeAutoUpgrade_40289\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDisplayName: pulumi.String(\"Disable GKE auto upgrade\"),\n\t\t\tDescription: pulumi.String(\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\"),\n\t\t\tActionType: pulumi.String(\"ALLOW\"),\n\t\t\tCondition: pulumi.String(\"resource.management.autoUpgrade == false\"),\n\t\t\tMethodTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"CREATE\"),\n\t\t\t},\n\t\t\tResourceTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"container.googleapis.com/NodePool\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = orgpolicy.NewPolicy(ctx, \"primary\", \u0026orgpolicy.PolicyArgs{\n\t\t\tName: constraint.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"organizations/123456789/policies/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tSpec: \u0026orgpolicy.PolicySpecArgs{\n\t\t\t\tRules: orgpolicy.PolicySpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicySpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tDryRunSpec: \u0026orgpolicy.PolicyDryRunSpecArgs{\n\t\t\t\tInheritFromParent: pulumi.Bool(false),\n\t\t\t\tReset: pulumi.Bool(false),\n\t\t\t\tRules: orgpolicy.PolicyDryRunSpecRuleArray{\n\t\t\t\t\t\u0026orgpolicy.PolicyDryRunSpecRuleArgs{\n\t\t\t\t\t\tEnforce: pulumi.String(\"FALSE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.orgpolicy.CustomConstraint;\nimport com.pulumi.gcp.orgpolicy.CustomConstraintArgs;\nimport com.pulumi.gcp.orgpolicy.Policy;\nimport com.pulumi.gcp.orgpolicy.PolicyArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicySpecArgs;\nimport com.pulumi.gcp.orgpolicy.inputs.PolicyDryRunSpecArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var constraint = new CustomConstraint(\"constraint\", CustomConstraintArgs.builder()\n .name(\"custom.disableGkeAutoUpgrade_40289\")\n .parent(\"organizations/123456789\")\n .displayName(\"Disable GKE auto upgrade\")\n .description(\"Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\")\n .actionType(\"ALLOW\")\n .condition(\"resource.management.autoUpgrade == false\")\n .methodTypes(\"CREATE\")\n .resourceTypes(\"container.googleapis.com/NodePool\")\n .build());\n\n var primary = new Policy(\"primary\", PolicyArgs.builder()\n .name(constraint.name().applyValue(name -\u003e String.format(\"organizations/123456789/policies/%s\", name)))\n .parent(\"organizations/123456789\")\n .spec(PolicySpecArgs.builder()\n .rules(PolicySpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .dryRunSpec(PolicyDryRunSpecArgs.builder()\n .inheritFromParent(false)\n .reset(false)\n .rules(PolicyDryRunSpecRuleArgs.builder()\n .enforce(\"FALSE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n constraint:\n type: gcp:orgpolicy:CustomConstraint\n properties:\n name: custom.disableGkeAutoUpgrade_40289\n parent: organizations/123456789\n displayName: Disable GKE auto upgrade\n description: Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.\n actionType: ALLOW\n condition: resource.management.autoUpgrade == false\n methodTypes:\n - CREATE\n resourceTypes:\n - container.googleapis.com/NodePool\n primary:\n type: gcp:orgpolicy:Policy\n properties:\n name: organizations/123456789/policies/${constraint.name}\n parent: organizations/123456789\n spec:\n rules:\n - enforce: FALSE\n dryRunSpec:\n inheritFromParent: false\n reset: false\n rules:\n - enforce: FALSE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPolicy can be imported using any of these accepted formats:\n\n* `{{parent}}/policies/{{name}}`\n\nWhen using the `pulumi import` command, Policy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:orgpolicy/policy:Policy default {{parent}}/policies/{{name}}\n```\n\n",
"properties": {
"dryRunSpec": {
"$ref": "#/types/gcp:orgpolicy/PolicyDryRunSpec:PolicyDryRunSpec",
@@ -251081,7 +253907,7 @@
}
},
"gcp:parallelstore/instance:Instance": {
- "description": "## Example Usage\n\n### Parallelstore Instance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"network\",\n autoCreateSubnetworks: true,\n mtu: 8896,\n});\n// Create an IP address\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"private_ip_alloc\", {\n name: \"address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: network.id,\n});\n// Create a private connection\nconst _default = new gcp.servicenetworking.Connection(\"default\", {\n network: network.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAlloc.name],\n});\nconst instance = new gcp.parallelstore.Instance(\"instance\", {\n instanceId: \"instance\",\n location: \"us-central1-a\",\n description: \"test instance\",\n capacityGib: \"12000\",\n network: network.name,\n fileStripeLevel: \"FILE_STRIPE_LEVEL_MIN\",\n directoryStripeLevel: \"DIRECTORY_STRIPE_LEVEL_MIN\",\n labels: {\n test: \"value\",\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"network\",\n auto_create_subnetworks=True,\n mtu=8896)\n# Create an IP address\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"private_ip_alloc\",\n name=\"address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=network.id)\n# Create a private connection\ndefault = gcp.servicenetworking.Connection(\"default\",\n network=network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_alloc.name])\ninstance = gcp.parallelstore.Instance(\"instance\",\n instance_id=\"instance\",\n location=\"us-central1-a\",\n description=\"test instance\",\n capacity_gib=\"12000\",\n network=network.name,\n file_stripe_level=\"FILE_STRIPE_LEVEL_MIN\",\n directory_stripe_level=\"DIRECTORY_STRIPE_LEVEL_MIN\",\n labels={\n \"test\": \"value\",\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"network\",\n AutoCreateSubnetworks = true,\n Mtu = 8896,\n });\n\n // Create an IP address\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"private_ip_alloc\", new()\n {\n Name = \"address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = network.Id,\n });\n\n // Create a private connection\n var @default = new Gcp.ServiceNetworking.Connection(\"default\", new()\n {\n Network = network.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAlloc.Name,\n },\n });\n\n var instance = new Gcp.ParallelStore.Instance(\"instance\", new()\n {\n InstanceId = \"instance\",\n Location = \"us-central1-a\",\n Description = \"test instance\",\n CapacityGib = \"12000\",\n Network = network.Name,\n FileStripeLevel = \"FILE_STRIPE_LEVEL_MIN\",\n DirectoryStripeLevel = \"DIRECTORY_STRIPE_LEVEL_MIN\",\n Labels = \n {\n { \"test\", \"value\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parallelstore\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(true),\n\t\t\tMtu: pulumi.Int(8896),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Create an IP address\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"private_ip_alloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Create a private connection\n\t\t_, err = servicenetworking.NewConnection(ctx, \"default\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: network.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAlloc.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = parallelstore.NewInstance(ctx, \"instance\", \u0026parallelstore.InstanceArgs{\n\t\t\tInstanceId: pulumi.String(\"instance\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tDescription: pulumi.String(\"test instance\"),\n\t\t\tCapacityGib: pulumi.String(\"12000\"),\n\t\t\tNetwork: network.Name,\n\t\t\tFileStripeLevel: pulumi.String(\"FILE_STRIPE_LEVEL_MIN\"),\n\t\t\tDirectoryStripeLevel: pulumi.String(\"DIRECTORY_STRIPE_LEVEL_MIN\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"test\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.parallelstore.Instance;\nimport com.pulumi.gcp.parallelstore.InstanceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"network\")\n .autoCreateSubnetworks(true)\n .mtu(8896)\n .build());\n\n // Create an IP address\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder()\n .name(\"address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(network.id())\n .build());\n\n // Create a private connection\n var default_ = new Connection(\"default\", ConnectionArgs.builder()\n .network(network.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAlloc.name())\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder()\n .instanceId(\"instance\")\n .location(\"us-central1-a\")\n .description(\"test instance\")\n .capacityGib(12000)\n .network(network.name())\n .fileStripeLevel(\"FILE_STRIPE_LEVEL_MIN\")\n .directoryStripeLevel(\"DIRECTORY_STRIPE_LEVEL_MIN\")\n .labels(Map.of(\"test\", \"value\"))\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:parallelstore:Instance\n properties:\n instanceId: instance\n location: us-central1-a\n description: test instance\n capacityGib: 12000\n network: ${network.name}\n fileStripeLevel: FILE_STRIPE_LEVEL_MIN\n directoryStripeLevel: DIRECTORY_STRIPE_LEVEL_MIN\n labels:\n test: value\n options:\n dependsOn:\n - ${default}\n network:\n type: gcp:compute:Network\n properties:\n name: network\n autoCreateSubnetworks: true\n mtu: 8896\n # Create an IP address\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n name: private_ip_alloc\n properties:\n name: address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${network.id}\n # Create a private connection\n default:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${network.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAlloc.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/instances/{{instance_id}}`\n\n* `{{project}}/{{location}}/{{instance_id}}`\n\n* `{{location}}/{{instance_id}}`\n\nWhen using the `pulumi import` command, Instance can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:parallelstore/instance:Instance default projects/{{project}}/locations/{{location}}/instances/{{instance_id}}\n```\n\n```sh\n$ pulumi import gcp:parallelstore/instance:Instance default {{project}}/{{location}}/{{instance_id}}\n```\n\n```sh\n$ pulumi import gcp:parallelstore/instance:Instance default {{location}}/{{instance_id}}\n```\n\n",
+ "description": "A Parallelstore Instance.\n\n\n\n## Example Usage\n\n### Parallelstore Instance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n name: \"network\",\n autoCreateSubnetworks: true,\n mtu: 8896,\n});\n// Create an IP address\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"private_ip_alloc\", {\n name: \"address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: network.id,\n});\n// Create a private connection\nconst _default = new gcp.servicenetworking.Connection(\"default\", {\n network: network.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAlloc.name],\n});\nconst instance = new gcp.parallelstore.Instance(\"instance\", {\n instanceId: \"instance\",\n location: \"us-central1-a\",\n description: \"test instance\",\n capacityGib: \"12000\",\n network: network.name,\n fileStripeLevel: \"FILE_STRIPE_LEVEL_MIN\",\n directoryStripeLevel: \"DIRECTORY_STRIPE_LEVEL_MIN\",\n labels: {\n test: \"value\",\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n name=\"network\",\n auto_create_subnetworks=True,\n mtu=8896)\n# Create an IP address\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"private_ip_alloc\",\n name=\"address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=network.id)\n# Create a private connection\ndefault = gcp.servicenetworking.Connection(\"default\",\n network=network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_alloc.name])\ninstance = gcp.parallelstore.Instance(\"instance\",\n instance_id=\"instance\",\n location=\"us-central1-a\",\n description=\"test instance\",\n capacity_gib=\"12000\",\n network=network.name,\n file_stripe_level=\"FILE_STRIPE_LEVEL_MIN\",\n directory_stripe_level=\"DIRECTORY_STRIPE_LEVEL_MIN\",\n labels={\n \"test\": \"value\",\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"network\",\n AutoCreateSubnetworks = true,\n Mtu = 8896,\n });\n\n // Create an IP address\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"private_ip_alloc\", new()\n {\n Name = \"address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = network.Id,\n });\n\n // Create a private connection\n var @default = new Gcp.ServiceNetworking.Connection(\"default\", new()\n {\n Network = network.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAlloc.Name,\n },\n });\n\n var instance = new Gcp.ParallelStore.Instance(\"instance\", new()\n {\n InstanceId = \"instance\",\n Location = \"us-central1-a\",\n Description = \"test instance\",\n CapacityGib = \"12000\",\n Network = network.Name,\n FileStripeLevel = \"FILE_STRIPE_LEVEL_MIN\",\n DirectoryStripeLevel = \"DIRECTORY_STRIPE_LEVEL_MIN\",\n Labels = \n {\n { \"test\", \"value\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/parallelstore\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(true),\n\t\t\tMtu: pulumi.Int(8896),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Create an IP address\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"private_ip_alloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Create a private connection\n\t\t_, err = servicenetworking.NewConnection(ctx, \"default\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: network.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAlloc.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = parallelstore.NewInstance(ctx, \"instance\", \u0026parallelstore.InstanceArgs{\n\t\t\tInstanceId: pulumi.String(\"instance\"),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tDescription: pulumi.String(\"test instance\"),\n\t\t\tCapacityGib: pulumi.String(\"12000\"),\n\t\t\tNetwork: network.Name,\n\t\t\tFileStripeLevel: pulumi.String(\"FILE_STRIPE_LEVEL_MIN\"),\n\t\t\tDirectoryStripeLevel: pulumi.String(\"DIRECTORY_STRIPE_LEVEL_MIN\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"test\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.parallelstore.Instance;\nimport com.pulumi.gcp.parallelstore.InstanceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"network\")\n .autoCreateSubnetworks(true)\n .mtu(8896)\n .build());\n\n // Create an IP address\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder()\n .name(\"address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(network.id())\n .build());\n\n // Create a private connection\n var default_ = new Connection(\"default\", ConnectionArgs.builder()\n .network(network.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAlloc.name())\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder()\n .instanceId(\"instance\")\n .location(\"us-central1-a\")\n .description(\"test instance\")\n .capacityGib(12000)\n .network(network.name())\n .fileStripeLevel(\"FILE_STRIPE_LEVEL_MIN\")\n .directoryStripeLevel(\"DIRECTORY_STRIPE_LEVEL_MIN\")\n .labels(Map.of(\"test\", \"value\"))\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:parallelstore:Instance\n properties:\n instanceId: instance\n location: us-central1-a\n description: test instance\n capacityGib: 12000\n network: ${network.name}\n fileStripeLevel: FILE_STRIPE_LEVEL_MIN\n directoryStripeLevel: DIRECTORY_STRIPE_LEVEL_MIN\n labels:\n test: value\n options:\n dependsOn:\n - ${default}\n network:\n type: gcp:compute:Network\n properties:\n name: network\n autoCreateSubnetworks: true\n mtu: 8896\n # Create an IP address\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n name: private_ip_alloc\n properties:\n name: address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${network.id}\n # Create a private connection\n default:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${network.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAlloc.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/instances/{{instance_id}}`\n\n* `{{project}}/{{location}}/{{instance_id}}`\n\n* `{{location}}/{{instance_id}}`\n\nWhen using the `pulumi import` command, Instance can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:parallelstore/instance:Instance default projects/{{project}}/locations/{{location}}/instances/{{instance_id}}\n```\n\n```sh\n$ pulumi import gcp:parallelstore/instance:Instance default {{project}}/{{location}}/{{instance_id}}\n```\n\n```sh\n$ pulumi import gcp:parallelstore/instance:Instance default {{location}}/{{instance_id}}\n```\n\n",
"properties": {
"accessPoints": {
"type": "array",
@@ -253329,7 +256155,7 @@
}
},
"gcp:pubsub/subscription:Subscription": {
- "description": "A named resource representing the stream of messages from a single,\nspecific topic, to be delivered to the subscribing application.\n\n\nTo get more information about Subscription, see:\n\n* [API documentation](https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions)\n* How-to Guides\n * [Managing Subscriptions](https://cloud.google.com/pubsub/docs/admin#managing_subscriptions)\n\n\u003e **Note:** You can retrieve the email of the Google Managed Pub/Sub Service Account used for forwarding\nby using the `gcp.projects.ServiceIdentity` resource.\n\n## Example Usage\n\n### Pubsub Subscription Push\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n ackDeadlineSeconds: 20,\n labels: {\n foo: \"bar\",\n },\n pushConfig: {\n pushEndpoint: \"https://example.com/push\",\n attributes: {\n \"x-goog-version\": \"v1\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n ack_deadline_seconds=20,\n labels={\n \"foo\": \"bar\",\n },\n push_config={\n \"push_endpoint\": \"https://example.com/push\",\n \"attributes\": {\n \"x-goog-version\": \"v1\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n AckDeadlineSeconds = 20,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n PushConfig = new Gcp.PubSub.Inputs.SubscriptionPushConfigArgs\n {\n PushEndpoint = \"https://example.com/push\",\n Attributes = \n {\n { \"x-goog-version\", \"v1\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPushConfig: \u0026pubsub.SubscriptionPushConfigArgs{\n\t\t\t\tPushEndpoint: pulumi.String(\"https://example.com/push\"),\n\t\t\t\tAttributes: pulumi.StringMap{\n\t\t\t\t\t\"x-goog-version\": pulumi.String(\"v1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionPushConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .ackDeadlineSeconds(20)\n .labels(Map.of(\"foo\", \"bar\"))\n .pushConfig(SubscriptionPushConfigArgs.builder()\n .pushEndpoint(\"https://example.com/push\")\n .attributes(Map.of(\"x-goog-version\", \"v1\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n ackDeadlineSeconds: 20\n labels:\n foo: bar\n pushConfig:\n pushEndpoint: https://example.com/push\n attributes:\n x-goog-version: v1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Pull\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n labels: {\n foo: \"bar\",\n },\n messageRetentionDuration: \"1200s\",\n retainAckedMessages: true,\n ackDeadlineSeconds: 20,\n expirationPolicy: {\n ttl: \"300000.5s\",\n },\n retryPolicy: {\n minimumBackoff: \"10s\",\n },\n enableMessageOrdering: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n labels={\n \"foo\": \"bar\",\n },\n message_retention_duration=\"1200s\",\n retain_acked_messages=True,\n ack_deadline_seconds=20,\n expiration_policy={\n \"ttl\": \"300000.5s\",\n },\n retry_policy={\n \"minimum_backoff\": \"10s\",\n },\n enable_message_ordering=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n MessageRetentionDuration = \"1200s\",\n RetainAckedMessages = true,\n AckDeadlineSeconds = 20,\n ExpirationPolicy = new Gcp.PubSub.Inputs.SubscriptionExpirationPolicyArgs\n {\n Ttl = \"300000.5s\",\n },\n RetryPolicy = new Gcp.PubSub.Inputs.SubscriptionRetryPolicyArgs\n {\n MinimumBackoff = \"10s\",\n },\n EnableMessageOrdering = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tMessageRetentionDuration: pulumi.String(\"1200s\"),\n\t\t\tRetainAckedMessages: pulumi.Bool(true),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t\tExpirationPolicy: \u0026pubsub.SubscriptionExpirationPolicyArgs{\n\t\t\t\tTtl: pulumi.String(\"300000.5s\"),\n\t\t\t},\n\t\t\tRetryPolicy: \u0026pubsub.SubscriptionRetryPolicyArgs{\n\t\t\t\tMinimumBackoff: pulumi.String(\"10s\"),\n\t\t\t},\n\t\t\tEnableMessageOrdering: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionExpirationPolicyArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionRetryPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .messageRetentionDuration(\"1200s\")\n .retainAckedMessages(true)\n .ackDeadlineSeconds(20)\n .expirationPolicy(SubscriptionExpirationPolicyArgs.builder()\n .ttl(\"300000.5s\")\n .build())\n .retryPolicy(SubscriptionRetryPolicyArgs.builder()\n .minimumBackoff(\"10s\")\n .build())\n .enableMessageOrdering(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n labels:\n foo: bar\n messageRetentionDuration: 1200s\n retainAckedMessages: true\n ackDeadlineSeconds: 20\n expirationPolicy:\n ttl: 300000.5s\n retryPolicy:\n minimumBackoff: 10s\n enableMessageOrdering: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Pull Filter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n labels: {\n foo: \"bar\",\n },\n filter: ` attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n`,\n ackDeadlineSeconds: 20,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n labels={\n \"foo\": \"bar\",\n },\n filter=\"\"\" attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n\"\"\",\n ack_deadline_seconds=20)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Filter = @\" attributes.foo = \"\"foo\"\"\n AND attributes.bar = \"\"bar\"\"\n\",\n AckDeadlineSeconds = 20,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tFilter: pulumi.String(\" attributes.foo = \\\"foo\\\"\\n AND attributes.bar = \\\"bar\\\"\\n\"),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .filter(\"\"\"\n attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n \"\"\")\n .ackDeadlineSeconds(20)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n labels:\n foo: bar\n filter: |2\n attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n ackDeadlineSeconds: 20\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Dead Letter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleDeadLetter = new gcp.pubsub.Topic(\"example_dead_letter\", {name: \"example-topic-dead-letter\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n deadLetterPolicy: {\n deadLetterTopic: exampleDeadLetter.id,\n maxDeliveryAttempts: 10,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_dead_letter = gcp.pubsub.Topic(\"example_dead_letter\", name=\"example-topic-dead-letter\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n dead_letter_policy={\n \"dead_letter_topic\": example_dead_letter.id,\n \"max_delivery_attempts\": 10,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleDeadLetter = new Gcp.PubSub.Topic(\"example_dead_letter\", new()\n {\n Name = \"example-topic-dead-letter\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n DeadLetterPolicy = new Gcp.PubSub.Inputs.SubscriptionDeadLetterPolicyArgs\n {\n DeadLetterTopic = exampleDeadLetter.Id,\n MaxDeliveryAttempts = 10,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeadLetter, err := pubsub.NewTopic(ctx, \"example_dead_letter\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic-dead-letter\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tDeadLetterPolicy: \u0026pubsub.SubscriptionDeadLetterPolicyArgs{\n\t\t\t\tDeadLetterTopic: exampleDeadLetter.ID(),\n\t\t\t\tMaxDeliveryAttempts: pulumi.Int(10),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionDeadLetterPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleDeadLetter = new Topic(\"exampleDeadLetter\", TopicArgs.builder()\n .name(\"example-topic-dead-letter\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .deadLetterPolicy(SubscriptionDeadLetterPolicyArgs.builder()\n .deadLetterTopic(exampleDeadLetter.id())\n .maxDeliveryAttempts(10)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleDeadLetter:\n type: gcp:pubsub:Topic\n name: example_dead_letter\n properties:\n name: example-topic-dead-letter\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n deadLetterPolicy:\n deadLetterTopic: ${exampleDeadLetter.id}\n maxDeliveryAttempts: 10\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n deletionProtection: false,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\",\n deletion_protection=False)\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n DeletionProtection = false,\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .deletionProtection(false)\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\n deletionProtection: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq Table Schema\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n deletionProtection: false,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n useTableSchema: true,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\",\n deletion_protection=False)\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"use_table_schema\": True,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n DeletionProtection = false,\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n UseTableSchema = true,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tUseTableSchema: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .deletionProtection(false)\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project,datasetId,tableId);\n }))\n .useTableSchema(true)\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n useTableSchema: true\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\n deletionProtection: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq Service Account\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst bqWriteServiceAccount = new gcp.serviceaccount.Account(\"bq_write_service_account\", {\n accountId: \"example-bqw\",\n displayName: \"BQ Write Service Account\",\n});\nconst project = gcp.organizations.getProject({});\nconst bigqueryMetadataViewer = new gcp.projects.IAMMember(\"bigquery_metadata_viewer\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.metadataViewer\",\n member: pulumi.interpolate`serviceAccount:${bqWriteServiceAccount.email}`,\n});\nconst bigqueryDataEditor = new gcp.projects.IAMMember(\"bigquery_data_editor\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.dataEditor\",\n member: pulumi.interpolate`serviceAccount:${bqWriteServiceAccount.email}`,\n});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n deletionProtection: false,\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n serviceAccountEmail: bqWriteServiceAccount.email,\n },\n}, {\n dependsOn: [\n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nbq_write_service_account = gcp.serviceaccount.Account(\"bq_write_service_account\",\n account_id=\"example-bqw\",\n display_name=\"BQ Write Service Account\")\nproject = gcp.organizations.get_project()\nbigquery_metadata_viewer = gcp.projects.IAMMember(\"bigquery_metadata_viewer\",\n project=project.project_id,\n role=\"roles/bigquery.metadataViewer\",\n member=bq_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nbigquery_data_editor = gcp.projects.IAMMember(\"bigquery_data_editor\",\n project=project.project_id,\n role=\"roles/bigquery.dataEditor\",\n member=bq_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n deletion_protection=False,\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"service_account_email\": bq_write_service_account.email,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n bq_write_service_account,\n bigquery_metadata_viewer,\n bigquery_data_editor,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var bqWriteServiceAccount = new Gcp.ServiceAccount.Account(\"bq_write_service_account\", new()\n {\n AccountId = \"example-bqw\",\n DisplayName = \"BQ Write Service Account\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var bigqueryMetadataViewer = new Gcp.Projects.IAMMember(\"bigquery_metadata_viewer\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.metadataViewer\",\n Member = bqWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var bigqueryDataEditor = new Gcp.Projects.IAMMember(\"bigquery_data_editor\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.dataEditor\",\n Member = bqWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n DeletionProtection = false,\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n ServiceAccountEmail = bqWriteServiceAccount.Email,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqWriteServiceAccount, err := serviceaccount.NewAccount(ctx, \"bq_write_service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"example-bqw\"),\n\t\t\tDisplayName: pulumi.String(\"BQ Write Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryMetadataViewer, err := projects.NewIAMMember(ctx, \"bigquery_metadata_viewer\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.metadataViewer\"),\n\t\t\tMember: bqWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryDataEditor, err := projects.NewIAMMember(ctx, \"bigquery_data_editor\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataEditor\"),\n\t\t\tMember: bqWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tServiceAccountEmail: bqWriteServiceAccount.Email,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbqWriteServiceAccount,\n\t\t\tbigqueryMetadataViewer,\n\t\t\tbigqueryDataEditor,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var bqWriteServiceAccount = new Account(\"bqWriteServiceAccount\", AccountArgs.builder()\n .accountId(\"example-bqw\")\n .displayName(\"BQ Write Service Account\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var bigqueryMetadataViewer = new IAMMember(\"bigqueryMetadataViewer\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.metadataViewer\")\n .member(bqWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var bigqueryDataEditor = new IAMMember(\"bigqueryDataEditor\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.dataEditor\")\n .member(bqWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .deletionProtection(false)\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project.applyValue(getProjectResult -\u003e getProjectResult),datasetId,tableId);\n }))\n .serviceAccountEmail(bqWriteServiceAccount.email())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n serviceAccountEmail: ${bqWriteServiceAccount.email}\n options:\n dependsOn:\n - ${bqWriteServiceAccount}\n - ${bigqueryMetadataViewer}\n - ${bigqueryDataEditor}\n bqWriteServiceAccount:\n type: gcp:serviceaccount:Account\n name: bq_write_service_account\n properties:\n accountId: example-bqw\n displayName: BQ Write Service Account\n bigqueryMetadataViewer:\n type: gcp:projects:IAMMember\n name: bigquery_metadata_viewer\n properties:\n project: ${project.projectId}\n role: roles/bigquery.metadataViewer\n member: serviceAccount:${bqWriteServiceAccount.email}\n bigqueryDataEditor:\n type: gcp:projects:IAMMember\n name: bigquery_data_editor\n properties:\n project: ${project.projectId}\n role: roles/bigquery.dataEditor\n member: serviceAccount:${bqWriteServiceAccount.email}\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n deletionProtection: false\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst project = gcp.organizations.getProject({});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com`),\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_40289\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n maxMessages: 1000,\n },\n}, {\n dependsOn: [\n example,\n admin,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nproject = gcp.organizations.get_project()\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_40289\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"max_messages\": 1000,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n admin,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-pubsub.iam.gserviceaccount.com\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_40289\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n MaxMessages = 1000,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n admin,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-pubsub.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_40289\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tMaxMessages: pulumi.Int(1000),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-pubsub.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_40289\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .maxMessages(1000)\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n admin)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_40289\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n maxMessages: 1000\n options:\n dependsOn:\n - ${example}\n - ${admin}\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage Avro\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst project = gcp.organizations.getProject({});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com`),\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_33395\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n maxMessages: 1000,\n avroConfig: {\n writeMetadata: true,\n useTopicSchema: true,\n },\n },\n}, {\n dependsOn: [\n example,\n admin,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nproject = gcp.organizations.get_project()\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_33395\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"max_messages\": 1000,\n \"avro_config\": {\n \"write_metadata\": True,\n \"use_topic_schema\": True,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n admin,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-pubsub.iam.gserviceaccount.com\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_33395\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n MaxMessages = 1000,\n AvroConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigAvroConfigArgs\n {\n WriteMetadata = true,\n UseTopicSchema = true,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n admin,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-pubsub.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_33395\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tMaxMessages: pulumi.Int(1000),\n\t\t\t\tAvroConfig: \u0026pubsub.SubscriptionCloudStorageConfigAvroConfigArgs{\n\t\t\t\t\tWriteMetadata: pulumi.Bool(true),\n\t\t\t\t\tUseTopicSchema: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigAvroConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-pubsub.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_33395\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .maxMessages(1000)\n .avroConfig(SubscriptionCloudStorageConfigAvroConfigArgs.builder()\n .writeMetadata(true)\n .useTopicSchema(true)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n admin)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_33395\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n maxMessages: 1000\n avroConfig:\n writeMetadata: true\n useTopicSchema: true\n options:\n dependsOn:\n - ${example}\n - ${admin}\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage Service Account\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst storageWriteServiceAccount = new gcp.serviceaccount.Account(\"storage_write_service_account\", {\n accountId: \"example-stw\",\n displayName: \"Storage Write Service Account\",\n});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: pulumi.interpolate`serviceAccount:${storageWriteServiceAccount.email}`,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_76044\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n serviceAccountEmail: storageWriteServiceAccount.email,\n },\n}, {\n dependsOn: [\n storageWriteServiceAccount,\n example,\n admin,\n ],\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nstorage_write_service_account = gcp.serviceaccount.Account(\"storage_write_service_account\",\n account_id=\"example-stw\",\n display_name=\"Storage Write Service Account\")\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=storage_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_76044\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"service_account_email\": storage_write_service_account.email,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n storage_write_service_account,\n example,\n admin,\n ]))\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var storageWriteServiceAccount = new Gcp.ServiceAccount.Account(\"storage_write_service_account\", new()\n {\n AccountId = \"example-stw\",\n DisplayName = \"Storage Write Service Account\",\n });\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = storageWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_76044\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n ServiceAccountEmail = storageWriteServiceAccount.Email,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n storageWriteServiceAccount,\n example,\n admin,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstorageWriteServiceAccount, err := serviceaccount.NewAccount(ctx, \"storage_write_service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"example-stw\"),\n\t\t\tDisplayName: pulumi.String(\"Storage Write Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: storageWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_76044\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tServiceAccountEmail: storageWriteServiceAccount.Email,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tstorageWriteServiceAccount,\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var storageWriteServiceAccount = new Account(\"storageWriteServiceAccount\", AccountArgs.builder()\n .accountId(\"example-stw\")\n .displayName(\"Storage Write Service Account\")\n .build());\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(storageWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_76044\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .serviceAccountEmail(storageWriteServiceAccount.email())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n storageWriteServiceAccount,\n example,\n admin)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_76044\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n serviceAccountEmail: ${storageWriteServiceAccount.email}\n options:\n dependsOn:\n - ${storageWriteServiceAccount}\n - ${example}\n - ${admin}\n storageWriteServiceAccount:\n type: gcp:serviceaccount:Account\n name: storage_write_service_account\n properties:\n accountId: example-stw\n displayName: Storage Write Service Account\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:${storageWriteServiceAccount.email}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSubscription can be imported using any of these accepted formats:\n\n* `projects/{{project}}/subscriptions/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Subscription can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default projects/{{project}}/subscriptions/{{name}}\n```\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default {{name}}\n```\n\n",
+ "description": "A named resource representing the stream of messages from a single,\nspecific topic, to be delivered to the subscribing application.\n\n\nTo get more information about Subscription, see:\n\n* [API documentation](https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions)\n* How-to Guides\n * [Managing Subscriptions](https://cloud.google.com/pubsub/docs/admin#managing_subscriptions)\n\n\u003e **Note:** You can retrieve the email of the Google Managed Pub/Sub Service Account used for forwarding\nby using the `gcp.projects.ServiceIdentity` resource.\n\n## Example Usage\n\n### Pubsub Subscription Push\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n ackDeadlineSeconds: 20,\n labels: {\n foo: \"bar\",\n },\n pushConfig: {\n pushEndpoint: \"https://example.com/push\",\n attributes: {\n \"x-goog-version\": \"v1\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n ack_deadline_seconds=20,\n labels={\n \"foo\": \"bar\",\n },\n push_config={\n \"push_endpoint\": \"https://example.com/push\",\n \"attributes\": {\n \"x-goog-version\": \"v1\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n AckDeadlineSeconds = 20,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n PushConfig = new Gcp.PubSub.Inputs.SubscriptionPushConfigArgs\n {\n PushEndpoint = \"https://example.com/push\",\n Attributes = \n {\n { \"x-goog-version\", \"v1\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tPushConfig: \u0026pubsub.SubscriptionPushConfigArgs{\n\t\t\t\tPushEndpoint: pulumi.String(\"https://example.com/push\"),\n\t\t\t\tAttributes: pulumi.StringMap{\n\t\t\t\t\t\"x-goog-version\": pulumi.String(\"v1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionPushConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .ackDeadlineSeconds(20)\n .labels(Map.of(\"foo\", \"bar\"))\n .pushConfig(SubscriptionPushConfigArgs.builder()\n .pushEndpoint(\"https://example.com/push\")\n .attributes(Map.of(\"x-goog-version\", \"v1\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n ackDeadlineSeconds: 20\n labels:\n foo: bar\n pushConfig:\n pushEndpoint: https://example.com/push\n attributes:\n x-goog-version: v1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Pull\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n labels: {\n foo: \"bar\",\n },\n messageRetentionDuration: \"1200s\",\n retainAckedMessages: true,\n ackDeadlineSeconds: 20,\n expirationPolicy: {\n ttl: \"300000.5s\",\n },\n retryPolicy: {\n minimumBackoff: \"10s\",\n },\n enableMessageOrdering: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n labels={\n \"foo\": \"bar\",\n },\n message_retention_duration=\"1200s\",\n retain_acked_messages=True,\n ack_deadline_seconds=20,\n expiration_policy={\n \"ttl\": \"300000.5s\",\n },\n retry_policy={\n \"minimum_backoff\": \"10s\",\n },\n enable_message_ordering=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n MessageRetentionDuration = \"1200s\",\n RetainAckedMessages = true,\n AckDeadlineSeconds = 20,\n ExpirationPolicy = new Gcp.PubSub.Inputs.SubscriptionExpirationPolicyArgs\n {\n Ttl = \"300000.5s\",\n },\n RetryPolicy = new Gcp.PubSub.Inputs.SubscriptionRetryPolicyArgs\n {\n MinimumBackoff = \"10s\",\n },\n EnableMessageOrdering = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tMessageRetentionDuration: pulumi.String(\"1200s\"),\n\t\t\tRetainAckedMessages: pulumi.Bool(true),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t\tExpirationPolicy: \u0026pubsub.SubscriptionExpirationPolicyArgs{\n\t\t\t\tTtl: pulumi.String(\"300000.5s\"),\n\t\t\t},\n\t\t\tRetryPolicy: \u0026pubsub.SubscriptionRetryPolicyArgs{\n\t\t\t\tMinimumBackoff: pulumi.String(\"10s\"),\n\t\t\t},\n\t\t\tEnableMessageOrdering: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionExpirationPolicyArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionRetryPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .messageRetentionDuration(\"1200s\")\n .retainAckedMessages(true)\n .ackDeadlineSeconds(20)\n .expirationPolicy(SubscriptionExpirationPolicyArgs.builder()\n .ttl(\"300000.5s\")\n .build())\n .retryPolicy(SubscriptionRetryPolicyArgs.builder()\n .minimumBackoff(\"10s\")\n .build())\n .enableMessageOrdering(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n labels:\n foo: bar\n messageRetentionDuration: 1200s\n retainAckedMessages: true\n ackDeadlineSeconds: 20\n expirationPolicy:\n ttl: 300000.5s\n retryPolicy:\n minimumBackoff: 10s\n enableMessageOrdering: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Pull Filter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n labels: {\n foo: \"bar\",\n },\n filter: ` attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n`,\n ackDeadlineSeconds: 20,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n labels={\n \"foo\": \"bar\",\n },\n filter=\"\"\" attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n\"\"\",\n ack_deadline_seconds=20)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Filter = @\" attributes.foo = \"\"foo\"\"\n AND attributes.bar = \"\"bar\"\"\n\",\n AckDeadlineSeconds = 20,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tFilter: pulumi.String(\" attributes.foo = \\\"foo\\\"\\n AND attributes.bar = \\\"bar\\\"\\n\"),\n\t\t\tAckDeadlineSeconds: pulumi.Int(20),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .filter(\"\"\"\n attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n \"\"\")\n .ackDeadlineSeconds(20)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n labels:\n foo: bar\n filter: |2\n attributes.foo = \"foo\"\n AND attributes.bar = \"bar\"\n ackDeadlineSeconds: 20\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Dead Letter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst exampleDeadLetter = new gcp.pubsub.Topic(\"example_dead_letter\", {name: \"example-topic-dead-letter\"});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n deadLetterPolicy: {\n deadLetterTopic: exampleDeadLetter.id,\n maxDeliveryAttempts: 10,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nexample_dead_letter = gcp.pubsub.Topic(\"example_dead_letter\", name=\"example-topic-dead-letter\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n dead_letter_policy={\n \"dead_letter_topic\": example_dead_letter.id,\n \"max_delivery_attempts\": 10,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var exampleDeadLetter = new Gcp.PubSub.Topic(\"example_dead_letter\", new()\n {\n Name = \"example-topic-dead-letter\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n DeadLetterPolicy = new Gcp.PubSub.Inputs.SubscriptionDeadLetterPolicyArgs\n {\n DeadLetterTopic = exampleDeadLetter.Id,\n MaxDeliveryAttempts = 10,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleDeadLetter, err := pubsub.NewTopic(ctx, \"example_dead_letter\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic-dead-letter\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tDeadLetterPolicy: \u0026pubsub.SubscriptionDeadLetterPolicyArgs{\n\t\t\t\tDeadLetterTopic: exampleDeadLetter.ID(),\n\t\t\t\tMaxDeliveryAttempts: pulumi.Int(10),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionDeadLetterPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var exampleDeadLetter = new Topic(\"exampleDeadLetter\", TopicArgs.builder()\n .name(\"example-topic-dead-letter\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .deadLetterPolicy(SubscriptionDeadLetterPolicyArgs.builder()\n .deadLetterTopic(exampleDeadLetter.id())\n .maxDeliveryAttempts(10)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleDeadLetter:\n type: gcp:pubsub:Topic\n name: example_dead_letter\n properties:\n name: example-topic-dead-letter\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n deadLetterPolicy:\n deadLetterTopic: ${exampleDeadLetter.id}\n maxDeliveryAttempts: 10\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n deletionProtection: false,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\",\n deletion_protection=False)\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n DeletionProtection = false,\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .deletionProtection(false)\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\n deletionProtection: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq Table Schema\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n deletionProtection: false,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n useTableSchema: true,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\",\n deletion_protection=False)\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"use_table_schema\": True,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n DeletionProtection = false,\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n UseTableSchema = true,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tUseTableSchema: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .deletionProtection(false)\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project,datasetId,tableId);\n }))\n .useTableSchema(true)\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n useTableSchema: true\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\n deletionProtection: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Bq Service Account\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst bqWriteServiceAccount = new gcp.serviceaccount.Account(\"bq_write_service_account\", {\n accountId: \"example-bqw\",\n displayName: \"BQ Write Service Account\",\n});\nconst project = gcp.organizations.getProject({});\nconst bigqueryMetadataViewer = new gcp.projects.IAMMember(\"bigquery_metadata_viewer\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.metadataViewer\",\n member: pulumi.interpolate`serviceAccount:${bqWriteServiceAccount.email}`,\n});\nconst bigqueryDataEditor = new gcp.projects.IAMMember(\"bigquery_data_editor\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.dataEditor\",\n member: pulumi.interpolate`serviceAccount:${bqWriteServiceAccount.email}`,\n});\nconst test = new gcp.bigquery.Dataset(\"test\", {datasetId: \"example_dataset\"});\nconst testTable = new gcp.bigquery.Table(\"test\", {\n deletionProtection: false,\n tableId: \"example_table\",\n datasetId: test.datasetId,\n schema: `[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: example.id,\n bigqueryConfig: {\n table: pulumi.interpolate`${testTable.project}.${testTable.datasetId}.${testTable.tableId}`,\n serviceAccountEmail: bqWriteServiceAccount.email,\n },\n}, {\n dependsOn: [\n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nbq_write_service_account = gcp.serviceaccount.Account(\"bq_write_service_account\",\n account_id=\"example-bqw\",\n display_name=\"BQ Write Service Account\")\nproject = gcp.organizations.get_project()\nbigquery_metadata_viewer = gcp.projects.IAMMember(\"bigquery_metadata_viewer\",\n project=project.project_id,\n role=\"roles/bigquery.metadataViewer\",\n member=bq_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nbigquery_data_editor = gcp.projects.IAMMember(\"bigquery_data_editor\",\n project=project.project_id,\n role=\"roles/bigquery.dataEditor\",\n member=bq_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\ntest = gcp.bigquery.Dataset(\"test\", dataset_id=\"example_dataset\")\ntest_table = gcp.bigquery.Table(\"test\",\n deletion_protection=False,\n table_id=\"example_table\",\n dataset_id=test.dataset_id,\n schema=\"\"\"[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n\"\"\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example.id,\n bigquery_config={\n \"table\": pulumi.Output.all(\n project=test_table.project,\n dataset_id=test_table.dataset_id,\n table_id=test_table.table_id\n).apply(lambda resolved_outputs: f\"{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"service_account_email\": bq_write_service_account.email,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n bq_write_service_account,\n bigquery_metadata_viewer,\n bigquery_data_editor,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var bqWriteServiceAccount = new Gcp.ServiceAccount.Account(\"bq_write_service_account\", new()\n {\n AccountId = \"example-bqw\",\n DisplayName = \"BQ Write Service Account\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var bigqueryMetadataViewer = new Gcp.Projects.IAMMember(\"bigquery_metadata_viewer\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.metadataViewer\",\n Member = bqWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var bigqueryDataEditor = new Gcp.Projects.IAMMember(\"bigquery_data_editor\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.dataEditor\",\n Member = bqWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var test = new Gcp.BigQuery.Dataset(\"test\", new()\n {\n DatasetId = \"example_dataset\",\n });\n\n var testTable = new Gcp.BigQuery.Table(\"test\", new()\n {\n DeletionProtection = false,\n TableId = \"example_table\",\n DatasetId = test.DatasetId,\n Schema = @\"[\n {\n \"\"name\"\": \"\"data\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The data\"\"\n }\n]\n\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = example.Id,\n BigqueryConfig = new Gcp.PubSub.Inputs.SubscriptionBigqueryConfigArgs\n {\n Table = Output.Tuple(testTable.Project, testTable.DatasetId, testTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"{project}.{datasetId}.{tableId}\";\n }),\n ServiceAccountEmail = bqWriteServiceAccount.Email,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqWriteServiceAccount, err := serviceaccount.NewAccount(ctx, \"bq_write_service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"example-bqw\"),\n\t\t\tDisplayName: pulumi.String(\"BQ Write Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryMetadataViewer, err := projects.NewIAMMember(ctx, \"bigquery_metadata_viewer\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.metadataViewer\"),\n\t\t\tMember: bqWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryDataEditor, err := projects.NewIAMMember(ctx, \"bigquery_data_editor\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataEditor\"),\n\t\t\tMember: bqWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttest, err := bigquery.NewDataset(ctx, \"test\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTable, err := bigquery.NewTable(ctx, \"test\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTableId: pulumi.String(\"example_table\"),\n\t\t\tDatasetId: test.DatasetId,\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: example.ID(),\n\t\t\tBigqueryConfig: \u0026pubsub.SubscriptionBigqueryConfigArgs{\n\t\t\t\tTable: pulumi.All(testTable.Project, testTable.DatasetId, testTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tServiceAccountEmail: bqWriteServiceAccount.Email,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbqWriteServiceAccount,\n\t\t\tbigqueryMetadataViewer,\n\t\t\tbigqueryDataEditor,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionBigqueryConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Topic(\"example\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var bqWriteServiceAccount = new Account(\"bqWriteServiceAccount\", AccountArgs.builder()\n .accountId(\"example-bqw\")\n .displayName(\"BQ Write Service Account\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var bigqueryMetadataViewer = new IAMMember(\"bigqueryMetadataViewer\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.metadataViewer\")\n .member(bqWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var bigqueryDataEditor = new IAMMember(\"bigqueryDataEditor\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.dataEditor\")\n .member(bqWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var test = new Dataset(\"test\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .build());\n\n var testTable = new Table(\"testTable\", TableArgs.builder()\n .deletionProtection(false)\n .tableId(\"example_table\")\n .datasetId(test.datasetId())\n .schema(\"\"\"\n[\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n]\n \"\"\")\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(example.id())\n .bigqueryConfig(SubscriptionBigqueryConfigArgs.builder()\n .table(Output.tuple(testTable.project(), testTable.datasetId(), testTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"%s.%s.%s\", project.applyValue(getProjectResult -\u003e getProjectResult),datasetId,tableId);\n }))\n .serviceAccountEmail(bqWriteServiceAccount.email())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n bqWriteServiceAccount,\n bigqueryMetadataViewer,\n bigqueryDataEditor)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:pubsub:Topic\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${example.id}\n bigqueryConfig:\n table: ${testTable.project}.${testTable.datasetId}.${testTable.tableId}\n serviceAccountEmail: ${bqWriteServiceAccount.email}\n options:\n dependsOn:\n - ${bqWriteServiceAccount}\n - ${bigqueryMetadataViewer}\n - ${bigqueryDataEditor}\n bqWriteServiceAccount:\n type: gcp:serviceaccount:Account\n name: bq_write_service_account\n properties:\n accountId: example-bqw\n displayName: BQ Write Service Account\n bigqueryMetadataViewer:\n type: gcp:projects:IAMMember\n name: bigquery_metadata_viewer\n properties:\n project: ${project.projectId}\n role: roles/bigquery.metadataViewer\n member: serviceAccount:${bqWriteServiceAccount.email}\n bigqueryDataEditor:\n type: gcp:projects:IAMMember\n name: bigquery_data_editor\n properties:\n project: ${project.projectId}\n role: roles/bigquery.dataEditor\n member: serviceAccount:${bqWriteServiceAccount.email}\n test:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_dataset\n testTable:\n type: gcp:bigquery:Table\n name: test\n properties:\n deletionProtection: false\n tableId: example_table\n datasetId: ${test.datasetId}\n schema: |\n [\n {\n \"name\": \"data\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The data\"\n }\n ]\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst project = gcp.organizations.getProject({});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com`),\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_33395\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n maxMessages: 1000,\n },\n}, {\n dependsOn: [\n example,\n admin,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nproject = gcp.organizations.get_project()\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_33395\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"max_messages\": 1000,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n admin,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-pubsub.iam.gserviceaccount.com\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_33395\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n MaxMessages = 1000,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n admin,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-pubsub.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_33395\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tMaxMessages: pulumi.Int(1000),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-pubsub.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_33395\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .maxMessages(1000)\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n admin)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_33395\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n maxMessages: 1000\n options:\n dependsOn:\n - ${example}\n - ${admin}\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage Avro\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst project = gcp.organizations.getProject({});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com`),\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_76044\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n maxMessages: 1000,\n avroConfig: {\n writeMetadata: true,\n useTopicSchema: true,\n },\n },\n}, {\n dependsOn: [\n example,\n admin,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nproject = gcp.organizations.get_project()\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\")\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_76044\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"max_messages\": 1000,\n \"avro_config\": {\n \"write_metadata\": True,\n \"use_topic_schema\": True,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[\n example,\n admin,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-pubsub.iam.gserviceaccount.com\",\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_76044\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n MaxMessages = 1000,\n AvroConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigAvroConfigArgs\n {\n WriteMetadata = true,\n UseTopicSchema = true,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n example,\n admin,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-pubsub.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_76044\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tMaxMessages: pulumi.Int(1000),\n\t\t\t\tAvroConfig: \u0026pubsub.SubscriptionCloudStorageConfigAvroConfigArgs{\n\t\t\t\t\tWriteMetadata: pulumi.Bool(true),\n\t\t\t\t\tUseTopicSchema: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigAvroConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-pubsub.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_76044\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .maxMessages(1000)\n .avroConfig(SubscriptionCloudStorageConfigAvroConfigArgs.builder()\n .writeMetadata(true)\n .useTopicSchema(true)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n example,\n admin)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_76044\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n maxMessages: 1000\n avroConfig:\n writeMetadata: true\n useTopicSchema: true\n options:\n dependsOn:\n - ${example}\n - ${admin}\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:service-${project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Pubsub Subscription Push Cloudstorage Service Account\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.storage.Bucket(\"example\", {\n name: \"example-bucket\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst exampleTopic = new gcp.pubsub.Topic(\"example\", {name: \"example-topic\"});\nconst storageWriteServiceAccount = new gcp.serviceaccount.Account(\"storage_write_service_account\", {\n accountId: \"example-stw\",\n displayName: \"Storage Write Service Account\",\n});\nconst admin = new gcp.storage.BucketIAMMember(\"admin\", {\n bucket: example.name,\n role: \"roles/storage.admin\",\n member: pulumi.interpolate`serviceAccount:${storageWriteServiceAccount.email}`,\n});\nconst exampleSubscription = new gcp.pubsub.Subscription(\"example\", {\n name: \"example-subscription\",\n topic: exampleTopic.id,\n cloudStorageConfig: {\n bucket: example.name,\n filenamePrefix: \"pre-\",\n filenameSuffix: \"-_69391\",\n filenameDatetimeFormat: \"YYYY-MM-DD/hh_mm_ssZ\",\n maxBytes: 1000,\n maxDuration: \"300s\",\n serviceAccountEmail: storageWriteServiceAccount.email,\n },\n}, {\n dependsOn: [\n storageWriteServiceAccount,\n example,\n admin,\n ],\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.storage.Bucket(\"example\",\n name=\"example-bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nexample_topic = gcp.pubsub.Topic(\"example\", name=\"example-topic\")\nstorage_write_service_account = gcp.serviceaccount.Account(\"storage_write_service_account\",\n account_id=\"example-stw\",\n display_name=\"Storage Write Service Account\")\nadmin = gcp.storage.BucketIAMMember(\"admin\",\n bucket=example.name,\n role=\"roles/storage.admin\",\n member=storage_write_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nexample_subscription = gcp.pubsub.Subscription(\"example\",\n name=\"example-subscription\",\n topic=example_topic.id,\n cloud_storage_config={\n \"bucket\": example.name,\n \"filename_prefix\": \"pre-\",\n \"filename_suffix\": \"-_69391\",\n \"filename_datetime_format\": \"YYYY-MM-DD/hh_mm_ssZ\",\n \"max_bytes\": 1000,\n \"max_duration\": \"300s\",\n \"service_account_email\": storage_write_service_account.email,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n storage_write_service_account,\n example,\n admin,\n ]))\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Storage.Bucket(\"example\", new()\n {\n Name = \"example-bucket\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var exampleTopic = new Gcp.PubSub.Topic(\"example\", new()\n {\n Name = \"example-topic\",\n });\n\n var storageWriteServiceAccount = new Gcp.ServiceAccount.Account(\"storage_write_service_account\", new()\n {\n AccountId = \"example-stw\",\n DisplayName = \"Storage Write Service Account\",\n });\n\n var admin = new Gcp.Storage.BucketIAMMember(\"admin\", new()\n {\n Bucket = example.Name,\n Role = \"roles/storage.admin\",\n Member = storageWriteServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var exampleSubscription = new Gcp.PubSub.Subscription(\"example\", new()\n {\n Name = \"example-subscription\",\n Topic = exampleTopic.Id,\n CloudStorageConfig = new Gcp.PubSub.Inputs.SubscriptionCloudStorageConfigArgs\n {\n Bucket = example.Name,\n FilenamePrefix = \"pre-\",\n FilenameSuffix = \"-_69391\",\n FilenameDatetimeFormat = \"YYYY-MM-DD/hh_mm_ssZ\",\n MaxBytes = 1000,\n MaxDuration = \"300s\",\n ServiceAccountEmail = storageWriteServiceAccount.Email,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n storageWriteServiceAccount,\n example,\n admin,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := storage.NewBucket(ctx, \"example\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"example-bucket\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := pubsub.NewTopic(ctx, \"example\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"example-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tstorageWriteServiceAccount, err := serviceaccount.NewAccount(ctx, \"storage_write_service_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"example-stw\"),\n\t\t\tDisplayName: pulumi.String(\"Storage Write Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tadmin, err := storage.NewBucketIAMMember(ctx, \"admin\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: example.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.admin\"),\n\t\t\tMember: storageWriteServiceAccount.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"example\", \u0026pubsub.SubscriptionArgs{\n\t\t\tName: pulumi.String(\"example-subscription\"),\n\t\t\tTopic: exampleTopic.ID(),\n\t\t\tCloudStorageConfig: \u0026pubsub.SubscriptionCloudStorageConfigArgs{\n\t\t\t\tBucket: example.Name,\n\t\t\t\tFilenamePrefix: pulumi.String(\"pre-\"),\n\t\t\t\tFilenameSuffix: pulumi.String(\"-_69391\"),\n\t\t\t\tFilenameDatetimeFormat: pulumi.String(\"YYYY-MM-DD/hh_mm_ssZ\"),\n\t\t\t\tMaxBytes: pulumi.Int(1000),\n\t\t\t\tMaxDuration: pulumi.String(\"300s\"),\n\t\t\t\tServiceAccountEmail: storageWriteServiceAccount.Email,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tstorageWriteServiceAccount,\n\t\t\texample,\n\t\t\tadmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionCloudStorageConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var example = new Bucket(\"example\", BucketArgs.builder()\n .name(\"example-bucket\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n .name(\"example-topic\")\n .build());\n\n var storageWriteServiceAccount = new Account(\"storageWriteServiceAccount\", AccountArgs.builder()\n .accountId(\"example-stw\")\n .displayName(\"Storage Write Service Account\")\n .build());\n\n var admin = new BucketIAMMember(\"admin\", BucketIAMMemberArgs.builder()\n .bucket(example.name())\n .role(\"roles/storage.admin\")\n .member(storageWriteServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var exampleSubscription = new Subscription(\"exampleSubscription\", SubscriptionArgs.builder()\n .name(\"example-subscription\")\n .topic(exampleTopic.id())\n .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder()\n .bucket(example.name())\n .filenamePrefix(\"pre-\")\n .filenameSuffix(\"-_69391\")\n .filenameDatetimeFormat(\"YYYY-MM-DD/hh_mm_ssZ\")\n .maxBytes(1000)\n .maxDuration(\"300s\")\n .serviceAccountEmail(storageWriteServiceAccount.email())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n storageWriteServiceAccount,\n example,\n admin)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:storage:Bucket\n properties:\n name: example-bucket\n location: US\n uniformBucketLevelAccess: true\n exampleTopic:\n type: gcp:pubsub:Topic\n name: example\n properties:\n name: example-topic\n exampleSubscription:\n type: gcp:pubsub:Subscription\n name: example\n properties:\n name: example-subscription\n topic: ${exampleTopic.id}\n cloudStorageConfig:\n bucket: ${example.name}\n filenamePrefix: pre-\n filenameSuffix: -_69391\n filenameDatetimeFormat: YYYY-MM-DD/hh_mm_ssZ\n maxBytes: 1000\n maxDuration: 300s\n serviceAccountEmail: ${storageWriteServiceAccount.email}\n options:\n dependsOn:\n - ${storageWriteServiceAccount}\n - ${example}\n - ${admin}\n storageWriteServiceAccount:\n type: gcp:serviceaccount:Account\n name: storage_write_service_account\n properties:\n accountId: example-stw\n displayName: Storage Write Service Account\n admin:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${example.name}\n role: roles/storage.admin\n member: serviceAccount:${storageWriteServiceAccount.email}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSubscription can be imported using any of these accepted formats:\n\n* `projects/{{project}}/subscriptions/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Subscription can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default projects/{{project}}/subscriptions/{{name}}\n```\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:pubsub/subscription:Subscription default {{name}}\n```\n\n",
"properties": {
"ackDeadlineSeconds": {
"type": "integer",
@@ -254497,7 +257323,7 @@
}
},
"gcp:redis/cluster:Cluster": {
- "description": "A Google Cloud Redis Cluster instance.\n\n\nTo get more information about Cluster, see:\n\n* [API documentation](https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/memorystore/docs/cluster/)\n\n## Example Usage\n\n### Redis Cluster Ha\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_ha = new gcp.redis.Cluster(\"cluster-ha\", {\n name: \"ha-cluster\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n replicaCount: 1,\n nodeType: \"REDIS_SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorizationMode: \"AUTH_MODE_DISABLED\",\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletionProtectionEnabled: true,\n zoneDistributionConfig: {\n mode: \"MULTI_ZONE\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"MONDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\ncluster_ha = gcp.redis.Cluster(\"cluster-ha\",\n name=\"ha-cluster\",\n shard_count=3,\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n region=\"us-central1\",\n replica_count=1,\n node_type=\"REDIS_SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorization_mode=\"AUTH_MODE_DISABLED\",\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletion_protection_enabled=True,\n zone_distribution_config={\n \"mode\": \"MULTI_ZONE\",\n },\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"MONDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_ha = new Gcp.Redis.Cluster(\"cluster-ha\", new()\n {\n Name = \"ha-cluster\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ReplicaCount = 1,\n NodeType = \"REDIS_SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n DeletionProtectionEnabled = true,\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"MULTI_ZONE\",\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"MONDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-ha\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"ha-cluster\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(1),\n\t\t\tNodeType: pulumi.String(\"REDIS_SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"MULTI_ZONE\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"MONDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_ha = new Cluster(\"cluster-ha\", ClusterArgs.builder()\n .name(\"ha-cluster\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .replicaCount(1)\n .nodeType(\"REDIS_SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .deletionProtectionEnabled(true)\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"MULTI_ZONE\")\n .build())\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"MONDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-ha:\n type: gcp:redis:Cluster\n properties:\n name: ha-cluster\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n replicaCount: 1\n nodeType: REDIS_SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n authorizationMode: AUTH_MODE_DISABLED\n redisConfigs:\n maxmemory-policy: volatile-ttl\n deletionProtectionEnabled: true\n zoneDistributionConfig:\n mode: MULTI_ZONE\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: MONDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n options:\n dependsOn:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Redis Cluster Ha Single Zone\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_ha_single_zone = new gcp.redis.Cluster(\"cluster-ha-single-zone\", {\n name: \"ha-cluster-single-zone\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n zoneDistributionConfig: {\n mode: \"SINGLE_ZONE\",\n zone: \"us-central1-f\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"MONDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n deletionProtectionEnabled: true,\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\ncluster_ha_single_zone = gcp.redis.Cluster(\"cluster-ha-single-zone\",\n name=\"ha-cluster-single-zone\",\n shard_count=3,\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n region=\"us-central1\",\n zone_distribution_config={\n \"mode\": \"SINGLE_ZONE\",\n \"zone\": \"us-central1-f\",\n },\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"MONDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n deletion_protection_enabled=True,\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_ha_single_zone = new Gcp.Redis.Cluster(\"cluster-ha-single-zone\", new()\n {\n Name = \"ha-cluster-single-zone\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"SINGLE_ZONE\",\n Zone = \"us-central1-f\",\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"MONDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n DeletionProtectionEnabled = true,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-ha-single-zone\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"ha-cluster-single-zone\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"SINGLE_ZONE\"),\n\t\t\t\tZone: pulumi.String(\"us-central1-f\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"MONDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_ha_single_zone = new Cluster(\"cluster-ha-single-zone\", ClusterArgs.builder()\n .name(\"ha-cluster-single-zone\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"SINGLE_ZONE\")\n .zone(\"us-central1-f\")\n .build())\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"MONDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .deletionProtectionEnabled(true)\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-ha-single-zone:\n type: gcp:redis:Cluster\n properties:\n name: ha-cluster-single-zone\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n zoneDistributionConfig:\n mode: SINGLE_ZONE\n zone: us-central1-f\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: MONDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n deletionProtectionEnabled: true\n options:\n dependsOn:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Redis Cluster Rdb\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_rdb = new gcp.redis.Cluster(\"cluster-rdb\", {\n name: \"rdb-cluster\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n replicaCount: 0,\n nodeType: \"REDIS_SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorizationMode: \"AUTH_MODE_DISABLED\",\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletionProtectionEnabled: true,\n zoneDistributionConfig: {\n mode: \"MULTI_ZONE\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"MONDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n persistenceConfig: {\n mode: \"RDB\",\n rdbConfig: {\n rdbSnapshotPeriod: \"ONE_HOUR\",\n rdbSnapshotStartTime: \"2024-10-02T15:01:23Z\",\n },\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\ncluster_rdb = gcp.redis.Cluster(\"cluster-rdb\",\n name=\"rdb-cluster\",\n shard_count=3,\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n region=\"us-central1\",\n replica_count=0,\n node_type=\"REDIS_SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorization_mode=\"AUTH_MODE_DISABLED\",\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletion_protection_enabled=True,\n zone_distribution_config={\n \"mode\": \"MULTI_ZONE\",\n },\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"MONDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n persistence_config={\n \"mode\": \"RDB\",\n \"rdb_config\": {\n \"rdb_snapshot_period\": \"ONE_HOUR\",\n \"rdb_snapshot_start_time\": \"2024-10-02T15:01:23Z\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_rdb = new Gcp.Redis.Cluster(\"cluster-rdb\", new()\n {\n Name = \"rdb-cluster\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ReplicaCount = 0,\n NodeType = \"REDIS_SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n DeletionProtectionEnabled = true,\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"MULTI_ZONE\",\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"MONDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs\n {\n Mode = \"RDB\",\n RdbConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigRdbConfigArgs\n {\n RdbSnapshotPeriod = \"ONE_HOUR\",\n RdbSnapshotStartTime = \"2024-10-02T15:01:23Z\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-rdb\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"rdb-cluster\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(0),\n\t\t\tNodeType: pulumi.String(\"REDIS_SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"MULTI_ZONE\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"MONDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPersistenceConfig: \u0026redis.ClusterPersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"RDB\"),\n\t\t\t\tRdbConfig: \u0026redis.ClusterPersistenceConfigRdbConfigArgs{\n\t\t\t\t\tRdbSnapshotPeriod: pulumi.String(\"ONE_HOUR\"),\n\t\t\t\t\tRdbSnapshotStartTime: pulumi.String(\"2024-10-02T15:01:23Z\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigRdbConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_rdb = new Cluster(\"cluster-rdb\", ClusterArgs.builder()\n .name(\"rdb-cluster\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .replicaCount(0)\n .nodeType(\"REDIS_SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .deletionProtectionEnabled(true)\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"MULTI_ZONE\")\n .build())\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"MONDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .persistenceConfig(ClusterPersistenceConfigArgs.builder()\n .mode(\"RDB\")\n .rdbConfig(ClusterPersistenceConfigRdbConfigArgs.builder()\n .rdbSnapshotPeriod(\"ONE_HOUR\")\n .rdbSnapshotStartTime(\"2024-10-02T15:01:23Z\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-rdb:\n type: gcp:redis:Cluster\n properties:\n name: rdb-cluster\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n replicaCount: 0\n nodeType: REDIS_SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n authorizationMode: AUTH_MODE_DISABLED\n redisConfigs:\n maxmemory-policy: volatile-ttl\n deletionProtectionEnabled: true\n zoneDistributionConfig:\n mode: MULTI_ZONE\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: MONDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n persistenceConfig:\n mode: RDB\n rdbConfig:\n rdbSnapshotPeriod: ONE_HOUR\n rdbSnapshotStartTime: 2024-10-02T15:01:23Z\n options:\n dependsOn:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Redis Cluster Aof\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_aof = new gcp.redis.Cluster(\"cluster-aof\", {\n name: \"aof-cluster\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n replicaCount: 0,\n nodeType: \"REDIS_SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorizationMode: \"AUTH_MODE_DISABLED\",\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletionProtectionEnabled: true,\n zoneDistributionConfig: {\n mode: \"MULTI_ZONE\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"MONDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n persistenceConfig: {\n mode: \"AOF\",\n aofConfig: {\n appendFsync: \"EVERYSEC\",\n },\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\ncluster_aof = gcp.redis.Cluster(\"cluster-aof\",\n name=\"aof-cluster\",\n shard_count=3,\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n region=\"us-central1\",\n replica_count=0,\n node_type=\"REDIS_SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorization_mode=\"AUTH_MODE_DISABLED\",\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletion_protection_enabled=True,\n zone_distribution_config={\n \"mode\": \"MULTI_ZONE\",\n },\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"MONDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n persistence_config={\n \"mode\": \"AOF\",\n \"aof_config\": {\n \"append_fsync\": \"EVERYSEC\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_aof = new Gcp.Redis.Cluster(\"cluster-aof\", new()\n {\n Name = \"aof-cluster\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ReplicaCount = 0,\n NodeType = \"REDIS_SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n DeletionProtectionEnabled = true,\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"MULTI_ZONE\",\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"MONDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs\n {\n Mode = \"AOF\",\n AofConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigAofConfigArgs\n {\n AppendFsync = \"EVERYSEC\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-aof\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"aof-cluster\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(0),\n\t\t\tNodeType: pulumi.String(\"REDIS_SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"MULTI_ZONE\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"MONDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPersistenceConfig: \u0026redis.ClusterPersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"AOF\"),\n\t\t\t\tAofConfig: \u0026redis.ClusterPersistenceConfigAofConfigArgs{\n\t\t\t\t\tAppendFsync: pulumi.String(\"EVERYSEC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigAofConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_aof = new Cluster(\"cluster-aof\", ClusterArgs.builder()\n .name(\"aof-cluster\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .replicaCount(0)\n .nodeType(\"REDIS_SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .deletionProtectionEnabled(true)\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"MULTI_ZONE\")\n .build())\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"MONDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .persistenceConfig(ClusterPersistenceConfigArgs.builder()\n .mode(\"AOF\")\n .aofConfig(ClusterPersistenceConfigAofConfigArgs.builder()\n .appendFsync(\"EVERYSEC\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-aof:\n type: gcp:redis:Cluster\n properties:\n name: aof-cluster\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n replicaCount: 0\n nodeType: REDIS_SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n authorizationMode: AUTH_MODE_DISABLED\n redisConfigs:\n maxmemory-policy: volatile-ttl\n deletionProtectionEnabled: true\n zoneDistributionConfig:\n mode: MULTI_ZONE\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: MONDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n persistenceConfig:\n mode: AOF\n aofConfig:\n appendFsync: EVERYSEC\n options:\n dependsOn:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCluster can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/clusters/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Cluster can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default projects/{{project}}/locations/{{region}}/clusters/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{name}}\n```\n\n",
+ "description": "## Example Usage\n\n### Redis Cluster Ha\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_ha = new gcp.redis.Cluster(\"cluster-ha\", {\n name: \"ha-cluster\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n replicaCount: 1,\n nodeType: \"REDIS_SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorizationMode: \"AUTH_MODE_DISABLED\",\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletionProtectionEnabled: true,\n zoneDistributionConfig: {\n mode: \"MULTI_ZONE\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"MONDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\ncluster_ha = gcp.redis.Cluster(\"cluster-ha\",\n name=\"ha-cluster\",\n shard_count=3,\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n region=\"us-central1\",\n replica_count=1,\n node_type=\"REDIS_SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorization_mode=\"AUTH_MODE_DISABLED\",\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletion_protection_enabled=True,\n zone_distribution_config={\n \"mode\": \"MULTI_ZONE\",\n },\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"MONDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_ha = new Gcp.Redis.Cluster(\"cluster-ha\", new()\n {\n Name = \"ha-cluster\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ReplicaCount = 1,\n NodeType = \"REDIS_SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n DeletionProtectionEnabled = true,\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"MULTI_ZONE\",\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"MONDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-ha\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"ha-cluster\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(1),\n\t\t\tNodeType: pulumi.String(\"REDIS_SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"MULTI_ZONE\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"MONDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_ha = new Cluster(\"cluster-ha\", ClusterArgs.builder()\n .name(\"ha-cluster\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .replicaCount(1)\n .nodeType(\"REDIS_SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .deletionProtectionEnabled(true)\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"MULTI_ZONE\")\n .build())\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"MONDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-ha:\n type: gcp:redis:Cluster\n properties:\n name: ha-cluster\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n replicaCount: 1\n nodeType: REDIS_SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n authorizationMode: AUTH_MODE_DISABLED\n redisConfigs:\n maxmemory-policy: volatile-ttl\n deletionProtectionEnabled: true\n zoneDistributionConfig:\n mode: MULTI_ZONE\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: MONDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n options:\n dependsOn:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Redis Cluster Ha Single Zone\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_ha_single_zone = new gcp.redis.Cluster(\"cluster-ha-single-zone\", {\n name: \"ha-cluster-single-zone\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n zoneDistributionConfig: {\n mode: \"SINGLE_ZONE\",\n zone: \"us-central1-f\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"MONDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n deletionProtectionEnabled: true,\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\ncluster_ha_single_zone = gcp.redis.Cluster(\"cluster-ha-single-zone\",\n name=\"ha-cluster-single-zone\",\n shard_count=3,\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n region=\"us-central1\",\n zone_distribution_config={\n \"mode\": \"SINGLE_ZONE\",\n \"zone\": \"us-central1-f\",\n },\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"MONDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n deletion_protection_enabled=True,\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_ha_single_zone = new Gcp.Redis.Cluster(\"cluster-ha-single-zone\", new()\n {\n Name = \"ha-cluster-single-zone\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"SINGLE_ZONE\",\n Zone = \"us-central1-f\",\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"MONDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n DeletionProtectionEnabled = true,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-ha-single-zone\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"ha-cluster-single-zone\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"SINGLE_ZONE\"),\n\t\t\t\tZone: pulumi.String(\"us-central1-f\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"MONDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_ha_single_zone = new Cluster(\"cluster-ha-single-zone\", ClusterArgs.builder()\n .name(\"ha-cluster-single-zone\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"SINGLE_ZONE\")\n .zone(\"us-central1-f\")\n .build())\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"MONDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .deletionProtectionEnabled(true)\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-ha-single-zone:\n type: gcp:redis:Cluster\n properties:\n name: ha-cluster-single-zone\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n zoneDistributionConfig:\n mode: SINGLE_ZONE\n zone: us-central1-f\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: MONDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n deletionProtectionEnabled: true\n options:\n dependsOn:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Redis Cluster Secondary\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst primaryClusterProducerSubnet = new gcp.compute.Subnetwork(\"primary_cluster_producer_subnet\", {\n name: \"mysubnet-primary-cluster\",\n ipCidrRange: \"10.0.1.0/29\",\n region: \"us-east1\",\n network: producerNet.id,\n});\nconst primaryClusterRegionScp = new gcp.networkconnectivity.ServiceConnectionPolicy(\"primary_cluster_region_scp\", {\n name: \"mypolicy-primary-cluster\",\n location: \"us-east1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"Primary cluster service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [primaryClusterProducerSubnet.id],\n },\n});\n// Primary cluster\nconst primaryCluster = new gcp.redis.Cluster(\"primary_cluster\", {\n name: \"my-primary-cluster\",\n region: \"us-east1\",\n pscConfigs: [{\n network: producerNet.id,\n }],\n authorizationMode: \"AUTH_MODE_DISABLED\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n shardCount: 3,\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n nodeType: \"REDIS_HIGHMEM_MEDIUM\",\n persistenceConfig: {\n mode: \"RDB\",\n rdbConfig: {\n rdbSnapshotPeriod: \"ONE_HOUR\",\n rdbSnapshotStartTime: \"2024-10-02T15:01:23Z\",\n },\n },\n zoneDistributionConfig: {\n mode: \"MULTI_ZONE\",\n },\n replicaCount: 1,\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"MONDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n deletionProtectionEnabled: true,\n}, {\n dependsOn: [primaryClusterRegionScp],\n});\nconst secondaryClusterProducerSubnet = new gcp.compute.Subnetwork(\"secondary_cluster_producer_subnet\", {\n name: \"mysubnet-secondary-cluster\",\n ipCidrRange: \"10.0.2.0/29\",\n region: \"europe-west1\",\n network: producerNet.id,\n});\nconst secondaryClusterRegionScp = new gcp.networkconnectivity.ServiceConnectionPolicy(\"secondary_cluster_region_scp\", {\n name: \"mypolicy-secondary-cluster\",\n location: \"europe-west1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"Secondary cluster service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [secondaryClusterProducerSubnet.id],\n },\n});\n// Secondary cluster\nconst secondaryCluster = new gcp.redis.Cluster(\"secondary_cluster\", {\n name: \"my-secondary-cluster\",\n region: \"europe-west1\",\n pscConfigs: [{\n network: producerNet.id,\n }],\n authorizationMode: \"AUTH_MODE_DISABLED\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n shardCount: 3,\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n nodeType: \"REDIS_HIGHMEM_MEDIUM\",\n persistenceConfig: {\n mode: \"RDB\",\n rdbConfig: {\n rdbSnapshotPeriod: \"ONE_HOUR\",\n rdbSnapshotStartTime: \"2024-10-02T15:01:23Z\",\n },\n },\n zoneDistributionConfig: {\n mode: \"MULTI_ZONE\",\n },\n replicaCount: 2,\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"WEDNESDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n deletionProtectionEnabled: true,\n crossClusterReplicationConfig: {\n clusterRole: \"SECONDARY\",\n primaryCluster: {\n cluster: primaryCluster.id,\n },\n },\n}, {\n dependsOn: [secondaryClusterRegionScp],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nprimary_cluster_producer_subnet = gcp.compute.Subnetwork(\"primary_cluster_producer_subnet\",\n name=\"mysubnet-primary-cluster\",\n ip_cidr_range=\"10.0.1.0/29\",\n region=\"us-east1\",\n network=producer_net.id)\nprimary_cluster_region_scp = gcp.networkconnectivity.ServiceConnectionPolicy(\"primary_cluster_region_scp\",\n name=\"mypolicy-primary-cluster\",\n location=\"us-east1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"Primary cluster service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [primary_cluster_producer_subnet.id],\n })\n# Primary cluster\nprimary_cluster = gcp.redis.Cluster(\"primary_cluster\",\n name=\"my-primary-cluster\",\n region=\"us-east1\",\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n authorization_mode=\"AUTH_MODE_DISABLED\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n shard_count=3,\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n node_type=\"REDIS_HIGHMEM_MEDIUM\",\n persistence_config={\n \"mode\": \"RDB\",\n \"rdb_config\": {\n \"rdb_snapshot_period\": \"ONE_HOUR\",\n \"rdb_snapshot_start_time\": \"2024-10-02T15:01:23Z\",\n },\n },\n zone_distribution_config={\n \"mode\": \"MULTI_ZONE\",\n },\n replica_count=1,\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"MONDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n deletion_protection_enabled=True,\n opts = pulumi.ResourceOptions(depends_on=[primary_cluster_region_scp]))\nsecondary_cluster_producer_subnet = gcp.compute.Subnetwork(\"secondary_cluster_producer_subnet\",\n name=\"mysubnet-secondary-cluster\",\n ip_cidr_range=\"10.0.2.0/29\",\n region=\"europe-west1\",\n network=producer_net.id)\nsecondary_cluster_region_scp = gcp.networkconnectivity.ServiceConnectionPolicy(\"secondary_cluster_region_scp\",\n name=\"mypolicy-secondary-cluster\",\n location=\"europe-west1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"Secondary cluster service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [secondary_cluster_producer_subnet.id],\n })\n# Secondary cluster\nsecondary_cluster = gcp.redis.Cluster(\"secondary_cluster\",\n name=\"my-secondary-cluster\",\n region=\"europe-west1\",\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n authorization_mode=\"AUTH_MODE_DISABLED\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n shard_count=3,\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n node_type=\"REDIS_HIGHMEM_MEDIUM\",\n persistence_config={\n \"mode\": \"RDB\",\n \"rdb_config\": {\n \"rdb_snapshot_period\": \"ONE_HOUR\",\n \"rdb_snapshot_start_time\": \"2024-10-02T15:01:23Z\",\n },\n },\n zone_distribution_config={\n \"mode\": \"MULTI_ZONE\",\n },\n replica_count=2,\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"WEDNESDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n deletion_protection_enabled=True,\n cross_cluster_replication_config={\n \"cluster_role\": \"SECONDARY\",\n \"primary_cluster\": {\n \"cluster\": primary_cluster.id,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[secondary_cluster_region_scp]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var primaryClusterProducerSubnet = new Gcp.Compute.Subnetwork(\"primary_cluster_producer_subnet\", new()\n {\n Name = \"mysubnet-primary-cluster\",\n IpCidrRange = \"10.0.1.0/29\",\n Region = \"us-east1\",\n Network = producerNet.Id,\n });\n\n var primaryClusterRegionScp = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"primary_cluster_region_scp\", new()\n {\n Name = \"mypolicy-primary-cluster\",\n Location = \"us-east1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"Primary cluster service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n primaryClusterProducerSubnet.Id,\n },\n },\n });\n\n // Primary cluster\n var primaryCluster = new Gcp.Redis.Cluster(\"primary_cluster\", new()\n {\n Name = \"my-primary-cluster\",\n Region = \"us-east1\",\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n ShardCount = 3,\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n NodeType = \"REDIS_HIGHMEM_MEDIUM\",\n PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs\n {\n Mode = \"RDB\",\n RdbConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigRdbConfigArgs\n {\n RdbSnapshotPeriod = \"ONE_HOUR\",\n RdbSnapshotStartTime = \"2024-10-02T15:01:23Z\",\n },\n },\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"MULTI_ZONE\",\n },\n ReplicaCount = 1,\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"MONDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n DeletionProtectionEnabled = true,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n primaryClusterRegionScp,\n },\n });\n\n var secondaryClusterProducerSubnet = new Gcp.Compute.Subnetwork(\"secondary_cluster_producer_subnet\", new()\n {\n Name = \"mysubnet-secondary-cluster\",\n IpCidrRange = \"10.0.2.0/29\",\n Region = \"europe-west1\",\n Network = producerNet.Id,\n });\n\n var secondaryClusterRegionScp = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"secondary_cluster_region_scp\", new()\n {\n Name = \"mypolicy-secondary-cluster\",\n Location = \"europe-west1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"Secondary cluster service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n secondaryClusterProducerSubnet.Id,\n },\n },\n });\n\n // Secondary cluster\n var secondaryCluster = new Gcp.Redis.Cluster(\"secondary_cluster\", new()\n {\n Name = \"my-secondary-cluster\",\n Region = \"europe-west1\",\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n ShardCount = 3,\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n NodeType = \"REDIS_HIGHMEM_MEDIUM\",\n PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs\n {\n Mode = \"RDB\",\n RdbConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigRdbConfigArgs\n {\n RdbSnapshotPeriod = \"ONE_HOUR\",\n RdbSnapshotStartTime = \"2024-10-02T15:01:23Z\",\n },\n },\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"MULTI_ZONE\",\n },\n ReplicaCount = 2,\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"WEDNESDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n DeletionProtectionEnabled = true,\n CrossClusterReplicationConfig = new Gcp.Redis.Inputs.ClusterCrossClusterReplicationConfigArgs\n {\n ClusterRole = \"SECONDARY\",\n PrimaryCluster = new Gcp.Redis.Inputs.ClusterCrossClusterReplicationConfigPrimaryClusterArgs\n {\n Cluster = primaryCluster.Id,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secondaryClusterRegionScp,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprimaryClusterProducerSubnet, err := compute.NewSubnetwork(ctx, \"primary_cluster_producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet-primary-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.1.0/29\"),\n\t\t\tRegion: pulumi.String(\"us-east1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprimaryClusterRegionScp, err := networkconnectivity.NewServiceConnectionPolicy(ctx, \"primary_cluster_region_scp\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy-primary-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-east1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"Primary cluster service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tprimaryClusterProducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Primary cluster\n\t\tprimaryCluster, err := redis.NewCluster(ctx, \"primary_cluster\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"my-primary-cluster\"),\n\t\t\tRegion: pulumi.String(\"us-east1\"),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tNodeType: pulumi.String(\"REDIS_HIGHMEM_MEDIUM\"),\n\t\t\tPersistenceConfig: \u0026redis.ClusterPersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"RDB\"),\n\t\t\t\tRdbConfig: \u0026redis.ClusterPersistenceConfigRdbConfigArgs{\n\t\t\t\t\tRdbSnapshotPeriod: pulumi.String(\"ONE_HOUR\"),\n\t\t\t\t\tRdbSnapshotStartTime: pulumi.String(\"2024-10-02T15:01:23Z\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"MULTI_ZONE\"),\n\t\t\t},\n\t\t\tReplicaCount: pulumi.Int(1),\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"MONDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprimaryClusterRegionScp,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecondaryClusterProducerSubnet, err := compute.NewSubnetwork(ctx, \"secondary_cluster_producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet-secondary-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.2.0/29\"),\n\t\t\tRegion: pulumi.String(\"europe-west1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecondaryClusterRegionScp, err := networkconnectivity.NewServiceConnectionPolicy(ctx, \"secondary_cluster_region_scp\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy-secondary-cluster\"),\n\t\t\tLocation: pulumi.String(\"europe-west1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"Secondary cluster service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tsecondaryClusterProducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Secondary cluster\n\t\t_, err = redis.NewCluster(ctx, \"secondary_cluster\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"my-secondary-cluster\"),\n\t\t\tRegion: pulumi.String(\"europe-west1\"),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tNodeType: pulumi.String(\"REDIS_HIGHMEM_MEDIUM\"),\n\t\t\tPersistenceConfig: \u0026redis.ClusterPersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"RDB\"),\n\t\t\t\tRdbConfig: \u0026redis.ClusterPersistenceConfigRdbConfigArgs{\n\t\t\t\t\tRdbSnapshotPeriod: pulumi.String(\"ONE_HOUR\"),\n\t\t\t\t\tRdbSnapshotStartTime: pulumi.String(\"2024-10-02T15:01:23Z\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"MULTI_ZONE\"),\n\t\t\t},\n\t\t\tReplicaCount: pulumi.Int(2),\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"WEDNESDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t\tCrossClusterReplicationConfig: \u0026redis.ClusterCrossClusterReplicationConfigArgs{\n\t\t\t\tClusterRole: pulumi.String(\"SECONDARY\"),\n\t\t\t\tPrimaryCluster: \u0026redis.ClusterCrossClusterReplicationConfigPrimaryClusterArgs{\n\t\t\t\t\tCluster: primaryCluster.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecondaryClusterRegionScp,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigRdbConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigPrimaryClusterArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var primaryClusterProducerSubnet = new Subnetwork(\"primaryClusterProducerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet-primary-cluster\")\n .ipCidrRange(\"10.0.1.0/29\")\n .region(\"us-east1\")\n .network(producerNet.id())\n .build());\n\n var primaryClusterRegionScp = new ServiceConnectionPolicy(\"primaryClusterRegionScp\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy-primary-cluster\")\n .location(\"us-east1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"Primary cluster service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(primaryClusterProducerSubnet.id())\n .build())\n .build());\n\n // Primary cluster\n var primaryCluster = new Cluster(\"primaryCluster\", ClusterArgs.builder()\n .name(\"my-primary-cluster\")\n .region(\"us-east1\")\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .shardCount(3)\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .nodeType(\"REDIS_HIGHMEM_MEDIUM\")\n .persistenceConfig(ClusterPersistenceConfigArgs.builder()\n .mode(\"RDB\")\n .rdbConfig(ClusterPersistenceConfigRdbConfigArgs.builder()\n .rdbSnapshotPeriod(\"ONE_HOUR\")\n .rdbSnapshotStartTime(\"2024-10-02T15:01:23Z\")\n .build())\n .build())\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"MULTI_ZONE\")\n .build())\n .replicaCount(1)\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"MONDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .deletionProtectionEnabled(true)\n .build(), CustomResourceOptions.builder()\n .dependsOn(primaryClusterRegionScp)\n .build());\n\n var secondaryClusterProducerSubnet = new Subnetwork(\"secondaryClusterProducerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet-secondary-cluster\")\n .ipCidrRange(\"10.0.2.0/29\")\n .region(\"europe-west1\")\n .network(producerNet.id())\n .build());\n\n var secondaryClusterRegionScp = new ServiceConnectionPolicy(\"secondaryClusterRegionScp\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy-secondary-cluster\")\n .location(\"europe-west1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"Secondary cluster service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(secondaryClusterProducerSubnet.id())\n .build())\n .build());\n\n // Secondary cluster\n var secondaryCluster = new Cluster(\"secondaryCluster\", ClusterArgs.builder()\n .name(\"my-secondary-cluster\")\n .region(\"europe-west1\")\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .shardCount(3)\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .nodeType(\"REDIS_HIGHMEM_MEDIUM\")\n .persistenceConfig(ClusterPersistenceConfigArgs.builder()\n .mode(\"RDB\")\n .rdbConfig(ClusterPersistenceConfigRdbConfigArgs.builder()\n .rdbSnapshotPeriod(\"ONE_HOUR\")\n .rdbSnapshotStartTime(\"2024-10-02T15:01:23Z\")\n .build())\n .build())\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"MULTI_ZONE\")\n .build())\n .replicaCount(2)\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"WEDNESDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .deletionProtectionEnabled(true)\n .crossClusterReplicationConfig(ClusterCrossClusterReplicationConfigArgs.builder()\n .clusterRole(\"SECONDARY\")\n .primaryCluster(ClusterCrossClusterReplicationConfigPrimaryClusterArgs.builder()\n .cluster(primaryCluster.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(secondaryClusterRegionScp)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Primary cluster\n primaryCluster:\n type: gcp:redis:Cluster\n name: primary_cluster\n properties:\n name: my-primary-cluster\n region: us-east1\n pscConfigs:\n - network: ${producerNet.id}\n authorizationMode: AUTH_MODE_DISABLED\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n shardCount: 3\n redisConfigs:\n maxmemory-policy: volatile-ttl\n nodeType: REDIS_HIGHMEM_MEDIUM\n persistenceConfig:\n mode: RDB\n rdbConfig:\n rdbSnapshotPeriod: ONE_HOUR\n rdbSnapshotStartTime: 2024-10-02T15:01:23Z\n zoneDistributionConfig:\n mode: MULTI_ZONE\n replicaCount: 1\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: MONDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n deletionProtectionEnabled: true\n options:\n dependsOn:\n - ${primaryClusterRegionScp}\n # Secondary cluster\n secondaryCluster:\n type: gcp:redis:Cluster\n name: secondary_cluster\n properties:\n name: my-secondary-cluster\n region: europe-west1\n pscConfigs:\n - network: ${producerNet.id}\n authorizationMode: AUTH_MODE_DISABLED\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n shardCount: 3\n redisConfigs:\n maxmemory-policy: volatile-ttl\n nodeType: REDIS_HIGHMEM_MEDIUM\n persistenceConfig:\n mode: RDB\n rdbConfig:\n rdbSnapshotPeriod: ONE_HOUR\n rdbSnapshotStartTime: 2024-10-02T15:01:23Z\n zoneDistributionConfig:\n mode: MULTI_ZONE\n replicaCount: 2\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: WEDNESDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n deletionProtectionEnabled: true # Cross cluster replication config\n crossClusterReplicationConfig:\n clusterRole: SECONDARY\n primaryCluster:\n cluster: ${primaryCluster.id}\n options:\n dependsOn:\n - ${secondaryClusterRegionScp}\n primaryClusterRegionScp:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n name: primary_cluster_region_scp\n properties:\n name: mypolicy-primary-cluster\n location: us-east1\n serviceClass: gcp-memorystore-redis\n description: Primary cluster service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${primaryClusterProducerSubnet.id}\n primaryClusterProducerSubnet:\n type: gcp:compute:Subnetwork\n name: primary_cluster_producer_subnet\n properties:\n name: mysubnet-primary-cluster\n ipCidrRange: 10.0.1.0/29\n region: us-east1\n network: ${producerNet.id}\n secondaryClusterRegionScp:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n name: secondary_cluster_region_scp\n properties:\n name: mypolicy-secondary-cluster\n location: europe-west1\n serviceClass: gcp-memorystore-redis\n description: Secondary cluster service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${secondaryClusterProducerSubnet.id}\n secondaryClusterProducerSubnet:\n type: gcp:compute:Subnetwork\n name: secondary_cluster_producer_subnet\n properties:\n name: mysubnet-secondary-cluster\n ipCidrRange: 10.0.2.0/29\n region: europe-west1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Redis Cluster Rdb\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_rdb = new gcp.redis.Cluster(\"cluster-rdb\", {\n name: \"rdb-cluster\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n replicaCount: 0,\n nodeType: \"REDIS_SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorizationMode: \"AUTH_MODE_DISABLED\",\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletionProtectionEnabled: true,\n zoneDistributionConfig: {\n mode: \"MULTI_ZONE\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"MONDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n persistenceConfig: {\n mode: \"RDB\",\n rdbConfig: {\n rdbSnapshotPeriod: \"ONE_HOUR\",\n rdbSnapshotStartTime: \"2024-10-02T15:01:23Z\",\n },\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\ncluster_rdb = gcp.redis.Cluster(\"cluster-rdb\",\n name=\"rdb-cluster\",\n shard_count=3,\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n region=\"us-central1\",\n replica_count=0,\n node_type=\"REDIS_SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorization_mode=\"AUTH_MODE_DISABLED\",\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletion_protection_enabled=True,\n zone_distribution_config={\n \"mode\": \"MULTI_ZONE\",\n },\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"MONDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n persistence_config={\n \"mode\": \"RDB\",\n \"rdb_config\": {\n \"rdb_snapshot_period\": \"ONE_HOUR\",\n \"rdb_snapshot_start_time\": \"2024-10-02T15:01:23Z\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_rdb = new Gcp.Redis.Cluster(\"cluster-rdb\", new()\n {\n Name = \"rdb-cluster\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ReplicaCount = 0,\n NodeType = \"REDIS_SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n DeletionProtectionEnabled = true,\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"MULTI_ZONE\",\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"MONDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs\n {\n Mode = \"RDB\",\n RdbConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigRdbConfigArgs\n {\n RdbSnapshotPeriod = \"ONE_HOUR\",\n RdbSnapshotStartTime = \"2024-10-02T15:01:23Z\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-rdb\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"rdb-cluster\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(0),\n\t\t\tNodeType: pulumi.String(\"REDIS_SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"MULTI_ZONE\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"MONDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPersistenceConfig: \u0026redis.ClusterPersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"RDB\"),\n\t\t\t\tRdbConfig: \u0026redis.ClusterPersistenceConfigRdbConfigArgs{\n\t\t\t\t\tRdbSnapshotPeriod: pulumi.String(\"ONE_HOUR\"),\n\t\t\t\t\tRdbSnapshotStartTime: pulumi.String(\"2024-10-02T15:01:23Z\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigRdbConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_rdb = new Cluster(\"cluster-rdb\", ClusterArgs.builder()\n .name(\"rdb-cluster\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .replicaCount(0)\n .nodeType(\"REDIS_SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .deletionProtectionEnabled(true)\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"MULTI_ZONE\")\n .build())\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"MONDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .persistenceConfig(ClusterPersistenceConfigArgs.builder()\n .mode(\"RDB\")\n .rdbConfig(ClusterPersistenceConfigRdbConfigArgs.builder()\n .rdbSnapshotPeriod(\"ONE_HOUR\")\n .rdbSnapshotStartTime(\"2024-10-02T15:01:23Z\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-rdb:\n type: gcp:redis:Cluster\n properties:\n name: rdb-cluster\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n replicaCount: 0\n nodeType: REDIS_SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n authorizationMode: AUTH_MODE_DISABLED\n redisConfigs:\n maxmemory-policy: volatile-ttl\n deletionProtectionEnabled: true\n zoneDistributionConfig:\n mode: MULTI_ZONE\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: MONDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n persistenceConfig:\n mode: RDB\n rdbConfig:\n rdbSnapshotPeriod: ONE_HOUR\n rdbSnapshotStartTime: 2024-10-02T15:01:23Z\n options:\n dependsOn:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Redis Cluster Aof\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"mynetwork\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"mysubnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"mypolicy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore-redis\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst cluster_aof = new gcp.redis.Cluster(\"cluster-aof\", {\n name: \"aof-cluster\",\n shardCount: 3,\n pscConfigs: [{\n network: producerNet.id,\n }],\n region: \"us-central1\",\n replicaCount: 0,\n nodeType: \"REDIS_SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorizationMode: \"AUTH_MODE_DISABLED\",\n redisConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletionProtectionEnabled: true,\n zoneDistributionConfig: {\n mode: \"MULTI_ZONE\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"MONDAY\",\n startTime: {\n hours: 1,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n persistenceConfig: {\n mode: \"AOF\",\n aofConfig: {\n appendFsync: \"EVERYSEC\",\n },\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"mynetwork\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"mysubnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"mypolicy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore-redis\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\ncluster_aof = gcp.redis.Cluster(\"cluster-aof\",\n name=\"aof-cluster\",\n shard_count=3,\n psc_configs=[{\n \"network\": producer_net.id,\n }],\n region=\"us-central1\",\n replica_count=0,\n node_type=\"REDIS_SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n authorization_mode=\"AUTH_MODE_DISABLED\",\n redis_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n deletion_protection_enabled=True,\n zone_distribution_config={\n \"mode\": \"MULTI_ZONE\",\n },\n maintenance_policy={\n \"weekly_maintenance_windows\": [{\n \"day\": \"MONDAY\",\n \"start_time\": {\n \"hours\": 1,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n }],\n },\n persistence_config={\n \"mode\": \"AOF\",\n \"aof_config\": {\n \"append_fsync\": \"EVERYSEC\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"mynetwork\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"mysubnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"mypolicy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore-redis\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var cluster_aof = new Gcp.Redis.Cluster(\"cluster-aof\", new()\n {\n Name = \"aof-cluster\",\n ShardCount = 3,\n PscConfigs = new[]\n {\n new Gcp.Redis.Inputs.ClusterPscConfigArgs\n {\n Network = producerNet.Id,\n },\n },\n Region = \"us-central1\",\n ReplicaCount = 0,\n NodeType = \"REDIS_SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_MODE_DISABLED\",\n AuthorizationMode = \"AUTH_MODE_DISABLED\",\n RedisConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n DeletionProtectionEnabled = true,\n ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs\n {\n Mode = \"MULTI_ZONE\",\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"MONDAY\",\n StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 1,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs\n {\n Mode = \"AOF\",\n AofConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigAofConfigArgs\n {\n AppendFsync = \"EVERYSEC\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"mynetwork\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"mysubnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"mypolicy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore-redis\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewCluster(ctx, \"cluster-aof\", \u0026redis.ClusterArgs{\n\t\t\tName: pulumi.String(\"aof-cluster\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tPscConfigs: redis.ClusterPscConfigArray{\n\t\t\t\t\u0026redis.ClusterPscConfigArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(0),\n\t\t\tNodeType: pulumi.String(\"REDIS_SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_MODE_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_MODE_DISABLED\"),\n\t\t\tRedisConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(true),\n\t\t\tZoneDistributionConfig: \u0026redis.ClusterZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"MULTI_ZONE\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.ClusterMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"MONDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(1),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPersistenceConfig: \u0026redis.ClusterPersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"AOF\"),\n\t\t\t\tAofConfig: \u0026redis.ClusterPersistenceConfigAofConfigArgs{\n\t\t\t\t\tAppendFsync: pulumi.String(\"EVERYSEC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.redis.Cluster;\nimport com.pulumi.gcp.redis.ClusterArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs;\nimport com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigAofConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"mynetwork\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"mysubnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"mypolicy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore-redis\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n var cluster_aof = new Cluster(\"cluster-aof\", ClusterArgs.builder()\n .name(\"aof-cluster\")\n .shardCount(3)\n .pscConfigs(ClusterPscConfigArgs.builder()\n .network(producerNet.id())\n .build())\n .region(\"us-central1\")\n .replicaCount(0)\n .nodeType(\"REDIS_SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_MODE_DISABLED\")\n .authorizationMode(\"AUTH_MODE_DISABLED\")\n .redisConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .deletionProtectionEnabled(true)\n .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()\n .mode(\"MULTI_ZONE\")\n .build())\n .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"MONDAY\")\n .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(1)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .persistenceConfig(ClusterPersistenceConfigArgs.builder()\n .mode(\"AOF\")\n .aofConfig(ClusterPersistenceConfigAofConfigArgs.builder()\n .appendFsync(\"EVERYSEC\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cluster-aof:\n type: gcp:redis:Cluster\n properties:\n name: aof-cluster\n shardCount: 3\n pscConfigs:\n - network: ${producerNet.id}\n region: us-central1\n replicaCount: 0\n nodeType: REDIS_SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED\n authorizationMode: AUTH_MODE_DISABLED\n redisConfigs:\n maxmemory-policy: volatile-ttl\n deletionProtectionEnabled: true\n zoneDistributionConfig:\n mode: MULTI_ZONE\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: MONDAY\n startTime:\n hours: 1\n minutes: 0\n seconds: 0\n nanos: 0\n persistenceConfig:\n mode: AOF\n aofConfig:\n appendFsync: EVERYSEC\n options:\n dependsOn:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: mypolicy\n location: us-central1\n serviceClass: gcp-memorystore-redis\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: mysubnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: mynetwork\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nCluster can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/clusters/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Cluster can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default projects/{{project}}/locations/{{region}}/clusters/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:redis/cluster:Cluster default {{name}}\n```\n\n",
"properties": {
"authorizationMode": {
"type": "string",
@@ -254507,6 +257333,10 @@
"type": "string",
"description": "The timestamp associated with the cluster creation request. A timestamp in\nRFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional\ndigits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n"
},
+ "crossClusterReplicationConfig": {
+ "$ref": "#/types/gcp:redis/ClusterCrossClusterReplicationConfig:ClusterCrossClusterReplicationConfig",
+ "description": "Cross cluster replication config\n"
+ },
"deletionProtectionEnabled": {
"type": "boolean",
"description": "Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster\noperation will fail. Default value is true.\n"
@@ -254611,6 +257441,7 @@
},
"required": [
"createTime",
+ "crossClusterReplicationConfig",
"discoveryEndpoints",
"maintenanceSchedules",
"name",
@@ -254633,6 +257464,10 @@
"description": "Optional. The authorization mode of the Redis cluster. If not provided, auth feature is disabled for the cluster.\nDefault value: \"AUTH_MODE_DISABLED\" Possible values: [\"AUTH_MODE_UNSPECIFIED\", \"AUTH_MODE_IAM_AUTH\",\n\"AUTH_MODE_DISABLED\"]\n",
"willReplaceOnChanges": true
},
+ "crossClusterReplicationConfig": {
+ "$ref": "#/types/gcp:redis/ClusterCrossClusterReplicationConfig:ClusterCrossClusterReplicationConfig",
+ "description": "Cross cluster replication config\n"
+ },
"deletionProtectionEnabled": {
"type": "boolean",
"description": "Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster\noperation will fail. Default value is true.\n"
@@ -254713,6 +257548,10 @@
"type": "string",
"description": "The timestamp associated with the cluster creation request. A timestamp in\nRFC3339 UTC \"Zulu\" format, with nanosecond resolution and up to nine fractional\ndigits. Examples: \"2014-10-02T15:01:23Z\" and \"2014-10-02T15:01:23.045123456Z\".\n"
},
+ "crossClusterReplicationConfig": {
+ "$ref": "#/types/gcp:redis/ClusterCrossClusterReplicationConfig:ClusterCrossClusterReplicationConfig",
+ "description": "Cross cluster replication config\n"
+ },
"deletionProtectionEnabled": {
"type": "boolean",
"description": "Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster\noperation will fail. Default value is true.\n"
@@ -270869,6 +273708,80 @@
"type": "object"
}
},
+ "gcp:tpu/v2QueuedResource:V2QueuedResource": {
+ "description": "## Example Usage\n\n### Tpu V2 Queued Resource Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst qr = new gcp.tpu.V2QueuedResource(\"qr\", {\n name: \"test-qr\",\n zone: \"us-central1-c\",\n project: \"my-project-name\",\n tpu: {\n nodeSpecs: [{\n parent: \"projects/my-project-name/locations/us-central1-c\",\n nodeId: \"test-tpu\",\n node: {\n runtimeVersion: \"tpu-vm-tf-2.13.0\",\n acceleratorType: \"v2-8\",\n description: \"Text description of the TPU.\",\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nqr = gcp.tpu.V2QueuedResource(\"qr\",\n name=\"test-qr\",\n zone=\"us-central1-c\",\n project=\"my-project-name\",\n tpu={\n \"node_specs\": [{\n \"parent\": \"projects/my-project-name/locations/us-central1-c\",\n \"node_id\": \"test-tpu\",\n \"node\": {\n \"runtime_version\": \"tpu-vm-tf-2.13.0\",\n \"accelerator_type\": \"v2-8\",\n \"description\": \"Text description of the TPU.\",\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var qr = new Gcp.Tpu.V2QueuedResource(\"qr\", new()\n {\n Name = \"test-qr\",\n Zone = \"us-central1-c\",\n Project = \"my-project-name\",\n Tpu = new Gcp.Tpu.Inputs.V2QueuedResourceTpuArgs\n {\n NodeSpecs = new[]\n {\n new Gcp.Tpu.Inputs.V2QueuedResourceTpuNodeSpecArgs\n {\n Parent = \"projects/my-project-name/locations/us-central1-c\",\n NodeId = \"test-tpu\",\n Node = new Gcp.Tpu.Inputs.V2QueuedResourceTpuNodeSpecNodeArgs\n {\n RuntimeVersion = \"tpu-vm-tf-2.13.0\",\n AcceleratorType = \"v2-8\",\n Description = \"Text description of the TPU.\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tpu\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := tpu.NewV2QueuedResource(ctx, \"qr\", \u0026tpu.V2QueuedResourceArgs{\n\t\t\tName: pulumi.String(\"test-qr\"),\n\t\t\tZone: pulumi.String(\"us-central1-c\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tTpu: \u0026tpu.V2QueuedResourceTpuArgs{\n\t\t\t\tNodeSpecs: tpu.V2QueuedResourceTpuNodeSpecArray{\n\t\t\t\t\t\u0026tpu.V2QueuedResourceTpuNodeSpecArgs{\n\t\t\t\t\t\tParent: pulumi.String(\"projects/my-project-name/locations/us-central1-c\"),\n\t\t\t\t\t\tNodeId: pulumi.String(\"test-tpu\"),\n\t\t\t\t\t\tNode: \u0026tpu.V2QueuedResourceTpuNodeSpecNodeArgs{\n\t\t\t\t\t\t\tRuntimeVersion: pulumi.String(\"tpu-vm-tf-2.13.0\"),\n\t\t\t\t\t\t\tAcceleratorType: pulumi.String(\"v2-8\"),\n\t\t\t\t\t\t\tDescription: pulumi.String(\"Text description of the TPU.\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.tpu.V2QueuedResource;\nimport com.pulumi.gcp.tpu.V2QueuedResourceArgs;\nimport com.pulumi.gcp.tpu.inputs.V2QueuedResourceTpuArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var qr = new V2QueuedResource(\"qr\", V2QueuedResourceArgs.builder()\n .name(\"test-qr\")\n .zone(\"us-central1-c\")\n .project(\"my-project-name\")\n .tpu(V2QueuedResourceTpuArgs.builder()\n .nodeSpecs(V2QueuedResourceTpuNodeSpecArgs.builder()\n .parent(\"projects/my-project-name/locations/us-central1-c\")\n .nodeId(\"test-tpu\")\n .node(V2QueuedResourceTpuNodeSpecNodeArgs.builder()\n .runtimeVersion(\"tpu-vm-tf-2.13.0\")\n .acceleratorType(\"v2-8\")\n .description(\"Text description of the TPU.\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n qr:\n type: gcp:tpu:V2QueuedResource\n properties:\n name: test-qr\n zone: us-central1-c\n project: my-project-name\n tpu:\n nodeSpecs:\n - parent: projects/my-project-name/locations/us-central1-c\n nodeId: test-tpu\n node:\n runtimeVersion: tpu-vm-tf-2.13.0\n acceleratorType: v2-8\n description: Text description of the TPU.\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nQueuedResource can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{zone}}/queuedResources/{{name}}`\n\n* `{{project}}/{{zone}}/{{name}}`\n\n* `{{zone}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, QueuedResource can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default projects/{{project}}/locations/{{zone}}/queuedResources/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{project}}/{{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{name}}\n```\n\n",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The immutable name of the Queued Resource.\n\n\n- - -\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n"
+ },
+ "tpu": {
+ "$ref": "#/types/gcp:tpu/V2QueuedResourceTpu:V2QueuedResourceTpu",
+ "description": "Defines a TPU resource.\nStructure is documented below.\n"
+ },
+ "zone": {
+ "type": "string",
+ "description": "The GCP location for the Queued Resource. If it is not provided, the provider zone is used.\n"
+ }
+ },
+ "required": [
+ "name",
+ "project",
+ "zone"
+ ],
+ "inputProperties": {
+ "name": {
+ "type": "string",
+ "description": "The immutable name of the Queued Resource.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "tpu": {
+ "$ref": "#/types/gcp:tpu/V2QueuedResourceTpu:V2QueuedResourceTpu",
+ "description": "Defines a TPU resource.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "zone": {
+ "type": "string",
+ "description": "The GCP location for the Queued Resource. If it is not provided, the provider zone is used.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering V2QueuedResource resources.\n",
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The immutable name of the Queued Resource.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "tpu": {
+ "$ref": "#/types/gcp:tpu/V2QueuedResourceTpu:V2QueuedResourceTpu",
+ "description": "Defines a TPU resource.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "zone": {
+ "type": "string",
+ "description": "The GCP location for the Queued Resource. If it is not provided, the provider zone is used.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
"gcp:tpu/v2Vm:V2Vm": {
"description": "## Example Usage\n\n### Tpu V2 Vm Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst available = gcp.tpu.getV2RuntimeVersions({});\nconst tpu = new gcp.tpu.V2Vm(\"tpu\", {\n name: \"test-tpu\",\n zone: \"us-central1-c\",\n runtimeVersion: \"tpu-vm-tf-2.13.0\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\navailable = gcp.tpu.get_v2_runtime_versions()\ntpu = gcp.tpu.V2Vm(\"tpu\",\n name=\"test-tpu\",\n zone=\"us-central1-c\",\n runtime_version=\"tpu-vm-tf-2.13.0\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var available = Gcp.Tpu.GetV2RuntimeVersions.Invoke();\n\n var tpu = new Gcp.Tpu.V2Vm(\"tpu\", new()\n {\n Name = \"test-tpu\",\n Zone = \"us-central1-c\",\n RuntimeVersion = \"tpu-vm-tf-2.13.0\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tpu\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := tpu.GetV2RuntimeVersions(ctx, \u0026tpu.GetV2RuntimeVersionsArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tpu.NewV2Vm(ctx, \"tpu\", \u0026tpu.V2VmArgs{\n\t\t\tName: pulumi.String(\"test-tpu\"),\n\t\t\tZone: pulumi.String(\"us-central1-c\"),\n\t\t\tRuntimeVersion: pulumi.String(\"tpu-vm-tf-2.13.0\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.tpu.TpuFunctions;\nimport com.pulumi.gcp.tpu.inputs.GetV2RuntimeVersionsArgs;\nimport com.pulumi.gcp.tpu.V2Vm;\nimport com.pulumi.gcp.tpu.V2VmArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var available = TpuFunctions.getV2RuntimeVersions();\n\n var tpu = new V2Vm(\"tpu\", V2VmArgs.builder()\n .name(\"test-tpu\")\n .zone(\"us-central1-c\")\n .runtimeVersion(\"tpu-vm-tf-2.13.0\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tpu:\n type: gcp:tpu:V2Vm\n properties:\n name: test-tpu\n zone: us-central1-c\n runtimeVersion: tpu-vm-tf-2.13.0\nvariables:\n available:\n fn::invoke:\n function: gcp:tpu:getV2RuntimeVersions\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Tpu V2 Vm Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst available = gcp.tpu.getV2RuntimeVersions({});\nconst availableGetV2AcceleratorTypes = gcp.tpu.getV2AcceleratorTypes({});\nconst network = new gcp.compute.Network(\"network\", {\n name: \"tpu-net\",\n autoCreateSubnetworks: false,\n});\nconst subnet = new gcp.compute.Subnetwork(\"subnet\", {\n name: \"tpu-subnet\",\n ipCidrRange: \"10.0.0.0/16\",\n region: \"us-central1\",\n network: network.id,\n});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"tpu-sa\",\n displayName: \"Test TPU VM\",\n});\nconst disk = new gcp.compute.Disk(\"disk\", {\n name: \"tpu-disk\",\n image: \"debian-cloud/debian-11\",\n size: 10,\n type: \"pd-ssd\",\n zone: \"us-central1-c\",\n});\n// Wait after service account creation to limit eventual consistency errors.\nconst wait60Seconds = new time.index.Sleep(\"wait_60_seconds\", {createDuration: \"60s\"}, {\n dependsOn: [sa],\n});\nconst tpu = new gcp.tpu.V2Vm(\"tpu\", {\n name: \"test-tpu\",\n zone: \"us-central1-c\",\n description: \"Text description of the TPU.\",\n runtimeVersion: \"tpu-vm-tf-2.13.0\",\n acceleratorConfig: {\n type: \"V2\",\n topology: \"2x2\",\n },\n cidrBlock: \"10.0.0.0/29\",\n networkConfig: {\n canIpForward: true,\n enableExternalIps: true,\n network: network.id,\n subnetwork: subnet.id,\n },\n schedulingConfig: {\n preemptible: true,\n },\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n },\n serviceAccount: {\n email: sa.email,\n scopes: [\"https://www.googleapis.com/auth/cloud-platform\"],\n },\n dataDisks: [{\n sourceDisk: disk.id,\n mode: \"READ_ONLY\",\n }],\n labels: {\n foo: \"bar\",\n },\n metadata: {\n foo: \"bar\",\n },\n tags: [\"foo\"],\n}, {\n dependsOn: [wait60Seconds],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\navailable = gcp.tpu.get_v2_runtime_versions()\navailable_get_v2_accelerator_types = gcp.tpu.get_v2_accelerator_types()\nnetwork = gcp.compute.Network(\"network\",\n name=\"tpu-net\",\n auto_create_subnetworks=False)\nsubnet = gcp.compute.Subnetwork(\"subnet\",\n name=\"tpu-subnet\",\n ip_cidr_range=\"10.0.0.0/16\",\n region=\"us-central1\",\n network=network.id)\nsa = gcp.serviceaccount.Account(\"sa\",\n account_id=\"tpu-sa\",\n display_name=\"Test TPU VM\")\ndisk = gcp.compute.Disk(\"disk\",\n name=\"tpu-disk\",\n image=\"debian-cloud/debian-11\",\n size=10,\n type=\"pd-ssd\",\n zone=\"us-central1-c\")\n# Wait after service account creation to limit eventual consistency errors.\nwait60_seconds = time.index.Sleep(\"wait_60_seconds\", create_duration=60s,\nopts = pulumi.ResourceOptions(depends_on=[sa]))\ntpu = gcp.tpu.V2Vm(\"tpu\",\n name=\"test-tpu\",\n zone=\"us-central1-c\",\n description=\"Text description of the TPU.\",\n runtime_version=\"tpu-vm-tf-2.13.0\",\n accelerator_config={\n \"type\": \"V2\",\n \"topology\": \"2x2\",\n },\n cidr_block=\"10.0.0.0/29\",\n network_config={\n \"can_ip_forward\": True,\n \"enable_external_ips\": True,\n \"network\": network.id,\n \"subnetwork\": subnet.id,\n },\n scheduling_config={\n \"preemptible\": True,\n },\n shielded_instance_config={\n \"enable_secure_boot\": True,\n },\n service_account={\n \"email\": sa.email,\n \"scopes\": [\"https://www.googleapis.com/auth/cloud-platform\"],\n },\n data_disks=[{\n \"source_disk\": disk.id,\n \"mode\": \"READ_ONLY\",\n }],\n labels={\n \"foo\": \"bar\",\n },\n metadata={\n \"foo\": \"bar\",\n },\n tags=[\"foo\"],\n opts = pulumi.ResourceOptions(depends_on=[wait60_seconds]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var available = Gcp.Tpu.GetV2RuntimeVersions.Invoke();\n\n var availableGetV2AcceleratorTypes = Gcp.Tpu.GetV2AcceleratorTypes.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"tpu-net\",\n AutoCreateSubnetworks = false,\n });\n\n var subnet = new Gcp.Compute.Subnetwork(\"subnet\", new()\n {\n Name = \"tpu-subnet\",\n IpCidrRange = \"10.0.0.0/16\",\n Region = \"us-central1\",\n Network = network.Id,\n });\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"tpu-sa\",\n DisplayName = \"Test TPU VM\",\n });\n\n var disk = new Gcp.Compute.Disk(\"disk\", new()\n {\n Name = \"tpu-disk\",\n Image = \"debian-cloud/debian-11\",\n Size = 10,\n Type = \"pd-ssd\",\n Zone = \"us-central1-c\",\n });\n\n // Wait after service account creation to limit eventual consistency errors.\n var wait60Seconds = new Time.Index.Sleep(\"wait_60_seconds\", new()\n {\n CreateDuration = \"60s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n sa,\n },\n });\n\n var tpu = new Gcp.Tpu.V2Vm(\"tpu\", new()\n {\n Name = \"test-tpu\",\n Zone = \"us-central1-c\",\n Description = \"Text description of the TPU.\",\n RuntimeVersion = \"tpu-vm-tf-2.13.0\",\n AcceleratorConfig = new Gcp.Tpu.Inputs.V2VmAcceleratorConfigArgs\n {\n Type = \"V2\",\n Topology = \"2x2\",\n },\n CidrBlock = \"10.0.0.0/29\",\n NetworkConfig = new Gcp.Tpu.Inputs.V2VmNetworkConfigArgs\n {\n CanIpForward = true,\n EnableExternalIps = true,\n Network = network.Id,\n Subnetwork = subnet.Id,\n },\n SchedulingConfig = new Gcp.Tpu.Inputs.V2VmSchedulingConfigArgs\n {\n Preemptible = true,\n },\n ShieldedInstanceConfig = new Gcp.Tpu.Inputs.V2VmShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n },\n ServiceAccount = new Gcp.Tpu.Inputs.V2VmServiceAccountArgs\n {\n Email = sa.Email,\n Scopes = new[]\n {\n \"https://www.googleapis.com/auth/cloud-platform\",\n },\n },\n DataDisks = new[]\n {\n new Gcp.Tpu.Inputs.V2VmDataDiskArgs\n {\n SourceDisk = disk.Id,\n Mode = \"READ_ONLY\",\n },\n },\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Metadata = \n {\n { \"foo\", \"bar\" },\n },\n Tags = new[]\n {\n \"foo\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n wait60Seconds,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tpu\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := tpu.GetV2RuntimeVersions(ctx, \u0026tpu.GetV2RuntimeVersionsArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tpu.GetV2AcceleratorTypes(ctx, \u0026tpu.GetV2AcceleratorTypesArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"tpu-net\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsubnet, err := compute.NewSubnetwork(ctx, \"subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"tpu-subnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/16\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := serviceaccount.NewAccount(ctx, \"sa\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"tpu-sa\"),\n\t\t\tDisplayName: pulumi.String(\"Test TPU VM\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdisk, err := compute.NewDisk(ctx, \"disk\", \u0026compute.DiskArgs{\n\t\t\tName: pulumi.String(\"tpu-disk\"),\n\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\n\t\t\tSize: pulumi.Int(10),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-c\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Wait after service account creation to limit eventual consistency errors.\n\t\twait60Seconds, err := time.NewSleep(ctx, \"wait_60_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"60s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsa,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tpu.NewV2Vm(ctx, \"tpu\", \u0026tpu.V2VmArgs{\n\t\t\tName: pulumi.String(\"test-tpu\"),\n\t\t\tZone: pulumi.String(\"us-central1-c\"),\n\t\t\tDescription: pulumi.String(\"Text description of the TPU.\"),\n\t\t\tRuntimeVersion: pulumi.String(\"tpu-vm-tf-2.13.0\"),\n\t\t\tAcceleratorConfig: \u0026tpu.V2VmAcceleratorConfigArgs{\n\t\t\t\tType: pulumi.String(\"V2\"),\n\t\t\t\tTopology: pulumi.String(\"2x2\"),\n\t\t\t},\n\t\t\tCidrBlock: pulumi.String(\"10.0.0.0/29\"),\n\t\t\tNetworkConfig: \u0026tpu.V2VmNetworkConfigArgs{\n\t\t\t\tCanIpForward: pulumi.Bool(true),\n\t\t\t\tEnableExternalIps: pulumi.Bool(true),\n\t\t\t\tNetwork: network.ID(),\n\t\t\t\tSubnetwork: subnet.ID(),\n\t\t\t},\n\t\t\tSchedulingConfig: \u0026tpu.V2VmSchedulingConfigArgs{\n\t\t\t\tPreemptible: pulumi.Bool(true),\n\t\t\t},\n\t\t\tShieldedInstanceConfig: \u0026tpu.V2VmShieldedInstanceConfigArgs{\n\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t},\n\t\t\tServiceAccount: \u0026tpu.V2VmServiceAccountArgs{\n\t\t\t\tEmail: sa.Email,\n\t\t\t\tScopes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://www.googleapis.com/auth/cloud-platform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDataDisks: tpu.V2VmDataDiskArray{\n\t\t\t\t\u0026tpu.V2VmDataDiskArgs{\n\t\t\t\t\tSourceDisk: disk.ID(),\n\t\t\t\t\tMode: pulumi.String(\"READ_ONLY\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twait60Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.tpu.TpuFunctions;\nimport com.pulumi.gcp.tpu.inputs.GetV2RuntimeVersionsArgs;\nimport com.pulumi.gcp.tpu.inputs.GetV2AcceleratorTypesArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.compute.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.tpu.V2Vm;\nimport com.pulumi.gcp.tpu.V2VmArgs;\nimport com.pulumi.gcp.tpu.inputs.V2VmAcceleratorConfigArgs;\nimport com.pulumi.gcp.tpu.inputs.V2VmNetworkConfigArgs;\nimport com.pulumi.gcp.tpu.inputs.V2VmSchedulingConfigArgs;\nimport com.pulumi.gcp.tpu.inputs.V2VmShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.tpu.inputs.V2VmServiceAccountArgs;\nimport com.pulumi.gcp.tpu.inputs.V2VmDataDiskArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var available = TpuFunctions.getV2RuntimeVersions();\n\n final var availableGetV2AcceleratorTypes = TpuFunctions.getV2AcceleratorTypes();\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"tpu-net\")\n .autoCreateSubnetworks(false)\n .build());\n\n var subnet = new Subnetwork(\"subnet\", SubnetworkArgs.builder()\n .name(\"tpu-subnet\")\n .ipCidrRange(\"10.0.0.0/16\")\n .region(\"us-central1\")\n .network(network.id())\n .build());\n\n var sa = new Account(\"sa\", AccountArgs.builder()\n .accountId(\"tpu-sa\")\n .displayName(\"Test TPU VM\")\n .build());\n\n var disk = new Disk(\"disk\", DiskArgs.builder()\n .name(\"tpu-disk\")\n .image(\"debian-cloud/debian-11\")\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-c\")\n .build());\n\n // Wait after service account creation to limit eventual consistency errors.\n var wait60Seconds = new Sleep(\"wait60Seconds\", SleepArgs.builder()\n .createDuration(\"60s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(sa)\n .build());\n\n var tpu = new V2Vm(\"tpu\", V2VmArgs.builder()\n .name(\"test-tpu\")\n .zone(\"us-central1-c\")\n .description(\"Text description of the TPU.\")\n .runtimeVersion(\"tpu-vm-tf-2.13.0\")\n .acceleratorConfig(V2VmAcceleratorConfigArgs.builder()\n .type(\"V2\")\n .topology(\"2x2\")\n .build())\n .cidrBlock(\"10.0.0.0/29\")\n .networkConfig(V2VmNetworkConfigArgs.builder()\n .canIpForward(true)\n .enableExternalIps(true)\n .network(network.id())\n .subnetwork(subnet.id())\n .build())\n .schedulingConfig(V2VmSchedulingConfigArgs.builder()\n .preemptible(true)\n .build())\n .shieldedInstanceConfig(V2VmShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .build())\n .serviceAccount(V2VmServiceAccountArgs.builder()\n .email(sa.email())\n .scopes(\"https://www.googleapis.com/auth/cloud-platform\")\n .build())\n .dataDisks(V2VmDataDiskArgs.builder()\n .sourceDisk(disk.id())\n .mode(\"READ_ONLY\")\n .build())\n .labels(Map.of(\"foo\", \"bar\"))\n .metadata(Map.of(\"foo\", \"bar\"))\n .tags(\"foo\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(wait60Seconds)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tpu:\n type: gcp:tpu:V2Vm\n properties:\n name: test-tpu\n zone: us-central1-c\n description: Text description of the TPU.\n runtimeVersion: tpu-vm-tf-2.13.0\n acceleratorConfig:\n type: V2\n topology: 2x2\n cidrBlock: 10.0.0.0/29\n networkConfig:\n canIpForward: true\n enableExternalIps: true\n network: ${network.id}\n subnetwork: ${subnet.id}\n schedulingConfig:\n preemptible: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n serviceAccount:\n email: ${sa.email}\n scopes:\n - https://www.googleapis.com/auth/cloud-platform\n dataDisks:\n - sourceDisk: ${disk.id}\n mode: READ_ONLY\n labels:\n foo: bar\n metadata:\n foo: bar\n tags:\n - foo\n options:\n dependsOn:\n - ${wait60Seconds}\n subnet:\n type: gcp:compute:Subnetwork\n properties:\n name: tpu-subnet\n ipCidrRange: 10.0.0.0/16\n region: us-central1\n network: ${network.id}\n network:\n type: gcp:compute:Network\n properties:\n name: tpu-net\n autoCreateSubnetworks: false\n sa:\n type: gcp:serviceaccount:Account\n properties:\n accountId: tpu-sa\n displayName: Test TPU VM\n disk:\n type: gcp:compute:Disk\n properties:\n name: tpu-disk\n image: debian-cloud/debian-11\n size: 10\n type: pd-ssd\n zone: us-central1-c\n # Wait after service account creation to limit eventual consistency errors.\n wait60Seconds:\n type: time:sleep\n name: wait_60_seconds\n properties:\n createDuration: 60s\n options:\n dependsOn:\n - ${sa}\nvariables:\n available:\n fn::invoke:\n function: gcp:tpu:getV2RuntimeVersions\n arguments: {}\n availableGetV2AcceleratorTypes:\n fn::invoke:\n function: gcp:tpu:getV2AcceleratorTypes\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nVm can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{zone}}/nodes/{{name}}`\n\n* `{{project}}/{{zone}}/{{name}}`\n\n* `{{zone}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Vm can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:tpu/v2Vm:V2Vm default projects/{{project}}/locations/{{zone}}/nodes/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tpu/v2Vm:V2Vm default {{project}}/{{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tpu/v2Vm:V2Vm default {{zone}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tpu/v2Vm:V2Vm default {{name}}\n```\n\n",
"properties": {
@@ -271843,7 +274756,7 @@
}
},
"gcp:vertex/aiEndpoint:AiEndpoint": {
- "description": "Models are deployed into it, and afterwards Endpoint is called to obtain predictions and explanations.\n\n\nTo get more information about Endpoint, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Endpoint Network\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vertexNetwork = new gcp.compute.Network(\"vertex_network\", {name: \"network-name\"});\nconst vertexRange = new gcp.compute.GlobalAddress(\"vertex_range\", {\n name: \"address-name\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: vertexNetwork.id,\n});\nconst vertexVpcConnection = new gcp.servicenetworking.Connection(\"vertex_vpc_connection\", {\n network: vertexNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [vertexRange.name],\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bq_dataset\", {\n datasetId: \"some_dataset\",\n friendlyName: \"logging dataset\",\n description: \"This is a dataset that requests are logged to\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n});\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n network: pulumi.all([project, vertexNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/global/networks/${name}`),\n encryptionSpec: {\n kmsKeyName: \"kms-name\",\n },\n predictRequestResponseLoggingConfig: {\n bigqueryDestination: {\n outputUri: pulumi.all([project, bqDataset.datasetId]).apply(([project, datasetId]) =\u003e `bq://${project.projectId}.${datasetId}.request_response_logging`),\n },\n enabled: true,\n samplingRate: 0.1,\n },\n trafficSplit: JSON.stringify({\n \"12345\": 100,\n }),\n}, {\n dependsOn: [vertexVpcConnection],\n});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-name\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\nvertex_network = gcp.compute.Network(\"vertex_network\", name=\"network-name\")\nvertex_range = gcp.compute.GlobalAddress(\"vertex_range\",\n name=\"address-name\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=vertex_network.id)\nvertex_vpc_connection = gcp.servicenetworking.Connection(\"vertex_vpc_connection\",\n network=vertex_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[vertex_range.name])\nbq_dataset = gcp.bigquery.Dataset(\"bq_dataset\",\n dataset_id=\"some_dataset\",\n friendly_name=\"logging dataset\",\n description=\"This is a dataset that requests are logged to\",\n location=\"US\",\n delete_contents_on_destroy=True)\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n network=vertex_network.name.apply(lambda name: f\"projects/{project.number}/global/networks/{name}\"),\n encryption_spec={\n \"kms_key_name\": \"kms-name\",\n },\n predict_request_response_logging_config={\n \"bigquery_destination\": {\n \"output_uri\": bq_dataset.dataset_id.apply(lambda dataset_id: f\"bq://{project.project_id}.{dataset_id}.request_response_logging\"),\n },\n \"enabled\": True,\n \"sampling_rate\": 0.1,\n },\n traffic_split=json.dumps({\n \"12345\": 100,\n }),\n opts = pulumi.ResourceOptions(depends_on=[vertex_vpc_connection]))\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-name\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vertexNetwork = new Gcp.Compute.Network(\"vertex_network\", new()\n {\n Name = \"network-name\",\n });\n\n var vertexRange = new Gcp.Compute.GlobalAddress(\"vertex_range\", new()\n {\n Name = \"address-name\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = vertexNetwork.Id,\n });\n\n var vertexVpcConnection = new Gcp.ServiceNetworking.Connection(\"vertex_vpc_connection\", new()\n {\n Network = vertexNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n vertexRange.Name,\n },\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bq_dataset\", new()\n {\n DatasetId = \"some_dataset\",\n FriendlyName = \"logging dataset\",\n Description = \"This is a dataset that requests are logged to\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Network = Output.Tuple(project, vertexNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/global/networks/{name}\";\n }),\n EncryptionSpec = new Gcp.Vertex.Inputs.AiEndpointEncryptionSpecArgs\n {\n KmsKeyName = \"kms-name\",\n },\n PredictRequestResponseLoggingConfig = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigArgs\n {\n BigqueryDestination = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs\n {\n OutputUri = Output.Tuple(project, bqDataset.DatasetId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n return $\"bq://{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}.{datasetId}.request_response_logging\";\n }),\n },\n Enabled = true,\n SamplingRate = 0.1,\n },\n TrafficSplit = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"12345\"] = 100,\n }),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexVpcConnection,\n },\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-name\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-aiplatform.iam.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvertexNetwork, err := compute.NewNetwork(ctx, \"vertex_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexRange, err := compute.NewGlobalAddress(ctx, \"vertex_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address-name\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexVpcConnection, err := servicenetworking.NewConnection(ctx, \"vertex_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tvertexRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqDataset, err := bigquery.NewDataset(ctx, \"bq_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"some_dataset\"),\n\t\t\tFriendlyName: pulumi.String(\"logging dataset\"),\n\t\t\tDescription: pulumi.String(\"This is a dataset that requests are logged to\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tDeleteContentsOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"12345\": 100,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tNetwork: vertexNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tEncryptionSpec: \u0026vertex.AiEndpointEncryptionSpecArgs{\n\t\t\t\tKmsKeyName: pulumi.String(\"kms-name\"),\n\t\t\t},\n\t\t\tPredictRequestResponseLoggingConfig: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigArgs{\n\t\t\t\tBigqueryDestination: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs{\n\t\t\t\t\tOutputUri: bqDataset.DatasetId.ApplyT(func(datasetId string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.request_response_logging\", project.ProjectId, datasetId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tSamplingRate: pulumi.Float64(0.1),\n\t\t\t},\n\t\t\tTrafficSplit: pulumi.String(json0),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-name\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointEncryptionSpecArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var vertexNetwork = new Network(\"vertexNetwork\", NetworkArgs.builder()\n .name(\"network-name\")\n .build());\n\n var vertexRange = new GlobalAddress(\"vertexRange\", GlobalAddressArgs.builder()\n .name(\"address-name\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(vertexNetwork.id())\n .build());\n\n var vertexVpcConnection = new Connection(\"vertexVpcConnection\", ConnectionArgs.builder()\n .network(vertexNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(vertexRange.name())\n .build());\n\n var bqDataset = new Dataset(\"bqDataset\", DatasetArgs.builder()\n .datasetId(\"some_dataset\")\n .friendlyName(\"logging dataset\")\n .description(\"This is a dataset that requests are logged to\")\n .location(\"US\")\n .deleteContentsOnDestroy(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .network(vertexNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .encryptionSpec(AiEndpointEncryptionSpecArgs.builder()\n .kmsKeyName(\"kms-name\")\n .build())\n .predictRequestResponseLoggingConfig(AiEndpointPredictRequestResponseLoggingConfigArgs.builder()\n .bigqueryDestination(AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs.builder()\n .outputUri(bqDataset.datasetId().applyValue(datasetId -\u003e String.format(\"bq://%s.%s.request_response_logging\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId()),datasetId)))\n .build())\n .enabled(true)\n .samplingRate(0.1)\n .build())\n .trafficSplit(serializeJson(\n jsonObject(\n jsonProperty(\"12345\", 100)\n )))\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexVpcConnection)\n .build());\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-name\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n network: projects/${project.number}/global/networks/${vertexNetwork.name}\n encryptionSpec:\n kmsKeyName: kms-name\n predictRequestResponseLoggingConfig:\n bigqueryDestination:\n outputUri: bq://${project.projectId}.${bqDataset.datasetId}.request_response_logging\n enabled: true\n samplingRate: 0.1\n trafficSplit:\n fn::toJSON:\n '12345': 100\n options:\n dependsOn:\n - ${vertexVpcConnection}\n vertexVpcConnection:\n type: gcp:servicenetworking:Connection\n name: vertex_vpc_connection\n properties:\n network: ${vertexNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${vertexRange.name}\n vertexRange:\n type: gcp:compute:GlobalAddress\n name: vertex_range\n properties:\n name: address-name\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${vertexNetwork.id}\n vertexNetwork:\n type: gcp:compute:Network\n name: vertex_network\n properties:\n name: network-name\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-name\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n bqDataset:\n type: gcp:bigquery:Dataset\n name: bq_dataset\n properties:\n datasetId: some_dataset\n friendlyName: logging dataset\n description: This is a dataset that requests are logged to\n location: US\n deleteContentsOnDestroy: true\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Private Service Connect\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_69391\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n privateServiceConnectConfig: {\n enablePrivateServiceConnect: true,\n projectAllowlists: [project.then(project =\u003e project.projectId)],\n enableSecurePrivateServiceConnect: false,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_69391\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n private_service_connect_config={\n \"enable_private_service_connect\": True,\n \"project_allowlists\": [project.project_id],\n \"enable_secure_private_service_connect\": False,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_69391\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n PrivateServiceConnectConfig = new Gcp.Vertex.Inputs.AiEndpointPrivateServiceConnectConfigArgs\n {\n EnablePrivateServiceConnect = true,\n ProjectAllowlists = new[]\n {\n project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n EnableSecurePrivateServiceConnect = false,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_69391\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tPrivateServiceConnectConfig: \u0026vertex.AiEndpointPrivateServiceConnectConfigArgs{\n\t\t\t\tEnablePrivateServiceConnect: pulumi.Bool(true),\n\t\t\t\tProjectAllowlists: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t\tEnableSecurePrivateServiceConnect: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPrivateServiceConnectConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_69391\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .privateServiceConnectConfig(AiEndpointPrivateServiceConnectConfigArgs.builder()\n .enablePrivateServiceConnect(true)\n .projectAllowlists(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .enableSecurePrivateServiceConnect(false)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_69391\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n privateServiceConnectConfig:\n enablePrivateServiceConnect: true\n projectAllowlists:\n - ${project.projectId}\n enableSecurePrivateServiceConnect: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Dedicated Endpoint\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_8270\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n dedicatedEndpointEnabled: true,\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_8270\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n dedicated_endpoint_enabled=True)\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_8270\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n DedicatedEndpointEnabled = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_8270\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tDedicatedEndpointEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_8270\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .dedicatedEndpointEnabled(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_8270\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n dedicatedEndpointEnabled: true\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Endpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default projects/{{project}}/locations/{{location}}/endpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{location}}/{{name}}\n```\n\n",
+ "description": "Models are deployed into it, and afterwards Endpoint is called to obtain predictions and explanations.\n\n\nTo get more information about Endpoint, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Endpoint Network\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vertexNetwork = new gcp.compute.Network(\"vertex_network\", {name: \"network-name\"});\nconst vertexRange = new gcp.compute.GlobalAddress(\"vertex_range\", {\n name: \"address-name\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: vertexNetwork.id,\n});\nconst vertexVpcConnection = new gcp.servicenetworking.Connection(\"vertex_vpc_connection\", {\n network: vertexNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [vertexRange.name],\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bq_dataset\", {\n datasetId: \"some_dataset\",\n friendlyName: \"logging dataset\",\n description: \"This is a dataset that requests are logged to\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n});\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n network: pulumi.all([project, vertexNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/global/networks/${name}`),\n encryptionSpec: {\n kmsKeyName: \"kms-name\",\n },\n predictRequestResponseLoggingConfig: {\n bigqueryDestination: {\n outputUri: pulumi.all([project, bqDataset.datasetId]).apply(([project, datasetId]) =\u003e `bq://${project.projectId}.${datasetId}.request_response_logging`),\n },\n enabled: true,\n samplingRate: 0.1,\n },\n trafficSplit: JSON.stringify({\n \"12345\": 100,\n }),\n}, {\n dependsOn: [vertexVpcConnection],\n});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-name\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\nvertex_network = gcp.compute.Network(\"vertex_network\", name=\"network-name\")\nvertex_range = gcp.compute.GlobalAddress(\"vertex_range\",\n name=\"address-name\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=vertex_network.id)\nvertex_vpc_connection = gcp.servicenetworking.Connection(\"vertex_vpc_connection\",\n network=vertex_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[vertex_range.name])\nbq_dataset = gcp.bigquery.Dataset(\"bq_dataset\",\n dataset_id=\"some_dataset\",\n friendly_name=\"logging dataset\",\n description=\"This is a dataset that requests are logged to\",\n location=\"US\",\n delete_contents_on_destroy=True)\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n network=vertex_network.name.apply(lambda name: f\"projects/{project.number}/global/networks/{name}\"),\n encryption_spec={\n \"kms_key_name\": \"kms-name\",\n },\n predict_request_response_logging_config={\n \"bigquery_destination\": {\n \"output_uri\": bq_dataset.dataset_id.apply(lambda dataset_id: f\"bq://{project.project_id}.{dataset_id}.request_response_logging\"),\n },\n \"enabled\": True,\n \"sampling_rate\": 0.1,\n },\n traffic_split=json.dumps({\n \"12345\": 100,\n }),\n opts = pulumi.ResourceOptions(depends_on=[vertex_vpc_connection]))\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-name\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vertexNetwork = new Gcp.Compute.Network(\"vertex_network\", new()\n {\n Name = \"network-name\",\n });\n\n var vertexRange = new Gcp.Compute.GlobalAddress(\"vertex_range\", new()\n {\n Name = \"address-name\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = vertexNetwork.Id,\n });\n\n var vertexVpcConnection = new Gcp.ServiceNetworking.Connection(\"vertex_vpc_connection\", new()\n {\n Network = vertexNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n vertexRange.Name,\n },\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bq_dataset\", new()\n {\n DatasetId = \"some_dataset\",\n FriendlyName = \"logging dataset\",\n Description = \"This is a dataset that requests are logged to\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Network = Output.Tuple(project, vertexNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/global/networks/{name}\";\n }),\n EncryptionSpec = new Gcp.Vertex.Inputs.AiEndpointEncryptionSpecArgs\n {\n KmsKeyName = \"kms-name\",\n },\n PredictRequestResponseLoggingConfig = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigArgs\n {\n BigqueryDestination = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs\n {\n OutputUri = Output.Tuple(project, bqDataset.DatasetId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n return $\"bq://{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}.{datasetId}.request_response_logging\";\n }),\n },\n Enabled = true,\n SamplingRate = 0.1,\n },\n TrafficSplit = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"12345\"] = 100,\n }),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexVpcConnection,\n },\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-name\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-aiplatform.iam.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvertexNetwork, err := compute.NewNetwork(ctx, \"vertex_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexRange, err := compute.NewGlobalAddress(ctx, \"vertex_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address-name\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexVpcConnection, err := servicenetworking.NewConnection(ctx, \"vertex_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tvertexRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqDataset, err := bigquery.NewDataset(ctx, \"bq_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"some_dataset\"),\n\t\t\tFriendlyName: pulumi.String(\"logging dataset\"),\n\t\t\tDescription: pulumi.String(\"This is a dataset that requests are logged to\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tDeleteContentsOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"12345\": 100,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tNetwork: vertexNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tEncryptionSpec: \u0026vertex.AiEndpointEncryptionSpecArgs{\n\t\t\t\tKmsKeyName: pulumi.String(\"kms-name\"),\n\t\t\t},\n\t\t\tPredictRequestResponseLoggingConfig: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigArgs{\n\t\t\t\tBigqueryDestination: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs{\n\t\t\t\t\tOutputUri: bqDataset.DatasetId.ApplyT(func(datasetId string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.request_response_logging\", project.ProjectId, datasetId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tSamplingRate: pulumi.Float64(0.1),\n\t\t\t},\n\t\t\tTrafficSplit: pulumi.String(json0),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-name\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointEncryptionSpecArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var vertexNetwork = new Network(\"vertexNetwork\", NetworkArgs.builder()\n .name(\"network-name\")\n .build());\n\n var vertexRange = new GlobalAddress(\"vertexRange\", GlobalAddressArgs.builder()\n .name(\"address-name\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(vertexNetwork.id())\n .build());\n\n var vertexVpcConnection = new Connection(\"vertexVpcConnection\", ConnectionArgs.builder()\n .network(vertexNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(vertexRange.name())\n .build());\n\n var bqDataset = new Dataset(\"bqDataset\", DatasetArgs.builder()\n .datasetId(\"some_dataset\")\n .friendlyName(\"logging dataset\")\n .description(\"This is a dataset that requests are logged to\")\n .location(\"US\")\n .deleteContentsOnDestroy(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .network(vertexNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .encryptionSpec(AiEndpointEncryptionSpecArgs.builder()\n .kmsKeyName(\"kms-name\")\n .build())\n .predictRequestResponseLoggingConfig(AiEndpointPredictRequestResponseLoggingConfigArgs.builder()\n .bigqueryDestination(AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs.builder()\n .outputUri(bqDataset.datasetId().applyValue(datasetId -\u003e String.format(\"bq://%s.%s.request_response_logging\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId()),datasetId)))\n .build())\n .enabled(true)\n .samplingRate(0.1)\n .build())\n .trafficSplit(serializeJson(\n jsonObject(\n jsonProperty(\"12345\", 100)\n )))\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexVpcConnection)\n .build());\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-name\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n network: projects/${project.number}/global/networks/${vertexNetwork.name}\n encryptionSpec:\n kmsKeyName: kms-name\n predictRequestResponseLoggingConfig:\n bigqueryDestination:\n outputUri: bq://${project.projectId}.${bqDataset.datasetId}.request_response_logging\n enabled: true\n samplingRate: 0.1\n trafficSplit:\n fn::toJSON:\n '12345': 100\n options:\n dependsOn:\n - ${vertexVpcConnection}\n vertexVpcConnection:\n type: gcp:servicenetworking:Connection\n name: vertex_vpc_connection\n properties:\n network: ${vertexNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${vertexRange.name}\n vertexRange:\n type: gcp:compute:GlobalAddress\n name: vertex_range\n properties:\n name: address-name\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${vertexNetwork.id}\n vertexNetwork:\n type: gcp:compute:Network\n name: vertex_network\n properties:\n name: network-name\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-name\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n bqDataset:\n type: gcp:bigquery:Dataset\n name: bq_dataset\n properties:\n datasetId: some_dataset\n friendlyName: logging dataset\n description: This is a dataset that requests are logged to\n location: US\n deleteContentsOnDestroy: true\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Private Service Connect\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_8270\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n privateServiceConnectConfig: {\n enablePrivateServiceConnect: true,\n projectAllowlists: [project.then(project =\u003e project.projectId)],\n enableSecurePrivateServiceConnect: false,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_8270\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n private_service_connect_config={\n \"enable_private_service_connect\": True,\n \"project_allowlists\": [project.project_id],\n \"enable_secure_private_service_connect\": False,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_8270\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n PrivateServiceConnectConfig = new Gcp.Vertex.Inputs.AiEndpointPrivateServiceConnectConfigArgs\n {\n EnablePrivateServiceConnect = true,\n ProjectAllowlists = new[]\n {\n project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n EnableSecurePrivateServiceConnect = false,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_8270\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tPrivateServiceConnectConfig: \u0026vertex.AiEndpointPrivateServiceConnectConfigArgs{\n\t\t\t\tEnablePrivateServiceConnect: pulumi.Bool(true),\n\t\t\t\tProjectAllowlists: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t\tEnableSecurePrivateServiceConnect: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPrivateServiceConnectConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_8270\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .privateServiceConnectConfig(AiEndpointPrivateServiceConnectConfigArgs.builder()\n .enablePrivateServiceConnect(true)\n .projectAllowlists(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .enableSecurePrivateServiceConnect(false)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_8270\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n privateServiceConnectConfig:\n enablePrivateServiceConnect: true\n projectAllowlists:\n - ${project.projectId}\n enableSecurePrivateServiceConnect: false\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Dedicated Endpoint\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_41150\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n dedicatedEndpointEnabled: true,\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_41150\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n dedicated_endpoint_enabled=True)\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_41150\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n DedicatedEndpointEnabled = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_41150\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tDedicatedEndpointEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_41150\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .dedicatedEndpointEnabled(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_41150\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n dedicatedEndpointEnabled: true\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Endpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default projects/{{project}}/locations/{{location}}/endpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{location}}/{{name}}\n```\n\n",
"properties": {
"createTime": {
"type": "string",
@@ -272966,7 +275879,7 @@
}
},
"gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview": {
- "description": "FeatureView is representation of values that the FeatureOnlineStore will serve based on its syncConfig.\n\n\nTo get more information about FeatureOnlineStoreFeatureview, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featureOnlineStores.featureViews)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Featureonlinestore Featureview\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view\",\n schema: ` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`,\n});\nconst featureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", {\n name: \"example_feature_view\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view\",\n schema=\"\"\" [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n\"\"\")\nfeatureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\",\n name=\"example_feature_view\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view\",\n Schema = @\" [\n {\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n },\n {\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n }\n]\n\",\n });\n\n var featureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", new()\n {\n Name = \"example_feature_view\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view\"),\n\t\t\tSchema: pulumi.String(` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view\")\n .schema(\"\"\"\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n \"\"\")\n .build());\n\n var featureview = new AiFeatureOnlineStoreFeatureview(\"featureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view\n schema: |2\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n properties:\n name: example_feature_view\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Feature Registry\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_feature_registry\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_feature_view_feature_registry\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_feature_view_feature_registry\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_feature_view_feature_registry\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst featureviewFeatureregistry = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_feature_registry\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_feature_view_feature_registry\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_feature_view_feature_registry\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_feature_view_feature_registry\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\nfeatureview_featureregistry = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_feature_view_feature_registry\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_feature_view_feature_registry\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_feature_view_feature_registry\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var featureviewFeatureregistry = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_featureregistry\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_feature_registry\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_feature_view_feature_registry\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var featureviewFeatureregistry = new AiFeatureOnlineStoreFeatureview(\"featureviewFeatureregistry\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_feature_registry\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_feature_view_feature_registry\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_feature_view_feature_registry\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_feature_view_feature_registry\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n featureviewFeatureregistry:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_featureregistry\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Cross Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst testProject = gcp.organizations.getProject({});\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"tf-test_41150\",\n name: \"tf-test_89313\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst wait60Seconds = new time.index.Sleep(\"wait_60_seconds\", {createDuration: \"60s\"}, {\n dependsOn: [project],\n});\nconst vertexai = new gcp.projects.Service(\"vertexai\", {\n service: \"aiplatform.googleapis.com\",\n project: project.projectId,\n disableOnDestroy: false,\n}, {\n dependsOn: [wait60Seconds],\n});\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n}, {\n dependsOn: [vertexai],\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_cross_project_featureview\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst viewer = new gcp.bigquery.DatasetIamMember(\"viewer\", {\n project: testProject.then(testProject =\u003e testProject.projectId),\n datasetId: sampleDataset.datasetId,\n role: \"roles/bigquery.dataViewer\",\n member: pulumi.interpolate`serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`,\n}, {\n dependsOn: [featureonlinestore],\n});\nconst wait30Seconds = new time.index.Sleep(\"wait_30_seconds\", {createDuration: \"30s\"}, {\n dependsOn: [viewer],\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_cross_project_featureview\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_cross_project_featureview\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_cross_project_featureview\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst crossProjectFeatureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n projectNumber: testProject.then(testProject =\u003e testProject.number),\n },\n}, {\n dependsOn: [\n vertexai,\n wait30Seconds,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\ntest_project = gcp.organizations.get_project()\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test_41150\",\n name=\"tf-test_89313\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\nwait60_seconds = time.index.Sleep(\"wait_60_seconds\", create_duration=60s,\nopts = pulumi.ResourceOptions(depends_on=[project]))\nvertexai = gcp.projects.Service(\"vertexai\",\n service=\"aiplatform.googleapis.com\",\n project=project.project_id,\n disable_on_destroy=False,\n opts = pulumi.ResourceOptions(depends_on=[wait60_seconds]))\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[vertexai]))\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_cross_project_featureview\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nviewer = gcp.bigquery.DatasetIamMember(\"viewer\",\n project=test_project.project_id,\n dataset_id=sample_dataset.dataset_id,\n role=\"roles/bigquery.dataViewer\",\n member=project.number.apply(lambda number: f\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n opts = pulumi.ResourceOptions(depends_on=[featureonlinestore]))\nwait30_seconds = time.index.Sleep(\"wait_30_seconds\", create_duration=30s,\nopts = pulumi.ResourceOptions(depends_on=[viewer]))\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_cross_project_featureview\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_cross_project_featureview\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_cross_project_featureview\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\ncross_project_featureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n \"project_number\": test_project.number,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n vertexai,\n wait30_seconds,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"tf-test_41150\",\n Name = \"tf-test_89313\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var wait60Seconds = new Time.Index.Sleep(\"wait_60_seconds\", new()\n {\n CreateDuration = \"60s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n project,\n },\n });\n\n var vertexai = new Gcp.Projects.Service(\"vertexai\", new()\n {\n ServiceName = \"aiplatform.googleapis.com\",\n Project = project.ProjectId,\n DisableOnDestroy = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n wait60Seconds,\n },\n });\n\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_cross_project_featureview\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var viewer = new Gcp.BigQuery.DatasetIamMember(\"viewer\", new()\n {\n Project = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n DatasetId = sampleDataset.DatasetId,\n Role = \"roles/bigquery.dataViewer\",\n Member = project.Number.Apply(number =\u003e $\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n featureonlinestore,\n },\n });\n\n var wait30Seconds = new Time.Index.Sleep(\"wait_30_seconds\", new()\n {\n CreateDuration = \"30s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n viewer,\n },\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_cross_project_featureview\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_cross_project_featureview\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_cross_project_featureview\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_cross_project_featureview\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var crossProjectFeatureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n ProjectNumber = testProject.Apply(getProjectResult =\u003e getProjectResult.Number),\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n wait30Seconds,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_41150\"),\n\t\t\tName: pulumi.String(\"tf-test_89313\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait60Seconds, err := time.NewSleep(ctx, \"wait_60_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"60s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tproject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexai, err := projects.NewService(ctx, \"vertexai\", \u0026projects.ServiceArgs{\n\t\t\tService: pulumi.String(\"aiplatform.googleapis.com\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tDisableOnDestroy: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twait60Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tviewer, err := bigquery.NewDatasetIamMember(ctx, \"viewer\", \u0026bigquery.DatasetIamMemberArgs{\n\t\t\tProject: pulumi.String(testProject.ProjectId),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataViewer\"),\n\t\t\tMember: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", number), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfeatureonlinestore,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait30Seconds, err := time.NewSleep(ctx, \"wait_30_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"30s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tviewer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"cross_project_featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tProjectNumber: pulumi.String(testProject.Number),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t\twait30Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DatasetIamMember;\nimport com.pulumi.gcp.bigquery.DatasetIamMemberArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"tf-test_41150\")\n .name(\"tf-test_89313\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var wait60Seconds = new Sleep(\"wait60Seconds\", SleepArgs.builder()\n .createDuration(\"60s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(project)\n .build());\n\n var vertexai = new Service(\"vertexai\", ServiceArgs.builder()\n .service(\"aiplatform.googleapis.com\")\n .project(project.projectId())\n .disableOnDestroy(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(wait60Seconds)\n .build());\n\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexai)\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_cross_project_featureview\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var viewer = new DatasetIamMember(\"viewer\", DatasetIamMemberArgs.builder()\n .project(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .datasetId(sampleDataset.datasetId())\n .role(\"roles/bigquery.dataViewer\")\n .member(project.number().applyValue(number -\u003e String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", number)))\n .build(), CustomResourceOptions.builder()\n .dependsOn(featureonlinestore)\n .build());\n\n var wait30Seconds = new Sleep(\"wait30Seconds\", SleepArgs.builder()\n .createDuration(\"30s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(viewer)\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_cross_project_featureview\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_cross_project_featureview\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_cross_project_featureview\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var crossProjectFeatureview = new AiFeatureOnlineStoreFeatureview(\"crossProjectFeatureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .projectNumber(testProject.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n vertexai,\n wait30Seconds)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test_41150\n name: tf-test_89313\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n wait60Seconds:\n type: time:sleep\n name: wait_60_seconds\n properties:\n createDuration: 60s\n options:\n dependsOn:\n - ${project}\n wait30Seconds:\n type: time:sleep\n name: wait_30_seconds\n properties:\n createDuration: 30s\n options:\n dependsOn:\n - ${viewer}\n vertexai:\n type: gcp:projects:Service\n properties:\n service: aiplatform.googleapis.com\n project: ${project.projectId}\n disableOnDestroy: false # Needed for CI tests for permissions to propagate, should not be needed for actual usage\n options:\n dependsOn:\n - ${wait60Seconds}\n viewer:\n type: gcp:bigquery:DatasetIamMember\n properties:\n project: ${testProject.projectId}\n datasetId: ${sampleDataset.datasetId}\n role: roles/bigquery.dataViewer\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n options:\n dependsOn:\n - ${featureonlinestore}\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n options:\n dependsOn:\n - ${vertexai}\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_cross_project_featureview\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_cross_project_featureview\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_cross_project_featureview\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_cross_project_featureview\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n crossProjectFeatureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: cross_project_featureview\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n projectNumber: ${testProject.number}\n options:\n dependsOn:\n - ${vertexai}\n - ${wait30Seconds}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview With Vector Search\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_vector_search\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n embeddingManagement: {\n enabled: true,\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view_vector_search\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view_vector_search\",\n schema: `[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`,\n});\nconst featureviewVectorSearch = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", {\n name: \"example_feature_view_vector_search\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n vectorSearchConfig: {\n embeddingColumn: \"embedding\",\n filterColumns: [\"country\"],\n crowdingColumn: \"test_crowding_column\",\n distanceMeasureType: \"DOT_PRODUCT_DISTANCE\",\n treeAhConfig: {\n leafNodeEmbeddingCount: \"1000\",\n },\n embeddingDimension: 2,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_vector_search\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n embedding_management={\n \"enabled\": True,\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view_vector_search\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view_vector_search\",\n schema=\"\"\"[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n\"\"\")\nfeatureview_vector_search = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\",\n name=\"example_feature_view_vector_search\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n },\n vector_search_config={\n \"embedding_column\": \"embedding\",\n \"filter_columns\": [\"country\"],\n \"crowding_column\": \"test_crowding_column\",\n \"distance_measure_type\": \"DOT_PRODUCT_DISTANCE\",\n \"tree_ah_config\": {\n \"leaf_node_embedding_count\": \"1000\",\n },\n \"embedding_dimension\": 2,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n EmbeddingManagement = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreEmbeddingManagementArgs\n {\n Enabled = true,\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view_vector_search\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view_vector_search\",\n Schema = @\"[\n{\n \"\"name\"\": \"\"test_primary_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"primary test id\"\"\n},\n{\n \"\"name\"\": \"\"embedding\"\",\n \"\"mode\"\": \"\"REPEATED\"\",\n \"\"type\"\": \"\"FLOAT\"\",\n \"\"description\"\": \"\"embedding column for primary_id column\"\"\n},\n{\n \"\"name\"\": \"\"country\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"country\"\"\n},\n{\n \"\"name\"\": \"\"test_crowding_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"INTEGER\"\",\n \"\"description\"\": \"\"test crowding column\"\"\n},\n{\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n},\n{\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n},\n{\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n}\n]\n\",\n });\n\n var featureviewVectorSearch = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n VectorSearchConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs\n {\n EmbeddingColumn = \"embedding\",\n FilterColumns = new[]\n {\n \"country\",\n },\n CrowdingColumn = \"test_crowding_column\",\n DistanceMeasureType = \"DOT_PRODUCT_DISTANCE\",\n TreeAhConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs\n {\n LeafNodeEmbeddingCount = \"1000\",\n },\n EmbeddingDimension = 2,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEmbeddingManagement: \u0026vertex.AiFeatureOnlineStoreEmbeddingManagementArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tSchema: pulumi.String(`[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_vector_search\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVectorSearchConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs{\n\t\t\t\tEmbeddingColumn: pulumi.String(\"embedding\"),\n\t\t\t\tFilterColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"country\"),\n\t\t\t\t},\n\t\t\t\tCrowdingColumn: pulumi.String(\"test_crowding_column\"),\n\t\t\t\tDistanceMeasureType: pulumi.String(\"DOT_PRODUCT_DISTANCE\"),\n\t\t\t\tTreeAhConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs{\n\t\t\t\t\tLeafNodeEmbeddingCount: pulumi.String(\"1000\"),\n\t\t\t\t},\n\t\t\t\tEmbeddingDimension: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreEmbeddingManagementArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .embeddingManagement(AiFeatureOnlineStoreEmbeddingManagementArgs.builder()\n .enabled(true)\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_vector_search\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view_vector_search\")\n .schema(\"\"\"\n[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n \"\"\")\n .build());\n\n var featureviewVectorSearch = new AiFeatureOnlineStoreFeatureview(\"featureviewVectorSearch\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .vectorSearchConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs.builder()\n .embeddingColumn(\"embedding\")\n .filterColumns(\"country\")\n .crowdingColumn(\"test_crowding_column\")\n .distanceMeasureType(\"DOT_PRODUCT_DISTANCE\")\n .treeAhConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs.builder()\n .leafNodeEmbeddingCount(\"1000\")\n .build())\n .embeddingDimension(\"2\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_vector_search\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n embeddingManagement:\n enabled: true\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view_vector_search\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view_vector_search\n schema: |\n [\n {\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n },\n {\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n },\n {\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n },\n {\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n },\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureviewVectorSearch:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_vector_search\n properties:\n name: example_feature_view_vector_search\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\n vectorSearchConfig:\n embeddingColumn: embedding\n filterColumns:\n - country\n crowdingColumn: test_crowding_column\n distanceMeasureType: DOT_PRODUCT_DISTANCE\n treeAhConfig:\n leafNodeEmbeddingCount: '1000'\n embeddingDimension: '2'\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFeatureOnlineStoreFeatureview can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}`\n\n* `{{project}}/{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{feature_online_store}}/{{name}}`\n\nWhen using the `pulumi import` command, FeatureOnlineStoreFeatureview can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{project}}/{{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{feature_online_store}}/{{name}}\n```\n\n",
+ "description": "FeatureView is representation of values that the FeatureOnlineStore will serve based on its syncConfig.\n\n\nTo get more information about FeatureOnlineStoreFeatureview, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featureOnlineStores.featureViews)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Featureonlinestore Featureview\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view\",\n schema: ` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`,\n});\nconst featureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", {\n name: \"example_feature_view\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view\",\n schema=\"\"\" [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n\"\"\")\nfeatureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\",\n name=\"example_feature_view\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view\",\n Schema = @\" [\n {\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n },\n {\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n }\n]\n\",\n });\n\n var featureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", new()\n {\n Name = \"example_feature_view\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view\"),\n\t\t\tSchema: pulumi.String(` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view\")\n .schema(\"\"\"\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n \"\"\")\n .build());\n\n var featureview = new AiFeatureOnlineStoreFeatureview(\"featureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view\n schema: |2\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n properties:\n name: example_feature_view\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Feature Registry\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_feature_registry\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_feature_view_feature_registry\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_feature_view_feature_registry\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_feature_view_feature_registry\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst featureviewFeatureregistry = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_feature_registry\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_feature_view_feature_registry\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_feature_view_feature_registry\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_feature_view_feature_registry\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\nfeatureview_featureregistry = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_feature_view_feature_registry\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_feature_view_feature_registry\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_feature_view_feature_registry\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var featureviewFeatureregistry = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_featureregistry\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_feature_registry\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_feature_view_feature_registry\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var featureviewFeatureregistry = new AiFeatureOnlineStoreFeatureview(\"featureviewFeatureregistry\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_feature_registry\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_feature_view_feature_registry\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_feature_view_feature_registry\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_feature_view_feature_registry\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n featureviewFeatureregistry:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_featureregistry\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Cross Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst testProject = gcp.organizations.getProject({});\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"tf-test_89313\",\n name: \"tf-test_60646\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst wait60Seconds = new time.index.Sleep(\"wait_60_seconds\", {createDuration: \"60s\"}, {\n dependsOn: [project],\n});\nconst vertexai = new gcp.projects.Service(\"vertexai\", {\n service: \"aiplatform.googleapis.com\",\n project: project.projectId,\n disableOnDestroy: false,\n}, {\n dependsOn: [wait60Seconds],\n});\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n}, {\n dependsOn: [vertexai],\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_cross_project_featureview\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst viewer = new gcp.bigquery.DatasetIamMember(\"viewer\", {\n project: testProject.then(testProject =\u003e testProject.projectId),\n datasetId: sampleDataset.datasetId,\n role: \"roles/bigquery.dataViewer\",\n member: pulumi.interpolate`serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`,\n}, {\n dependsOn: [featureonlinestore],\n});\nconst wait30Seconds = new time.index.Sleep(\"wait_30_seconds\", {createDuration: \"30s\"}, {\n dependsOn: [viewer],\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_cross_project_featureview\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_cross_project_featureview\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_cross_project_featureview\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst crossProjectFeatureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n projectNumber: testProject.then(testProject =\u003e testProject.number),\n },\n}, {\n dependsOn: [\n vertexai,\n wait30Seconds,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\ntest_project = gcp.organizations.get_project()\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test_89313\",\n name=\"tf-test_60646\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\nwait60_seconds = time.index.Sleep(\"wait_60_seconds\", create_duration=60s,\nopts = pulumi.ResourceOptions(depends_on=[project]))\nvertexai = gcp.projects.Service(\"vertexai\",\n service=\"aiplatform.googleapis.com\",\n project=project.project_id,\n disable_on_destroy=False,\n opts = pulumi.ResourceOptions(depends_on=[wait60_seconds]))\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[vertexai]))\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_cross_project_featureview\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nviewer = gcp.bigquery.DatasetIamMember(\"viewer\",\n project=test_project.project_id,\n dataset_id=sample_dataset.dataset_id,\n role=\"roles/bigquery.dataViewer\",\n member=project.number.apply(lambda number: f\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n opts = pulumi.ResourceOptions(depends_on=[featureonlinestore]))\nwait30_seconds = time.index.Sleep(\"wait_30_seconds\", create_duration=30s,\nopts = pulumi.ResourceOptions(depends_on=[viewer]))\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_cross_project_featureview\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_cross_project_featureview\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_cross_project_featureview\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\ncross_project_featureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n \"project_number\": test_project.number,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n vertexai,\n wait30_seconds,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"tf-test_89313\",\n Name = \"tf-test_60646\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var wait60Seconds = new Time.Index.Sleep(\"wait_60_seconds\", new()\n {\n CreateDuration = \"60s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n project,\n },\n });\n\n var vertexai = new Gcp.Projects.Service(\"vertexai\", new()\n {\n ServiceName = \"aiplatform.googleapis.com\",\n Project = project.ProjectId,\n DisableOnDestroy = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n wait60Seconds,\n },\n });\n\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_cross_project_featureview\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var viewer = new Gcp.BigQuery.DatasetIamMember(\"viewer\", new()\n {\n Project = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n DatasetId = sampleDataset.DatasetId,\n Role = \"roles/bigquery.dataViewer\",\n Member = project.Number.Apply(number =\u003e $\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n featureonlinestore,\n },\n });\n\n var wait30Seconds = new Time.Index.Sleep(\"wait_30_seconds\", new()\n {\n CreateDuration = \"30s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n viewer,\n },\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_cross_project_featureview\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_cross_project_featureview\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_cross_project_featureview\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_cross_project_featureview\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var crossProjectFeatureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n ProjectNumber = testProject.Apply(getProjectResult =\u003e getProjectResult.Number),\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n wait30Seconds,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_89313\"),\n\t\t\tName: pulumi.String(\"tf-test_60646\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait60Seconds, err := time.NewSleep(ctx, \"wait_60_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"60s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tproject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexai, err := projects.NewService(ctx, \"vertexai\", \u0026projects.ServiceArgs{\n\t\t\tService: pulumi.String(\"aiplatform.googleapis.com\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tDisableOnDestroy: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twait60Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tviewer, err := bigquery.NewDatasetIamMember(ctx, \"viewer\", \u0026bigquery.DatasetIamMemberArgs{\n\t\t\tProject: pulumi.String(testProject.ProjectId),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataViewer\"),\n\t\t\tMember: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", number), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfeatureonlinestore,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait30Seconds, err := time.NewSleep(ctx, \"wait_30_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"30s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tviewer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"cross_project_featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tProjectNumber: pulumi.String(testProject.Number),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t\twait30Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DatasetIamMember;\nimport com.pulumi.gcp.bigquery.DatasetIamMemberArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"tf-test_89313\")\n .name(\"tf-test_60646\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var wait60Seconds = new Sleep(\"wait60Seconds\", SleepArgs.builder()\n .createDuration(\"60s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(project)\n .build());\n\n var vertexai = new Service(\"vertexai\", ServiceArgs.builder()\n .service(\"aiplatform.googleapis.com\")\n .project(project.projectId())\n .disableOnDestroy(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(wait60Seconds)\n .build());\n\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexai)\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_cross_project_featureview\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var viewer = new DatasetIamMember(\"viewer\", DatasetIamMemberArgs.builder()\n .project(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .datasetId(sampleDataset.datasetId())\n .role(\"roles/bigquery.dataViewer\")\n .member(project.number().applyValue(number -\u003e String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", number)))\n .build(), CustomResourceOptions.builder()\n .dependsOn(featureonlinestore)\n .build());\n\n var wait30Seconds = new Sleep(\"wait30Seconds\", SleepArgs.builder()\n .createDuration(\"30s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(viewer)\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_cross_project_featureview\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_cross_project_featureview\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_cross_project_featureview\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var crossProjectFeatureview = new AiFeatureOnlineStoreFeatureview(\"crossProjectFeatureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .projectNumber(testProject.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n vertexai,\n wait30Seconds)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test_89313\n name: tf-test_60646\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n wait60Seconds:\n type: time:sleep\n name: wait_60_seconds\n properties:\n createDuration: 60s\n options:\n dependsOn:\n - ${project}\n wait30Seconds:\n type: time:sleep\n name: wait_30_seconds\n properties:\n createDuration: 30s\n options:\n dependsOn:\n - ${viewer}\n vertexai:\n type: gcp:projects:Service\n properties:\n service: aiplatform.googleapis.com\n project: ${project.projectId}\n disableOnDestroy: false # Needed for CI tests for permissions to propagate, should not be needed for actual usage\n options:\n dependsOn:\n - ${wait60Seconds}\n viewer:\n type: gcp:bigquery:DatasetIamMember\n properties:\n project: ${testProject.projectId}\n datasetId: ${sampleDataset.datasetId}\n role: roles/bigquery.dataViewer\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n options:\n dependsOn:\n - ${featureonlinestore}\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n options:\n dependsOn:\n - ${vertexai}\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_cross_project_featureview\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_cross_project_featureview\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_cross_project_featureview\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_cross_project_featureview\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n crossProjectFeatureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: cross_project_featureview\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n projectNumber: ${testProject.number}\n options:\n dependsOn:\n - ${vertexai}\n - ${wait30Seconds}\nvariables:\n testProject:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview With Vector Search\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_vector_search\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n embeddingManagement: {\n enabled: true,\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view_vector_search\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view_vector_search\",\n schema: `[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`,\n});\nconst featureviewVectorSearch = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", {\n name: \"example_feature_view_vector_search\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n vectorSearchConfig: {\n embeddingColumn: \"embedding\",\n filterColumns: [\"country\"],\n crowdingColumn: \"test_crowding_column\",\n distanceMeasureType: \"DOT_PRODUCT_DISTANCE\",\n treeAhConfig: {\n leafNodeEmbeddingCount: \"1000\",\n },\n embeddingDimension: 2,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_vector_search\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n embedding_management={\n \"enabled\": True,\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view_vector_search\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view_vector_search\",\n schema=\"\"\"[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n\"\"\")\nfeatureview_vector_search = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\",\n name=\"example_feature_view_vector_search\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n },\n vector_search_config={\n \"embedding_column\": \"embedding\",\n \"filter_columns\": [\"country\"],\n \"crowding_column\": \"test_crowding_column\",\n \"distance_measure_type\": \"DOT_PRODUCT_DISTANCE\",\n \"tree_ah_config\": {\n \"leaf_node_embedding_count\": \"1000\",\n },\n \"embedding_dimension\": 2,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n EmbeddingManagement = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreEmbeddingManagementArgs\n {\n Enabled = true,\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view_vector_search\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view_vector_search\",\n Schema = @\"[\n{\n \"\"name\"\": \"\"test_primary_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"primary test id\"\"\n},\n{\n \"\"name\"\": \"\"embedding\"\",\n \"\"mode\"\": \"\"REPEATED\"\",\n \"\"type\"\": \"\"FLOAT\"\",\n \"\"description\"\": \"\"embedding column for primary_id column\"\"\n},\n{\n \"\"name\"\": \"\"country\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"country\"\"\n},\n{\n \"\"name\"\": \"\"test_crowding_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"INTEGER\"\",\n \"\"description\"\": \"\"test crowding column\"\"\n},\n{\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n},\n{\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n},\n{\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n}\n]\n\",\n });\n\n var featureviewVectorSearch = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n VectorSearchConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs\n {\n EmbeddingColumn = \"embedding\",\n FilterColumns = new[]\n {\n \"country\",\n },\n CrowdingColumn = \"test_crowding_column\",\n DistanceMeasureType = \"DOT_PRODUCT_DISTANCE\",\n TreeAhConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs\n {\n LeafNodeEmbeddingCount = \"1000\",\n },\n EmbeddingDimension = 2,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEmbeddingManagement: \u0026vertex.AiFeatureOnlineStoreEmbeddingManagementArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tSchema: pulumi.String(`[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_vector_search\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVectorSearchConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs{\n\t\t\t\tEmbeddingColumn: pulumi.String(\"embedding\"),\n\t\t\t\tFilterColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"country\"),\n\t\t\t\t},\n\t\t\t\tCrowdingColumn: pulumi.String(\"test_crowding_column\"),\n\t\t\t\tDistanceMeasureType: pulumi.String(\"DOT_PRODUCT_DISTANCE\"),\n\t\t\t\tTreeAhConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs{\n\t\t\t\t\tLeafNodeEmbeddingCount: pulumi.String(\"1000\"),\n\t\t\t\t},\n\t\t\t\tEmbeddingDimension: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreEmbeddingManagementArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .embeddingManagement(AiFeatureOnlineStoreEmbeddingManagementArgs.builder()\n .enabled(true)\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_vector_search\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view_vector_search\")\n .schema(\"\"\"\n[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n \"\"\")\n .build());\n\n var featureviewVectorSearch = new AiFeatureOnlineStoreFeatureview(\"featureviewVectorSearch\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .vectorSearchConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs.builder()\n .embeddingColumn(\"embedding\")\n .filterColumns(\"country\")\n .crowdingColumn(\"test_crowding_column\")\n .distanceMeasureType(\"DOT_PRODUCT_DISTANCE\")\n .treeAhConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs.builder()\n .leafNodeEmbeddingCount(\"1000\")\n .build())\n .embeddingDimension(\"2\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_vector_search\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n embeddingManagement:\n enabled: true\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view_vector_search\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view_vector_search\n schema: |\n [\n {\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n },\n {\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n },\n {\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n },\n {\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n },\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureviewVectorSearch:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_vector_search\n properties:\n name: example_feature_view_vector_search\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\n vectorSearchConfig:\n embeddingColumn: embedding\n filterColumns:\n - country\n crowdingColumn: test_crowding_column\n distanceMeasureType: DOT_PRODUCT_DISTANCE\n treeAhConfig:\n leafNodeEmbeddingCount: '1000'\n embeddingDimension: '2'\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFeatureOnlineStoreFeatureview can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}`\n\n* `{{project}}/{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{feature_online_store}}/{{name}}`\n\nWhen using the `pulumi import` command, FeatureOnlineStoreFeatureview can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{project}}/{{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{feature_online_store}}/{{name}}\n```\n\n",
"properties": {
"bigQuerySource": {
"$ref": "#/types/gcp:vertex/AiFeatureOnlineStoreFeatureviewBigQuerySource:AiFeatureOnlineStoreFeatureviewBigQuerySource",
@@ -274532,7 +277445,7 @@
}
},
"gcp:vertex/aiIndexEndpoint:AiIndexEndpoint": {
- "description": "An endpoint indexes are deployed into. An index endpoint can have multiple deployed indexes.\n\n\nTo get more information about IndexEndpoint, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.indexEndpoints/)\n\n## Example Usage\n\n### Vertex Ai Index Endpoint\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vertexNetwork = new gcp.compute.Network(\"vertex_network\", {name: \"network-name\"});\nconst vertexRange = new gcp.compute.GlobalAddress(\"vertex_range\", {\n name: \"address-name\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: vertexNetwork.id,\n});\nconst vertexVpcConnection = new gcp.servicenetworking.Connection(\"vertex_vpc_connection\", {\n network: vertexNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [vertexRange.name],\n});\nconst project = gcp.organizations.getProject({});\nconst indexEndpoint = new gcp.vertex.AiIndexEndpoint(\"index_endpoint\", {\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n network: pulumi.all([project, vertexNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/global/networks/${name}`),\n}, {\n dependsOn: [vertexVpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nvertex_network = gcp.compute.Network(\"vertex_network\", name=\"network-name\")\nvertex_range = gcp.compute.GlobalAddress(\"vertex_range\",\n name=\"address-name\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=vertex_network.id)\nvertex_vpc_connection = gcp.servicenetworking.Connection(\"vertex_vpc_connection\",\n network=vertex_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[vertex_range.name])\nproject = gcp.organizations.get_project()\nindex_endpoint = gcp.vertex.AiIndexEndpoint(\"index_endpoint\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n network=vertex_network.name.apply(lambda name: f\"projects/{project.number}/global/networks/{name}\"),\n opts = pulumi.ResourceOptions(depends_on=[vertex_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vertexNetwork = new Gcp.Compute.Network(\"vertex_network\", new()\n {\n Name = \"network-name\",\n });\n\n var vertexRange = new Gcp.Compute.GlobalAddress(\"vertex_range\", new()\n {\n Name = \"address-name\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = vertexNetwork.Id,\n });\n\n var vertexVpcConnection = new Gcp.ServiceNetworking.Connection(\"vertex_vpc_connection\", new()\n {\n Network = vertexNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n vertexRange.Name,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var indexEndpoint = new Gcp.Vertex.AiIndexEndpoint(\"index_endpoint\", new()\n {\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Network = Output.Tuple(project, vertexNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/global/networks/{name}\";\n }),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvertexNetwork, err := compute.NewNetwork(ctx, \"vertex_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexRange, err := compute.NewGlobalAddress(ctx, \"vertex_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address-name\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexVpcConnection, err := servicenetworking.NewConnection(ctx, \"vertex_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tvertexRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiIndexEndpoint(ctx, \"index_endpoint\", \u0026vertex.AiIndexEndpointArgs{\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tNetwork: vertexNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiIndexEndpoint;\nimport com.pulumi.gcp.vertex.AiIndexEndpointArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var vertexNetwork = new Network(\"vertexNetwork\", NetworkArgs.builder()\n .name(\"network-name\")\n .build());\n\n var vertexRange = new GlobalAddress(\"vertexRange\", GlobalAddressArgs.builder()\n .name(\"address-name\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(vertexNetwork.id())\n .build());\n\n var vertexVpcConnection = new Connection(\"vertexVpcConnection\", ConnectionArgs.builder()\n .network(vertexNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(vertexRange.name())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var indexEndpoint = new AiIndexEndpoint(\"indexEndpoint\", AiIndexEndpointArgs.builder()\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .network(vertexNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n indexEndpoint:\n type: gcp:vertex:AiIndexEndpoint\n name: index_endpoint\n properties:\n displayName: sample-endpoint\n description: A sample vertex endpoint\n region: us-central1\n labels:\n label-one: value-one\n network: projects/${project.number}/global/networks/${vertexNetwork.name}\n options:\n dependsOn:\n - ${vertexVpcConnection}\n vertexVpcConnection:\n type: gcp:servicenetworking:Connection\n name: vertex_vpc_connection\n properties:\n network: ${vertexNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${vertexRange.name}\n vertexRange:\n type: gcp:compute:GlobalAddress\n name: vertex_range\n properties:\n name: address-name\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${vertexNetwork.id}\n vertexNetwork:\n type: gcp:compute:Network\n name: vertex_network\n properties:\n name: network-name\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Index Endpoint With Psc\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst indexEndpoint = new gcp.vertex.AiIndexEndpoint(\"index_endpoint\", {\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n privateServiceConnectConfig: {\n enablePrivateServiceConnect: true,\n projectAllowlists: [project.then(project =\u003e project.number)],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nindex_endpoint = gcp.vertex.AiIndexEndpoint(\"index_endpoint\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n private_service_connect_config={\n \"enable_private_service_connect\": True,\n \"project_allowlists\": [project.number],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var indexEndpoint = new Gcp.Vertex.AiIndexEndpoint(\"index_endpoint\", new()\n {\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n PrivateServiceConnectConfig = new Gcp.Vertex.Inputs.AiIndexEndpointPrivateServiceConnectConfigArgs\n {\n EnablePrivateServiceConnect = true,\n ProjectAllowlists = new[]\n {\n project.Apply(getProjectResult =\u003e getProjectResult.Number),\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiIndexEndpoint(ctx, \"index_endpoint\", \u0026vertex.AiIndexEndpointArgs{\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tPrivateServiceConnectConfig: \u0026vertex.AiIndexEndpointPrivateServiceConnectConfigArgs{\n\t\t\t\tEnablePrivateServiceConnect: pulumi.Bool(true),\n\t\t\t\tProjectAllowlists: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(project.Number),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiIndexEndpoint;\nimport com.pulumi.gcp.vertex.AiIndexEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiIndexEndpointPrivateServiceConnectConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var indexEndpoint = new AiIndexEndpoint(\"indexEndpoint\", AiIndexEndpointArgs.builder()\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .privateServiceConnectConfig(AiIndexEndpointPrivateServiceConnectConfigArgs.builder()\n .enablePrivateServiceConnect(true)\n .projectAllowlists(project.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n indexEndpoint:\n type: gcp:vertex:AiIndexEndpoint\n name: index_endpoint\n properties:\n displayName: sample-endpoint\n description: A sample vertex endpoint\n region: us-central1\n labels:\n label-one: value-one\n privateServiceConnectConfig:\n enablePrivateServiceConnect: true\n projectAllowlists:\n - ${project.number}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Index Endpoint With Public Endpoint\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst indexEndpoint = new gcp.vertex.AiIndexEndpoint(\"index_endpoint\", {\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint with an public endpoint\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n publicEndpointEnabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nindex_endpoint = gcp.vertex.AiIndexEndpoint(\"index_endpoint\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint with an public endpoint\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n public_endpoint_enabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var indexEndpoint = new Gcp.Vertex.AiIndexEndpoint(\"index_endpoint\", new()\n {\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint with an public endpoint\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n PublicEndpointEnabled = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vertex.NewAiIndexEndpoint(ctx, \"index_endpoint\", \u0026vertex.AiIndexEndpointArgs{\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint with an public endpoint\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tPublicEndpointEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiIndexEndpoint;\nimport com.pulumi.gcp.vertex.AiIndexEndpointArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var indexEndpoint = new AiIndexEndpoint(\"indexEndpoint\", AiIndexEndpointArgs.builder()\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint with an public endpoint\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .publicEndpointEnabled(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n indexEndpoint:\n type: gcp:vertex:AiIndexEndpoint\n name: index_endpoint\n properties:\n displayName: sample-endpoint\n description: A sample vertex endpoint with an public endpoint\n region: us-central1\n labels:\n label-one: value-one\n publicEndpointEnabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nIndexEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/indexEndpoints/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, IndexEndpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiIndexEndpoint:AiIndexEndpoint default projects/{{project}}/locations/{{region}}/indexEndpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiIndexEndpoint:AiIndexEndpoint default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiIndexEndpoint:AiIndexEndpoint default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiIndexEndpoint:AiIndexEndpoint default {{name}}\n```\n\n",
+ "description": "An endpoint indexes are deployed into. An index endpoint can have multiple deployed indexes.\n\n\nTo get more information about IndexEndpoint, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.indexEndpoints/)\n\n## Example Usage\n\n### Vertex Ai Index Endpoint\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vertexNetwork = new gcp.compute.Network(\"vertex_network\", {name: \"network-name\"});\nconst vertexRange = new gcp.compute.GlobalAddress(\"vertex_range\", {\n name: \"address-name\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: vertexNetwork.id,\n});\nconst vertexVpcConnection = new gcp.servicenetworking.Connection(\"vertex_vpc_connection\", {\n network: vertexNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [vertexRange.name],\n});\nconst project = gcp.organizations.getProject({});\nconst indexEndpoint = new gcp.vertex.AiIndexEndpoint(\"index_endpoint\", {\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n network: pulumi.all([project, vertexNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/global/networks/${name}`),\n}, {\n dependsOn: [vertexVpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nvertex_network = gcp.compute.Network(\"vertex_network\", name=\"network-name\")\nvertex_range = gcp.compute.GlobalAddress(\"vertex_range\",\n name=\"address-name\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=vertex_network.id)\nvertex_vpc_connection = gcp.servicenetworking.Connection(\"vertex_vpc_connection\",\n network=vertex_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[vertex_range.name])\nproject = gcp.organizations.get_project()\nindex_endpoint = gcp.vertex.AiIndexEndpoint(\"index_endpoint\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n network=vertex_network.name.apply(lambda name: f\"projects/{project.number}/global/networks/{name}\"),\n opts = pulumi.ResourceOptions(depends_on=[vertex_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vertexNetwork = new Gcp.Compute.Network(\"vertex_network\", new()\n {\n Name = \"network-name\",\n });\n\n var vertexRange = new Gcp.Compute.GlobalAddress(\"vertex_range\", new()\n {\n Name = \"address-name\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = vertexNetwork.Id,\n });\n\n var vertexVpcConnection = new Gcp.ServiceNetworking.Connection(\"vertex_vpc_connection\", new()\n {\n Network = vertexNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n vertexRange.Name,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var indexEndpoint = new Gcp.Vertex.AiIndexEndpoint(\"index_endpoint\", new()\n {\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Network = Output.Tuple(project, vertexNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/global/networks/{name}\";\n }),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvertexNetwork, err := compute.NewNetwork(ctx, \"vertex_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexRange, err := compute.NewGlobalAddress(ctx, \"vertex_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address-name\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexVpcConnection, err := servicenetworking.NewConnection(ctx, \"vertex_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tvertexRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiIndexEndpoint(ctx, \"index_endpoint\", \u0026vertex.AiIndexEndpointArgs{\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tNetwork: vertexNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiIndexEndpoint;\nimport com.pulumi.gcp.vertex.AiIndexEndpointArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var vertexNetwork = new Network(\"vertexNetwork\", NetworkArgs.builder()\n .name(\"network-name\")\n .build());\n\n var vertexRange = new GlobalAddress(\"vertexRange\", GlobalAddressArgs.builder()\n .name(\"address-name\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(vertexNetwork.id())\n .build());\n\n var vertexVpcConnection = new Connection(\"vertexVpcConnection\", ConnectionArgs.builder()\n .network(vertexNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(vertexRange.name())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var indexEndpoint = new AiIndexEndpoint(\"indexEndpoint\", AiIndexEndpointArgs.builder()\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .network(vertexNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n indexEndpoint:\n type: gcp:vertex:AiIndexEndpoint\n name: index_endpoint\n properties:\n displayName: sample-endpoint\n description: A sample vertex endpoint\n region: us-central1\n labels:\n label-one: value-one\n network: projects/${project.number}/global/networks/${vertexNetwork.name}\n options:\n dependsOn:\n - ${vertexVpcConnection}\n vertexVpcConnection:\n type: gcp:servicenetworking:Connection\n name: vertex_vpc_connection\n properties:\n network: ${vertexNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${vertexRange.name}\n vertexRange:\n type: gcp:compute:GlobalAddress\n name: vertex_range\n properties:\n name: address-name\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${vertexNetwork.id}\n vertexNetwork:\n type: gcp:compute:Network\n name: vertex_network\n properties:\n name: network-name\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Index Endpoint With Psc\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst indexEndpoint = new gcp.vertex.AiIndexEndpoint(\"index_endpoint\", {\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n privateServiceConnectConfig: {\n enablePrivateServiceConnect: true,\n projectAllowlists: [project.then(project =\u003e project.name)],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nindex_endpoint = gcp.vertex.AiIndexEndpoint(\"index_endpoint\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n private_service_connect_config={\n \"enable_private_service_connect\": True,\n \"project_allowlists\": [project.name],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var indexEndpoint = new Gcp.Vertex.AiIndexEndpoint(\"index_endpoint\", new()\n {\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n PrivateServiceConnectConfig = new Gcp.Vertex.Inputs.AiIndexEndpointPrivateServiceConnectConfigArgs\n {\n EnablePrivateServiceConnect = true,\n ProjectAllowlists = new[]\n {\n project.Apply(getProjectResult =\u003e getProjectResult.Name),\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiIndexEndpoint(ctx, \"index_endpoint\", \u0026vertex.AiIndexEndpointArgs{\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tPrivateServiceConnectConfig: \u0026vertex.AiIndexEndpointPrivateServiceConnectConfigArgs{\n\t\t\t\tEnablePrivateServiceConnect: pulumi.Bool(true),\n\t\t\t\tProjectAllowlists: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(project.Name),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiIndexEndpoint;\nimport com.pulumi.gcp.vertex.AiIndexEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiIndexEndpointPrivateServiceConnectConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var indexEndpoint = new AiIndexEndpoint(\"indexEndpoint\", AiIndexEndpointArgs.builder()\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .privateServiceConnectConfig(AiIndexEndpointPrivateServiceConnectConfigArgs.builder()\n .enablePrivateServiceConnect(true)\n .projectAllowlists(project.applyValue(getProjectResult -\u003e getProjectResult.name()))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n indexEndpoint:\n type: gcp:vertex:AiIndexEndpoint\n name: index_endpoint\n properties:\n displayName: sample-endpoint\n description: A sample vertex endpoint\n region: us-central1\n labels:\n label-one: value-one\n privateServiceConnectConfig:\n enablePrivateServiceConnect: true\n projectAllowlists:\n - ${project.name}\nvariables:\n project:\n fn::invoke:\n function: gcp:organizations:getProject\n arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Index Endpoint With Public Endpoint\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst indexEndpoint = new gcp.vertex.AiIndexEndpoint(\"index_endpoint\", {\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint with an public endpoint\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n publicEndpointEnabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nindex_endpoint = gcp.vertex.AiIndexEndpoint(\"index_endpoint\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint with an public endpoint\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n public_endpoint_enabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var indexEndpoint = new Gcp.Vertex.AiIndexEndpoint(\"index_endpoint\", new()\n {\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint with an public endpoint\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n PublicEndpointEnabled = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vertex.NewAiIndexEndpoint(ctx, \"index_endpoint\", \u0026vertex.AiIndexEndpointArgs{\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint with an public endpoint\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tPublicEndpointEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiIndexEndpoint;\nimport com.pulumi.gcp.vertex.AiIndexEndpointArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var indexEndpoint = new AiIndexEndpoint(\"indexEndpoint\", AiIndexEndpointArgs.builder()\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint with an public endpoint\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .publicEndpointEnabled(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n indexEndpoint:\n type: gcp:vertex:AiIndexEndpoint\n name: index_endpoint\n properties:\n displayName: sample-endpoint\n description: A sample vertex endpoint with an public endpoint\n region: us-central1\n labels:\n label-one: value-one\n publicEndpointEnabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nIndexEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/indexEndpoints/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, IndexEndpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiIndexEndpoint:AiIndexEndpoint default projects/{{project}}/locations/{{region}}/indexEndpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiIndexEndpoint:AiIndexEndpoint default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiIndexEndpoint:AiIndexEndpoint default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiIndexEndpoint:AiIndexEndpoint default {{name}}\n```\n\n",
"properties": {
"createTime": {
"type": "string",
@@ -280512,6 +283425,72 @@
"type": "object"
}
},
+ "gcp:backupdisasterrecovery/getBackup:getBackup": {
+ "inputs": {
+ "description": "A collection of arguments for invoking getBackup.\n",
+ "properties": {
+ "backupVaultId": {
+ "type": "string"
+ },
+ "dataSourceId": {
+ "type": "string"
+ },
+ "location": {
+ "type": "string"
+ },
+ "project": {
+ "type": "string"
+ }
+ },
+ "type": "object",
+ "required": [
+ "backupVaultId",
+ "dataSourceId",
+ "location",
+ "project"
+ ]
+ },
+ "outputs": {
+ "description": "A collection of values returned by getBackup.\n",
+ "properties": {
+ "backupVaultId": {
+ "type": "string"
+ },
+ "backups": {
+ "items": {
+ "$ref": "#/types/gcp:backupdisasterrecovery/getBackupBackup:getBackupBackup"
+ },
+ "type": "array"
+ },
+ "dataSourceId": {
+ "type": "string"
+ },
+ "id": {
+ "description": "The provider-assigned unique ID for this managed resource.\n",
+ "type": "string"
+ },
+ "location": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "project": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "backupVaultId",
+ "backups",
+ "dataSourceId",
+ "location",
+ "name",
+ "project",
+ "id"
+ ],
+ "type": "object"
+ }
+ },
"gcp:backupdisasterrecovery/getBackupPlan:getBackupPlan": {
"inputs": {
"description": "A collection of arguments for invoking getBackupPlan.\n",
@@ -280679,6 +283658,168 @@
"type": "object"
}
},
+ "gcp:backupdisasterrecovery/getBackupVault:getBackupVault": {
+ "description": "A Backup and DRBackupVault.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my-backup-vault = gcp.backupdisasterrecovery.getBackupVault({\n location: \"us-central1\",\n backupVaultId: \"bv-1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_backup_vault = gcp.backupdisasterrecovery.get_backup_vault(location=\"us-central1\",\n backup_vault_id=\"bv-1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_backup_vault = Gcp.BackupDisasterRecovery.GetBackupVault.Invoke(new()\n {\n Location = \"us-central1\",\n BackupVaultId = \"bv-1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := backupdisasterrecovery.LookupBackupVault(ctx, \u0026backupdisasterrecovery.LookupBackupVaultArgs{\n\t\t\tLocation: \"us-central1\",\n\t\t\tBackupVaultId: \"bv-1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupdisasterrecoveryFunctions;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupVaultArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var my-backup-vault = BackupdisasterrecoveryFunctions.getBackupVault(GetBackupVaultArgs.builder()\n .location(\"us-central1\")\n .backupVaultId(\"bv-1\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n my-backup-vault:\n fn::invoke:\n function: gcp:backupdisasterrecovery:getBackupVault\n arguments:\n location: us-central1\n backupVaultId: bv-1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
+ "inputs": {
+ "description": "A collection of arguments for invoking getBackupVault.\n",
+ "properties": {
+ "backupVaultId": {
+ "type": "string",
+ "description": "The id of Backup Vault resource.\n\n- - -\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "The location in which the Backup Vault resource belongs.\n"
+ },
+ "project": {
+ "type": "string",
+ "description": "The project in which the resource belongs. If it\nis not provided, the provider project is used.\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "backupVaultId",
+ "location"
+ ]
+ },
+ "outputs": {
+ "description": "A collection of values returned by getBackupVault.\n",
+ "properties": {
+ "accessRestriction": {
+ "type": "string"
+ },
+ "allowMissing": {
+ "type": "boolean"
+ },
+ "annotations": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "backupCount": {
+ "type": "string"
+ },
+ "backupMinimumEnforcedRetentionDuration": {
+ "type": "string"
+ },
+ "backupVaultId": {
+ "type": "string"
+ },
+ "createTime": {
+ "type": "string"
+ },
+ "deletable": {
+ "type": "boolean"
+ },
+ "description": {
+ "type": "string"
+ },
+ "effectiveAnnotations": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "effectiveLabels": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "secret": true,
+ "type": "object"
+ },
+ "effectiveTime": {
+ "type": "string"
+ },
+ "etag": {
+ "type": "string"
+ },
+ "forceDelete": {
+ "type": "boolean"
+ },
+ "forceUpdate": {
+ "type": "boolean"
+ },
+ "id": {
+ "description": "The provider-assigned unique ID for this managed resource.\n",
+ "type": "string"
+ },
+ "ignoreBackupPlanReferences": {
+ "type": "boolean"
+ },
+ "ignoreInactiveDatasources": {
+ "type": "boolean"
+ },
+ "labels": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "location": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "project": {
+ "type": "string"
+ },
+ "pulumiLabels": {
+ "additionalProperties": {
+ "type": "string"
+ },
+ "secret": true,
+ "type": "object"
+ },
+ "serviceAccount": {
+ "type": "string"
+ },
+ "state": {
+ "type": "string"
+ },
+ "totalStoredBytes": {
+ "type": "string"
+ },
+ "uid": {
+ "type": "string"
+ },
+ "updateTime": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "accessRestriction",
+ "allowMissing",
+ "annotations",
+ "backupCount",
+ "backupMinimumEnforcedRetentionDuration",
+ "backupVaultId",
+ "createTime",
+ "deletable",
+ "description",
+ "effectiveAnnotations",
+ "effectiveLabels",
+ "effectiveTime",
+ "etag",
+ "forceDelete",
+ "forceUpdate",
+ "ignoreBackupPlanReferences",
+ "ignoreInactiveDatasources",
+ "labels",
+ "location",
+ "name",
+ "serviceAccount",
+ "state",
+ "pulumiLabels",
+ "totalStoredBytes",
+ "uid",
+ "updateTime",
+ "id"
+ ],
+ "type": "object"
+ }
+ },
"gcp:backupdisasterrecovery/getDataSource:getDataSource": {
"inputs": {
"description": "A collection of arguments for invoking getDataSource.\n",
@@ -284647,7 +287788,7 @@
}
},
"gcp:composer/getUserWorkloadsConfigMap:getUserWorkloadsConfigMap": {
- "description": "## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleEnvironment = new gcp.composer.Environment(\"example\", {\n name: \"example-environment\",\n config: {\n softwareConfig: {\n imageVersion: \"composer-3-airflow-2\",\n },\n },\n});\nconst exampleUserWorkloadsConfigMap = new gcp.composer.UserWorkloadsConfigMap(\"example\", {\n environment: exampleEnvironment.name,\n name: \"example-config-map\",\n data: {\n db_host: \"dbhost:5432\",\n api_host: \"apihost:443\",\n },\n});\nconst example = exampleEnvironment.name.apply(name =\u003e gcp.composer.getUserWorkloadsConfigMapOutput({\n environment: name,\n name: googleComposerUserWorkloadsConfigMap.example.name,\n}));\nexport const debug = example;\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_environment = gcp.composer.Environment(\"example\",\n name=\"example-environment\",\n config={\n \"software_config\": {\n \"image_version\": \"composer-3-airflow-2\",\n },\n })\nexample_user_workloads_config_map = gcp.composer.UserWorkloadsConfigMap(\"example\",\n environment=example_environment.name,\n name=\"example-config-map\",\n data={\n \"db_host\": \"dbhost:5432\",\n \"api_host\": \"apihost:443\",\n })\nexample = example_environment.name.apply(lambda name: gcp.composer.get_user_workloads_config_map_output(environment=name,\n name=google_composer_user_workloads_config_map[\"example\"][\"name\"]))\npulumi.export(\"debug\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleEnvironment = new Gcp.Composer.Environment(\"example\", new()\n {\n Name = \"example-environment\",\n Config = new Gcp.Composer.Inputs.EnvironmentConfigArgs\n {\n SoftwareConfig = new Gcp.Composer.Inputs.EnvironmentConfigSoftwareConfigArgs\n {\n ImageVersion = \"composer-3-airflow-2\",\n },\n },\n });\n\n var exampleUserWorkloadsConfigMap = new Gcp.Composer.UserWorkloadsConfigMap(\"example\", new()\n {\n Environment = exampleEnvironment.Name,\n Name = \"example-config-map\",\n Data = \n {\n { \"db_host\", \"dbhost:5432\" },\n { \"api_host\", \"apihost:443\" },\n },\n });\n\n var example = Gcp.Composer.GetUserWorkloadsConfigMap.Invoke(new()\n {\n Environment = exampleEnvironment.Name,\n Name = googleComposerUserWorkloadsConfigMap.Example.Name,\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"debug\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/composer\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleEnvironment, err := composer.NewEnvironment(ctx, \"example\", \u0026composer.EnvironmentArgs{\n\t\t\tName: pulumi.String(\"example-environment\"),\n\t\t\tConfig: \u0026composer.EnvironmentConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026composer.EnvironmentConfigSoftwareConfigArgs{\n\t\t\t\t\tImageVersion: pulumi.String(\"composer-3-airflow-2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = composer.NewUserWorkloadsConfigMap(ctx, \"example\", \u0026composer.UserWorkloadsConfigMapArgs{\n\t\t\tEnvironment: exampleEnvironment.Name,\n\t\t\tName: pulumi.String(\"example-config-map\"),\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"db_host\": pulumi.String(\"dbhost:5432\"),\n\t\t\t\t\"api_host\": pulumi.String(\"apihost:443\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample := exampleEnvironment.Name.ApplyT(func(name string) (composer.GetUserWorkloadsConfigMapResult, error) {\n\t\t\treturn composer.GetUserWorkloadsConfigMapResult(interface{}(composer.LookupUserWorkloadsConfigMapOutput(ctx, composer.GetUserWorkloadsConfigMapOutputArgs{\n\t\t\t\tEnvironment: name,\n\t\t\t\tName: googleComposerUserWorkloadsConfigMap.Example.Name,\n\t\t\t}, nil))), nil\n\t\t}).(composer.GetUserWorkloadsConfigMapResultOutput)\n\t\tctx.Export(\"debug\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.composer.Environment;\nimport com.pulumi.gcp.composer.EnvironmentArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.composer.UserWorkloadsConfigMap;\nimport com.pulumi.gcp.composer.UserWorkloadsConfigMapArgs;\nimport com.pulumi.gcp.composer.ComposerFunctions;\nimport com.pulumi.gcp.composer.inputs.GetUserWorkloadsConfigMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleEnvironment = new Environment(\"exampleEnvironment\", EnvironmentArgs.builder()\n .name(\"example-environment\")\n .config(EnvironmentConfigArgs.builder()\n .softwareConfig(EnvironmentConfigSoftwareConfigArgs.builder()\n .imageVersion(\"composer-3-airflow-2\")\n .build())\n .build())\n .build());\n\n var exampleUserWorkloadsConfigMap = new UserWorkloadsConfigMap(\"exampleUserWorkloadsConfigMap\", UserWorkloadsConfigMapArgs.builder()\n .environment(exampleEnvironment.name())\n .name(\"example-config-map\")\n .data(Map.ofEntries(\n Map.entry(\"db_host\", \"dbhost:5432\"),\n Map.entry(\"api_host\", \"apihost:443\")\n ))\n .build());\n\n final var example = ComposerFunctions.getUserWorkloadsConfigMap(GetUserWorkloadsConfigMapArgs.builder()\n .environment(exampleEnvironment.name())\n .name(googleComposerUserWorkloadsConfigMap.example().name())\n .build());\n\n ctx.export(\"debug\", example.applyValue(getUserWorkloadsConfigMapResult -\u003e getUserWorkloadsConfigMapResult));\n }\n}\n```\n```yaml\nresources:\n exampleEnvironment:\n type: gcp:composer:Environment\n name: example\n properties:\n name: example-environment\n config:\n softwareConfig:\n imageVersion: composer-3-airflow-2\n exampleUserWorkloadsConfigMap:\n type: gcp:composer:UserWorkloadsConfigMap\n name: example\n properties:\n environment: ${exampleEnvironment.name}\n name: example-config-map\n data:\n db_host: dbhost:5432\n api_host: apihost:443\nvariables:\n example:\n fn::invoke:\n function: gcp:composer:getUserWorkloadsConfigMap\n arguments:\n environment: ${exampleEnvironment.name}\n name: ${googleComposerUserWorkloadsConfigMap.example.name}\noutputs:\n debug: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
+ "description": "Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleEnvironment = new gcp.composer.Environment(\"example\", {\n name: \"example-environment\",\n config: {\n softwareConfig: {\n imageVersion: \"composer-3-airflow-2\",\n },\n },\n});\nconst exampleUserWorkloadsConfigMap = new gcp.composer.UserWorkloadsConfigMap(\"example\", {\n environment: exampleEnvironment.name,\n name: \"example-config-map\",\n data: {\n db_host: \"dbhost:5432\",\n api_host: \"apihost:443\",\n },\n});\nconst example = exampleEnvironment.name.apply(name =\u003e gcp.composer.getUserWorkloadsConfigMapOutput({\n environment: name,\n name: googleComposerUserWorkloadsConfigMap.example.name,\n}));\nexport const debug = example;\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_environment = gcp.composer.Environment(\"example\",\n name=\"example-environment\",\n config={\n \"software_config\": {\n \"image_version\": \"composer-3-airflow-2\",\n },\n })\nexample_user_workloads_config_map = gcp.composer.UserWorkloadsConfigMap(\"example\",\n environment=example_environment.name,\n name=\"example-config-map\",\n data={\n \"db_host\": \"dbhost:5432\",\n \"api_host\": \"apihost:443\",\n })\nexample = example_environment.name.apply(lambda name: gcp.composer.get_user_workloads_config_map_output(environment=name,\n name=google_composer_user_workloads_config_map[\"example\"][\"name\"]))\npulumi.export(\"debug\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleEnvironment = new Gcp.Composer.Environment(\"example\", new()\n {\n Name = \"example-environment\",\n Config = new Gcp.Composer.Inputs.EnvironmentConfigArgs\n {\n SoftwareConfig = new Gcp.Composer.Inputs.EnvironmentConfigSoftwareConfigArgs\n {\n ImageVersion = \"composer-3-airflow-2\",\n },\n },\n });\n\n var exampleUserWorkloadsConfigMap = new Gcp.Composer.UserWorkloadsConfigMap(\"example\", new()\n {\n Environment = exampleEnvironment.Name,\n Name = \"example-config-map\",\n Data = \n {\n { \"db_host\", \"dbhost:5432\" },\n { \"api_host\", \"apihost:443\" },\n },\n });\n\n var example = Gcp.Composer.GetUserWorkloadsConfigMap.Invoke(new()\n {\n Environment = exampleEnvironment.Name,\n Name = googleComposerUserWorkloadsConfigMap.Example.Name,\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"debug\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/composer\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleEnvironment, err := composer.NewEnvironment(ctx, \"example\", \u0026composer.EnvironmentArgs{\n\t\t\tName: pulumi.String(\"example-environment\"),\n\t\t\tConfig: \u0026composer.EnvironmentConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026composer.EnvironmentConfigSoftwareConfigArgs{\n\t\t\t\t\tImageVersion: pulumi.String(\"composer-3-airflow-2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = composer.NewUserWorkloadsConfigMap(ctx, \"example\", \u0026composer.UserWorkloadsConfigMapArgs{\n\t\t\tEnvironment: exampleEnvironment.Name,\n\t\t\tName: pulumi.String(\"example-config-map\"),\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"db_host\": pulumi.String(\"dbhost:5432\"),\n\t\t\t\t\"api_host\": pulumi.String(\"apihost:443\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample := exampleEnvironment.Name.ApplyT(func(name string) (composer.GetUserWorkloadsConfigMapResult, error) {\n\t\t\treturn composer.GetUserWorkloadsConfigMapResult(interface{}(composer.LookupUserWorkloadsConfigMapOutput(ctx, composer.GetUserWorkloadsConfigMapOutputArgs{\n\t\t\t\tEnvironment: name,\n\t\t\t\tName: googleComposerUserWorkloadsConfigMap.Example.Name,\n\t\t\t}, nil))), nil\n\t\t}).(composer.GetUserWorkloadsConfigMapResultOutput)\n\t\tctx.Export(\"debug\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.composer.Environment;\nimport com.pulumi.gcp.composer.EnvironmentArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.composer.UserWorkloadsConfigMap;\nimport com.pulumi.gcp.composer.UserWorkloadsConfigMapArgs;\nimport com.pulumi.gcp.composer.ComposerFunctions;\nimport com.pulumi.gcp.composer.inputs.GetUserWorkloadsConfigMapArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleEnvironment = new Environment(\"exampleEnvironment\", EnvironmentArgs.builder()\n .name(\"example-environment\")\n .config(EnvironmentConfigArgs.builder()\n .softwareConfig(EnvironmentConfigSoftwareConfigArgs.builder()\n .imageVersion(\"composer-3-airflow-2\")\n .build())\n .build())\n .build());\n\n var exampleUserWorkloadsConfigMap = new UserWorkloadsConfigMap(\"exampleUserWorkloadsConfigMap\", UserWorkloadsConfigMapArgs.builder()\n .environment(exampleEnvironment.name())\n .name(\"example-config-map\")\n .data(Map.ofEntries(\n Map.entry(\"db_host\", \"dbhost:5432\"),\n Map.entry(\"api_host\", \"apihost:443\")\n ))\n .build());\n\n final var example = ComposerFunctions.getUserWorkloadsConfigMap(GetUserWorkloadsConfigMapArgs.builder()\n .environment(exampleEnvironment.name())\n .name(googleComposerUserWorkloadsConfigMap.example().name())\n .build());\n\n ctx.export(\"debug\", example.applyValue(getUserWorkloadsConfigMapResult -\u003e getUserWorkloadsConfigMapResult));\n }\n}\n```\n```yaml\nresources:\n exampleEnvironment:\n type: gcp:composer:Environment\n name: example\n properties:\n name: example-environment\n config:\n softwareConfig:\n imageVersion: composer-3-airflow-2\n exampleUserWorkloadsConfigMap:\n type: gcp:composer:UserWorkloadsConfigMap\n name: example\n properties:\n environment: ${exampleEnvironment.name}\n name: example-config-map\n data:\n db_host: dbhost:5432\n api_host: apihost:443\nvariables:\n example:\n fn::invoke:\n function: gcp:composer:getUserWorkloadsConfigMap\n arguments:\n environment: ${exampleEnvironment.name}\n name: ${googleComposerUserWorkloadsConfigMap.example.name}\noutputs:\n debug: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
"inputs": {
"description": "A collection of arguments for invoking getUserWorkloadsConfigMap.\n",
"properties": {
@@ -284711,7 +287852,7 @@
}
},
"gcp:composer/getUserWorkloadsSecret:getUserWorkloadsSecret": {
- "description": "## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst exampleEnvironment = new gcp.composer.Environment(\"example\", {\n name: \"example-environment\",\n config: {\n softwareConfig: {\n imageVersion: \"composer-3-airflow-2\",\n },\n },\n});\nconst exampleUserWorkloadsSecret = new gcp.composer.UserWorkloadsSecret(\"example\", {\n environment: exampleEnvironment.name,\n name: \"example-secret\",\n data: {\n username: std.base64encode({\n input: \"username\",\n }).then(invoke =\u003e invoke.result),\n password: std.base64encode({\n input: \"password\",\n }).then(invoke =\u003e invoke.result),\n },\n});\nconst example = exampleEnvironment.name.apply(name =\u003e gcp.composer.getUserWorkloadsSecretOutput({\n environment: name,\n name: googleComposerUserWorkloadsSecret.example.name,\n}));\nexport const debug = example;\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\nexample_environment = gcp.composer.Environment(\"example\",\n name=\"example-environment\",\n config={\n \"software_config\": {\n \"image_version\": \"composer-3-airflow-2\",\n },\n })\nexample_user_workloads_secret = gcp.composer.UserWorkloadsSecret(\"example\",\n environment=example_environment.name,\n name=\"example-secret\",\n data={\n \"username\": std.base64encode(input=\"username\").result,\n \"password\": std.base64encode(input=\"password\").result,\n })\nexample = example_environment.name.apply(lambda name: gcp.composer.get_user_workloads_secret_output(environment=name,\n name=google_composer_user_workloads_secret[\"example\"][\"name\"]))\npulumi.export(\"debug\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleEnvironment = new Gcp.Composer.Environment(\"example\", new()\n {\n Name = \"example-environment\",\n Config = new Gcp.Composer.Inputs.EnvironmentConfigArgs\n {\n SoftwareConfig = new Gcp.Composer.Inputs.EnvironmentConfigSoftwareConfigArgs\n {\n ImageVersion = \"composer-3-airflow-2\",\n },\n },\n });\n\n var exampleUserWorkloadsSecret = new Gcp.Composer.UserWorkloadsSecret(\"example\", new()\n {\n Environment = exampleEnvironment.Name,\n Name = \"example-secret\",\n Data = \n {\n { \"username\", Std.Base64encode.Invoke(new()\n {\n Input = \"username\",\n }).Apply(invoke =\u003e invoke.Result) },\n { \"password\", Std.Base64encode.Invoke(new()\n {\n Input = \"password\",\n }).Apply(invoke =\u003e invoke.Result) },\n },\n });\n\n var example = Gcp.Composer.GetUserWorkloadsSecret.Invoke(new()\n {\n Environment = exampleEnvironment.Name,\n Name = googleComposerUserWorkloadsSecret.Example.Name,\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"debug\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/composer\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleEnvironment, err := composer.NewEnvironment(ctx, \"example\", \u0026composer.EnvironmentArgs{\n\t\t\tName: pulumi.String(\"example-environment\"),\n\t\t\tConfig: \u0026composer.EnvironmentConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026composer.EnvironmentConfigSoftwareConfigArgs{\n\t\t\t\t\tImageVersion: pulumi.String(\"composer-3-airflow-2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeBase64encode, err := std.Base64encode(ctx, \u0026std.Base64encodeArgs{\n\t\t\tInput: \"username\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeBase64encode1, err := std.Base64encode(ctx, \u0026std.Base64encodeArgs{\n\t\t\tInput: \"password\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = composer.NewUserWorkloadsSecret(ctx, \"example\", \u0026composer.UserWorkloadsSecretArgs{\n\t\t\tEnvironment: exampleEnvironment.Name,\n\t\t\tName: pulumi.String(\"example-secret\"),\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"username\": pulumi.String(invokeBase64encode.Result),\n\t\t\t\t\"password\": pulumi.String(invokeBase64encode1.Result),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample := exampleEnvironment.Name.ApplyT(func(name string) (composer.GetUserWorkloadsSecretResult, error) {\n\t\t\treturn composer.GetUserWorkloadsSecretResult(interface{}(composer.LookupUserWorkloadsSecretOutput(ctx, composer.GetUserWorkloadsSecretOutputArgs{\n\t\t\t\tEnvironment: name,\n\t\t\t\tName: googleComposerUserWorkloadsSecret.Example.Name,\n\t\t\t}, nil))), nil\n\t\t}).(composer.GetUserWorkloadsSecretResultOutput)\n\t\tctx.Export(\"debug\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.composer.Environment;\nimport com.pulumi.gcp.composer.EnvironmentArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.composer.UserWorkloadsSecret;\nimport com.pulumi.gcp.composer.UserWorkloadsSecretArgs;\nimport com.pulumi.gcp.composer.ComposerFunctions;\nimport com.pulumi.gcp.composer.inputs.GetUserWorkloadsSecretArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleEnvironment = new Environment(\"exampleEnvironment\", EnvironmentArgs.builder()\n .name(\"example-environment\")\n .config(EnvironmentConfigArgs.builder()\n .softwareConfig(EnvironmentConfigSoftwareConfigArgs.builder()\n .imageVersion(\"composer-3-airflow-2\")\n .build())\n .build())\n .build());\n\n var exampleUserWorkloadsSecret = new UserWorkloadsSecret(\"exampleUserWorkloadsSecret\", UserWorkloadsSecretArgs.builder()\n .environment(exampleEnvironment.name())\n .name(\"example-secret\")\n .data(Map.ofEntries(\n Map.entry(\"username\", StdFunctions.base64encode(Base64encodeArgs.builder()\n .input(\"username\")\n .build()).result()),\n Map.entry(\"password\", StdFunctions.base64encode(Base64encodeArgs.builder()\n .input(\"password\")\n .build()).result())\n ))\n .build());\n\n final var example = ComposerFunctions.getUserWorkloadsSecret(GetUserWorkloadsSecretArgs.builder()\n .environment(exampleEnvironment.name())\n .name(googleComposerUserWorkloadsSecret.example().name())\n .build());\n\n ctx.export(\"debug\", example.applyValue(getUserWorkloadsSecretResult -\u003e getUserWorkloadsSecretResult));\n }\n}\n```\n```yaml\nresources:\n exampleEnvironment:\n type: gcp:composer:Environment\n name: example\n properties:\n name: example-environment\n config:\n softwareConfig:\n imageVersion: composer-3-airflow-2\n exampleUserWorkloadsSecret:\n type: gcp:composer:UserWorkloadsSecret\n name: example\n properties:\n environment: ${exampleEnvironment.name}\n name: example-secret\n data:\n username:\n fn::invoke:\n function: std:base64encode\n arguments:\n input: username\n return: result\n password:\n fn::invoke:\n function: std:base64encode\n arguments:\n input: password\n return: result\nvariables:\n example:\n fn::invoke:\n function: gcp:composer:getUserWorkloadsSecret\n arguments:\n environment: ${exampleEnvironment.name}\n name: ${googleComposerUserWorkloadsSecret.example.name}\noutputs:\n debug: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
+ "description": "Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst exampleEnvironment = new gcp.composer.Environment(\"example\", {\n name: \"example-environment\",\n config: {\n softwareConfig: {\n imageVersion: \"composer-3-airflow-2\",\n },\n },\n});\nconst exampleUserWorkloadsSecret = new gcp.composer.UserWorkloadsSecret(\"example\", {\n environment: exampleEnvironment.name,\n name: \"example-secret\",\n data: {\n username: std.base64encode({\n input: \"username\",\n }).then(invoke =\u003e invoke.result),\n password: std.base64encode({\n input: \"password\",\n }).then(invoke =\u003e invoke.result),\n },\n});\nconst example = exampleEnvironment.name.apply(name =\u003e gcp.composer.getUserWorkloadsSecretOutput({\n environment: name,\n name: googleComposerUserWorkloadsSecret.example.name,\n}));\nexport const debug = example;\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\nexample_environment = gcp.composer.Environment(\"example\",\n name=\"example-environment\",\n config={\n \"software_config\": {\n \"image_version\": \"composer-3-airflow-2\",\n },\n })\nexample_user_workloads_secret = gcp.composer.UserWorkloadsSecret(\"example\",\n environment=example_environment.name,\n name=\"example-secret\",\n data={\n \"username\": std.base64encode(input=\"username\").result,\n \"password\": std.base64encode(input=\"password\").result,\n })\nexample = example_environment.name.apply(lambda name: gcp.composer.get_user_workloads_secret_output(environment=name,\n name=google_composer_user_workloads_secret[\"example\"][\"name\"]))\npulumi.export(\"debug\", example)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleEnvironment = new Gcp.Composer.Environment(\"example\", new()\n {\n Name = \"example-environment\",\n Config = new Gcp.Composer.Inputs.EnvironmentConfigArgs\n {\n SoftwareConfig = new Gcp.Composer.Inputs.EnvironmentConfigSoftwareConfigArgs\n {\n ImageVersion = \"composer-3-airflow-2\",\n },\n },\n });\n\n var exampleUserWorkloadsSecret = new Gcp.Composer.UserWorkloadsSecret(\"example\", new()\n {\n Environment = exampleEnvironment.Name,\n Name = \"example-secret\",\n Data = \n {\n { \"username\", Std.Base64encode.Invoke(new()\n {\n Input = \"username\",\n }).Apply(invoke =\u003e invoke.Result) },\n { \"password\", Std.Base64encode.Invoke(new()\n {\n Input = \"password\",\n }).Apply(invoke =\u003e invoke.Result) },\n },\n });\n\n var example = Gcp.Composer.GetUserWorkloadsSecret.Invoke(new()\n {\n Environment = exampleEnvironment.Name,\n Name = googleComposerUserWorkloadsSecret.Example.Name,\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"debug\"] = example,\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/composer\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleEnvironment, err := composer.NewEnvironment(ctx, \"example\", \u0026composer.EnvironmentArgs{\n\t\t\tName: pulumi.String(\"example-environment\"),\n\t\t\tConfig: \u0026composer.EnvironmentConfigArgs{\n\t\t\t\tSoftwareConfig: \u0026composer.EnvironmentConfigSoftwareConfigArgs{\n\t\t\t\t\tImageVersion: pulumi.String(\"composer-3-airflow-2\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeBase64encode, err := std.Base64encode(ctx, \u0026std.Base64encodeArgs{\n\t\t\tInput: \"username\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeBase64encode1, err := std.Base64encode(ctx, \u0026std.Base64encodeArgs{\n\t\t\tInput: \"password\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = composer.NewUserWorkloadsSecret(ctx, \"example\", \u0026composer.UserWorkloadsSecretArgs{\n\t\t\tEnvironment: exampleEnvironment.Name,\n\t\t\tName: pulumi.String(\"example-secret\"),\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"username\": pulumi.String(invokeBase64encode.Result),\n\t\t\t\t\"password\": pulumi.String(invokeBase64encode1.Result),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texample := exampleEnvironment.Name.ApplyT(func(name string) (composer.GetUserWorkloadsSecretResult, error) {\n\t\t\treturn composer.GetUserWorkloadsSecretResult(interface{}(composer.LookupUserWorkloadsSecretOutput(ctx, composer.GetUserWorkloadsSecretOutputArgs{\n\t\t\t\tEnvironment: name,\n\t\t\t\tName: googleComposerUserWorkloadsSecret.Example.Name,\n\t\t\t}, nil))), nil\n\t\t}).(composer.GetUserWorkloadsSecretResultOutput)\n\t\tctx.Export(\"debug\", example)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.composer.Environment;\nimport com.pulumi.gcp.composer.EnvironmentArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigArgs;\nimport com.pulumi.gcp.composer.inputs.EnvironmentConfigSoftwareConfigArgs;\nimport com.pulumi.gcp.composer.UserWorkloadsSecret;\nimport com.pulumi.gcp.composer.UserWorkloadsSecretArgs;\nimport com.pulumi.gcp.composer.ComposerFunctions;\nimport com.pulumi.gcp.composer.inputs.GetUserWorkloadsSecretArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var exampleEnvironment = new Environment(\"exampleEnvironment\", EnvironmentArgs.builder()\n .name(\"example-environment\")\n .config(EnvironmentConfigArgs.builder()\n .softwareConfig(EnvironmentConfigSoftwareConfigArgs.builder()\n .imageVersion(\"composer-3-airflow-2\")\n .build())\n .build())\n .build());\n\n var exampleUserWorkloadsSecret = new UserWorkloadsSecret(\"exampleUserWorkloadsSecret\", UserWorkloadsSecretArgs.builder()\n .environment(exampleEnvironment.name())\n .name(\"example-secret\")\n .data(Map.ofEntries(\n Map.entry(\"username\", StdFunctions.base64encode(Base64encodeArgs.builder()\n .input(\"username\")\n .build()).result()),\n Map.entry(\"password\", StdFunctions.base64encode(Base64encodeArgs.builder()\n .input(\"password\")\n .build()).result())\n ))\n .build());\n\n final var example = ComposerFunctions.getUserWorkloadsSecret(GetUserWorkloadsSecretArgs.builder()\n .environment(exampleEnvironment.name())\n .name(googleComposerUserWorkloadsSecret.example().name())\n .build());\n\n ctx.export(\"debug\", example.applyValue(getUserWorkloadsSecretResult -\u003e getUserWorkloadsSecretResult));\n }\n}\n```\n```yaml\nresources:\n exampleEnvironment:\n type: gcp:composer:Environment\n name: example\n properties:\n name: example-environment\n config:\n softwareConfig:\n imageVersion: composer-3-airflow-2\n exampleUserWorkloadsSecret:\n type: gcp:composer:UserWorkloadsSecret\n name: example\n properties:\n environment: ${exampleEnvironment.name}\n name: example-secret\n data:\n username:\n fn::invoke:\n function: std:base64encode\n arguments:\n input: username\n return: result\n password:\n fn::invoke:\n function: std:base64encode\n arguments:\n input: password\n return: result\nvariables:\n example:\n fn::invoke:\n function: gcp:composer:getUserWorkloadsSecret\n arguments:\n environment: ${exampleEnvironment.name}\n name: ${googleComposerUserWorkloadsSecret.example.name}\noutputs:\n debug: ${example}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
"inputs": {
"description": "A collection of arguments for invoking getUserWorkloadsSecret.\n",
"properties": {
@@ -285954,7 +289095,7 @@
},
"region": {
"type": "string",
- "description": "The region you want to get the forwarding rules from.\n\nThese arguments must be set in either the provider or the resouce in order for the information to be queried.\n"
+ "description": "The region you want to get the forwarding rules from.\n\nThese arguments must be set in either the provider or the resource in order for the information to be queried.\n"
}
},
"type": "object"
@@ -286111,6 +289252,9 @@
"secret": true,
"type": "object"
},
+ "forwardingRuleId": {
+ "type": "integer"
+ },
"id": {
"description": "The provider-assigned unique ID for this managed resource.\n",
"type": "string"
@@ -286197,6 +289341,7 @@
"baseForwardingRule",
"description",
"effectiveLabels",
+ "forwardingRuleId",
"ipAddress",
"ipProtocol",
"ipVersion",
@@ -287057,6 +290202,9 @@
"instanceGroup": {
"type": "string"
},
+ "instanceGroupManagerId": {
+ "type": "integer"
+ },
"instanceLifecyclePolicies": {
"items": {
"$ref": "#/types/gcp:compute/getInstanceGroupManagerInstanceLifecyclePolicy:getInstanceGroupManagerInstanceLifecyclePolicy"
@@ -287165,6 +290313,7 @@
"description",
"fingerprint",
"instanceGroup",
+ "instanceGroupManagerId",
"instanceLifecyclePolicies",
"listManagedInstancesResults",
"namedPorts",
@@ -287865,6 +291014,10 @@
"type": "string",
"description": "The name of the network.\n\n\n- - -\n"
},
+ "networkProfile": {
+ "type": "string",
+ "description": "Beta A full or partial URL of the network profile to apply to this network.\n"
+ },
"project": {
"type": "string",
"description": "The ID of the project in which the resource belongs. If it\nis not provided, the provider project is used.\n"
@@ -287897,6 +291050,14 @@
"name": {
"type": "string"
},
+ "networkProfile": {
+ "description": "Beta A full or partial URL of the network profile to apply to this network.\n",
+ "type": "string"
+ },
+ "numericId": {
+ "description": "The numeric unique identifier for the resource.\n",
+ "type": "string"
+ },
"project": {
"type": "string"
},
@@ -287917,6 +291078,7 @@
"gatewayIpv4",
"internalIpv6Range",
"name",
+ "numericId",
"selfLink",
"subnetworksSelfLinks",
"id"
@@ -288609,6 +291771,9 @@
"instanceGroup": {
"type": "string"
},
+ "instanceGroupManagerId": {
+ "type": "integer"
+ },
"instanceLifecyclePolicies": {
"items": {
"$ref": "#/types/gcp:compute/getRegionInstanceGroupManagerInstanceLifecyclePolicy:getRegionInstanceGroupManagerInstanceLifecyclePolicy"
@@ -288717,6 +291882,7 @@
"fingerprint",
"instanceFlexibilityPolicies",
"instanceGroup",
+ "instanceGroupManagerId",
"instanceLifecyclePolicies",
"listManagedInstancesResults",
"namedPorts",
@@ -289069,6 +292235,12 @@
"project": {
"type": "string"
},
+ "pscDatas": {
+ "items": {
+ "$ref": "#/types/gcp:compute/getRegionNetworkEndpointGroupPscData:getRegionNetworkEndpointGroupPscData"
+ },
+ "type": "array"
+ },
"pscTargetService": {
"description": "The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment.\n",
"type": "string"
@@ -289097,6 +292269,7 @@
"description",
"network",
"networkEndpointType",
+ "pscDatas",
"pscTargetService",
"serverlessDeployments",
"subnetwork",
@@ -290834,6 +294007,12 @@
"endpoint": {
"type": "string"
},
+ "enterpriseConfigs": {
+ "items": {
+ "$ref": "#/types/gcp:container/getClusterEnterpriseConfig:getClusterEnterpriseConfig"
+ },
+ "type": "array"
+ },
"fleets": {
"items": {
"$ref": "#/types/gcp:container/getClusterFleet:getClusterFleet"
@@ -291120,6 +294299,7 @@
"enableShieldedNodes",
"enableTpu",
"endpoint",
+ "enterpriseConfigs",
"fleets",
"gatewayApiConfigs",
"identityServiceConfigs",
@@ -293923,6 +297103,75 @@
"type": "object"
}
},
+ "gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy": {
+ "inputs": {
+ "description": "A collection of arguments for invoking getRepositoryGroupIamPolicy.\n",
+ "properties": {
+ "codeRepositoryIndex": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "location": {
+ "type": "string",
+ "description": "The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,\nthe value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no\nlocation is specified, it is taken from the provider configuration.\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.\n",
+ "willReplaceOnChanges": true
+ },
+ "repositoryGroupId": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "codeRepositoryIndex",
+ "repositoryGroupId"
+ ]
+ },
+ "outputs": {
+ "description": "A collection of values returned by getRepositoryGroupIamPolicy.\n",
+ "properties": {
+ "codeRepositoryIndex": {
+ "type": "string"
+ },
+ "etag": {
+ "description": "(Computed) The etag of the IAM policy.\n",
+ "type": "string"
+ },
+ "id": {
+ "description": "The provider-assigned unique ID for this managed resource.\n",
+ "type": "string"
+ },
+ "location": {
+ "type": "string"
+ },
+ "policyData": {
+ "description": "(Required only by `gcp.gemini.RepositoryGroupIamPolicy`) The policy data generated by\na `gcp.organizations.getIAMPolicy` data source.\n",
+ "type": "string"
+ },
+ "project": {
+ "type": "string"
+ },
+ "repositoryGroupId": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "codeRepositoryIndex",
+ "etag",
+ "location",
+ "policyData",
+ "project",
+ "repositoryGroupId",
+ "id"
+ ],
+ "type": "object"
+ }
+ },
"gcp:gkebackup/getBackupPlanIamPolicy:getBackupPlanIamPolicy": {
"description": "Retrieves the current IAM policy data for backupplan\n\n\n## example\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst policy = gcp.gkebackup.getBackupPlanIamPolicy({\n project: basic.project,\n location: basic.location,\n name: basic.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npolicy = gcp.gkebackup.get_backup_plan_iam_policy(project=basic[\"project\"],\n location=basic[\"location\"],\n name=basic[\"name\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var policy = Gcp.GkeBackup.GetBackupPlanIamPolicy.Invoke(new()\n {\n Project = basic.Project,\n Location = basic.Location,\n Name = basic.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gkebackup\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gkebackup.LookupBackupPlanIamPolicy(ctx, \u0026gkebackup.LookupBackupPlanIamPolicyArgs{\n\t\t\tProject: pulumi.StringRef(basic.Project),\n\t\t\tLocation: pulumi.StringRef(basic.Location),\n\t\t\tName: basic.Name,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gkebackup.GkebackupFunctions;\nimport com.pulumi.gcp.gkebackup.inputs.GetBackupPlanIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var policy = GkebackupFunctions.getBackupPlanIamPolicy(GetBackupPlanIamPolicyArgs.builder()\n .project(basic.project())\n .location(basic.location())\n .name(basic.name())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n policy:\n fn::invoke:\n function: gcp:gkebackup:getBackupPlanIamPolicy\n arguments:\n project: ${basic.project}\n location: ${basic.location}\n name: ${basic.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
"inputs": {
@@ -297372,6 +300621,9 @@
"database": {
"type": "string"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string"
},
@@ -297427,6 +300679,7 @@
"cidr",
"createTime",
"database",
+ "deletionProtection",
"displayName",
"effectiveLabels",
"entitlementId",
@@ -297521,6 +300774,9 @@
"createTime": {
"type": "string"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string"
},
@@ -297573,6 +300829,7 @@
"required": [
"cloudExadataInfrastructureId",
"createTime",
+ "deletionProtection",
"displayName",
"effectiveLabels",
"entitlementId",
@@ -297673,6 +300930,9 @@
"createTime": {
"type": "string"
},
+ "deletionProtection": {
+ "type": "boolean"
+ },
"displayName": {
"type": "string"
},
@@ -297730,6 +300990,7 @@
"cidr",
"cloudVmClusterId",
"createTime",
+ "deletionProtection",
"displayName",
"effectiveLabels",
"exadataInfrastructure",
@@ -300645,7 +303906,7 @@
}
},
"gcp:serviceaccount/getAccountIdToken:getAccountIdToken": {
- "description": "This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)).\n\nFor more information see\n[OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken).\n\n## Example Usage\n\n### ServiceAccount JSON Credential File.\n `gcp.serviceaccount.getAccountIdToken` will use the configured provider credentials\n\n \u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst oidc = gcp.serviceaccount.getAccountIdToken({\n targetAudience: \"https://foo.bar/\",\n});\nexport const oidcToken = oidc.then(oidc =\u003e oidc.idToken);\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\noidc = gcp.serviceaccount.get_account_id_token(target_audience=\"https://foo.bar/\")\npulumi.export(\"oidcToken\", oidc.id_token)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var oidc = Gcp.ServiceAccount.GetAccountIdToken.Invoke(new()\n {\n TargetAudience = \"https://foo.bar/\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"oidcToken\"] = oidc.Apply(getAccountIdTokenResult =\u003e getAccountIdTokenResult.IdToken),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\toidc, err := serviceaccount.GetAccountIdToken(ctx, \u0026serviceaccount.GetAccountIdTokenArgs{\n\t\t\tTargetAudience: \"https://foo.bar/\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"oidcToken\", oidc.IdToken)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceaccount.ServiceaccountFunctions;\nimport com.pulumi.gcp.serviceaccount.inputs.GetAccountIdTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var oidc = ServiceaccountFunctions.getAccountIdToken(GetAccountIdTokenArgs.builder()\n .targetAudience(\"https://foo.bar/\")\n .build());\n\n ctx.export(\"oidcToken\", oidc.applyValue(getAccountIdTokenResult -\u003e getAccountIdTokenResult.idToken()));\n }\n}\n```\n```yaml\nvariables:\n oidc:\n fn::invoke:\n function: gcp:serviceaccount:getAccountIdToken\n arguments:\n targetAudience: https://foo.bar/\noutputs:\n oidcToken: ${oidc.idToken}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Service Account Impersonation.\n `gcp.serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`.\n\n Note: to use the following, you must grant `target_service_account` the\n `roles/iam.serviceAccountTokenCreator` role on itself.\n\n \u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst impersonated = gcp.serviceaccount.getAccountAccessToken({\n targetServiceAccount: \"impersonated-account@project.iam.gserviceaccount.com\",\n delegates: [],\n scopes: [\n \"userinfo-email\",\n \"cloud-platform\",\n ],\n lifetime: \"300s\",\n});\nconst oidc = gcp.serviceaccount.getAccountIdToken({\n targetServiceAccount: \"impersonated-account@project.iam.gserviceaccount.com\",\n delegates: [],\n includeEmail: true,\n targetAudience: \"https://foo.bar/\",\n});\nexport const oidcToken = oidc.then(oidc =\u003e oidc.idToken);\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nimpersonated = gcp.serviceaccount.get_account_access_token(target_service_account=\"impersonated-account@project.iam.gserviceaccount.com\",\n delegates=[],\n scopes=[\n \"userinfo-email\",\n \"cloud-platform\",\n ],\n lifetime=\"300s\")\noidc = gcp.serviceaccount.get_account_id_token(target_service_account=\"impersonated-account@project.iam.gserviceaccount.com\",\n delegates=[],\n include_email=True,\n target_audience=\"https://foo.bar/\")\npulumi.export(\"oidcToken\", oidc.id_token)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var impersonated = Gcp.ServiceAccount.GetAccountAccessToken.Invoke(new()\n {\n TargetServiceAccount = \"impersonated-account@project.iam.gserviceaccount.com\",\n Delegates = new() { },\n Scopes = new[]\n {\n \"userinfo-email\",\n \"cloud-platform\",\n },\n Lifetime = \"300s\",\n });\n\n var oidc = Gcp.ServiceAccount.GetAccountIdToken.Invoke(new()\n {\n TargetServiceAccount = \"impersonated-account@project.iam.gserviceaccount.com\",\n Delegates = new() { },\n IncludeEmail = true,\n TargetAudience = \"https://foo.bar/\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"oidcToken\"] = oidc.Apply(getAccountIdTokenResult =\u003e getAccountIdTokenResult.IdToken),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := serviceaccount.GetAccountAccessToken(ctx, \u0026serviceaccount.GetAccountAccessTokenArgs{\n\t\t\tTargetServiceAccount: \"impersonated-account@project.iam.gserviceaccount.com\",\n\t\t\tDelegates: []interface{}{},\n\t\t\tScopes: []string{\n\t\t\t\t\"userinfo-email\",\n\t\t\t\t\"cloud-platform\",\n\t\t\t},\n\t\t\tLifetime: pulumi.StringRef(\"300s\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toidc, err := serviceaccount.GetAccountIdToken(ctx, \u0026serviceaccount.GetAccountIdTokenArgs{\n\t\t\tTargetServiceAccount: pulumi.StringRef(\"impersonated-account@project.iam.gserviceaccount.com\"),\n\t\t\tDelegates: []interface{}{},\n\t\t\tIncludeEmail: pulumi.BoolRef(true),\n\t\t\tTargetAudience: \"https://foo.bar/\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"oidcToken\", oidc.IdToken)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceaccount.ServiceaccountFunctions;\nimport com.pulumi.gcp.serviceaccount.inputs.GetAccountAccessTokenArgs;\nimport com.pulumi.gcp.serviceaccount.inputs.GetAccountIdTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var impersonated = ServiceaccountFunctions.getAccountAccessToken(GetAccountAccessTokenArgs.builder()\n .targetServiceAccount(\"impersonated-account@project.iam.gserviceaccount.com\")\n .delegates()\n .scopes( \n \"userinfo-email\",\n \"cloud-platform\")\n .lifetime(\"300s\")\n .build());\n\n final var oidc = ServiceaccountFunctions.getAccountIdToken(GetAccountIdTokenArgs.builder()\n .targetServiceAccount(\"impersonated-account@project.iam.gserviceaccount.com\")\n .delegates()\n .includeEmail(true)\n .targetAudience(\"https://foo.bar/\")\n .build());\n\n ctx.export(\"oidcToken\", oidc.applyValue(getAccountIdTokenResult -\u003e getAccountIdTokenResult.idToken()));\n }\n}\n```\n```yaml\nvariables:\n impersonated:\n fn::invoke:\n function: gcp:serviceaccount:getAccountAccessToken\n arguments:\n targetServiceAccount: impersonated-account@project.iam.gserviceaccount.com\n delegates: []\n scopes:\n - userinfo-email\n - cloud-platform\n lifetime: 300s\n oidc:\n fn::invoke:\n function: gcp:serviceaccount:getAccountIdToken\n arguments:\n targetServiceAccount: impersonated-account@project.iam.gserviceaccount.com\n delegates: []\n includeEmail: true\n targetAudience: https://foo.bar/\noutputs:\n oidcToken: ${oidc.idToken}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Invoking Cloud Run Endpoint\n\n The following configuration will invoke [Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service) endpoint where the service account for the provider has been granted `roles/run.invoker` role previously.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as http from \"@pulumi/http\";\n\nconst oidc = gcp.serviceaccount.getAccountIdToken({\n targetAudience: \"https://your.cloud.run.app/\",\n});\nconst cloudrun = oidc.then(oidc =\u003e http.getHttp({\n url: \"https://your.cloud.run.app/\",\n requestHeaders: {\n Authorization: `Bearer ${oidc.idToken}`,\n },\n}));\nexport const cloudRunResponse = cloudrun.then(cloudrun =\u003e cloudrun.body);\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_http as http\n\noidc = gcp.serviceaccount.get_account_id_token(target_audience=\"https://your.cloud.run.app/\")\ncloudrun = http.get_http(url=\"https://your.cloud.run.app/\",\n request_headers={\n \"Authorization\": f\"Bearer {oidc.id_token}\",\n })\npulumi.export(\"cloudRunResponse\", cloudrun.body)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Http = Pulumi.Http;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var oidc = Gcp.ServiceAccount.GetAccountIdToken.Invoke(new()\n {\n TargetAudience = \"https://your.cloud.run.app/\",\n });\n\n var cloudrun = Http.GetHttp.Invoke(new()\n {\n Url = \"https://your.cloud.run.app/\",\n RequestHeaders = \n {\n { \"Authorization\", $\"Bearer {oidc.Apply(getAccountIdTokenResult =\u003e getAccountIdTokenResult.IdToken)}\" },\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"cloudRunResponse\"] = cloudrun.Apply(getHttpResult =\u003e getHttpResult.Body),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-http/sdk/go/http\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\toidc, err := serviceaccount.GetAccountIdToken(ctx, \u0026serviceaccount.GetAccountIdTokenArgs{\n\t\t\tTargetAudience: \"https://your.cloud.run.app/\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudrun, err := http.GetHttp(ctx, \u0026http.GetHttpArgs{\n\t\t\tUrl: \"https://your.cloud.run.app/\",\n\t\t\tRequestHeaders: map[string]interface{}{\n\t\t\t\t\"Authorization\": fmt.Sprintf(\"Bearer %v\", oidc.IdToken),\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"cloudRunResponse\", cloudrun.Body)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceaccount.ServiceaccountFunctions;\nimport com.pulumi.gcp.serviceaccount.inputs.GetAccountIdTokenArgs;\nimport com.pulumi.http.HttpFunctions;\nimport com.pulumi.http.inputs.GetHttpArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var oidc = ServiceaccountFunctions.getAccountIdToken(GetAccountIdTokenArgs.builder()\n .targetAudience(\"https://your.cloud.run.app/\")\n .build());\n\n final var cloudrun = HttpFunctions.getHttp(GetHttpArgs.builder()\n .url(\"https://your.cloud.run.app/\")\n .requestHeaders(Map.of(\"Authorization\", String.format(\"Bearer %s\", oidc.applyValue(getAccountIdTokenResult -\u003e getAccountIdTokenResult.idToken()))))\n .build());\n\n ctx.export(\"cloudRunResponse\", cloudrun.applyValue(getHttpResult -\u003e getHttpResult.body()));\n }\n}\n```\n```yaml\nvariables:\n oidc:\n fn::invoke:\n function: gcp:serviceaccount:getAccountIdToken\n arguments:\n targetAudience: https://your.cloud.run.app/\n cloudrun:\n fn::invoke:\n function: http:getHttp\n arguments:\n url: https://your.cloud.run.app/\n requestHeaders:\n Authorization: Bearer ${oidc.idToken}\noutputs:\n cloudRunResponse: ${cloudrun.body}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
+ "description": "This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)).\n\nFor more information see\n[OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken).\n\n## Example Usage\n\n### ServiceAccount JSON Credential File.\n `gcp.serviceaccount.getAccountIdToken` will use the configured provider credentials\n\n \u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst oidc = gcp.serviceaccount.getAccountIdToken({\n targetAudience: \"https://foo.bar/\",\n});\nexport const oidcToken = oidc.then(oidc =\u003e oidc.idToken);\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\noidc = gcp.serviceaccount.get_account_id_token(target_audience=\"https://foo.bar/\")\npulumi.export(\"oidcToken\", oidc.id_token)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var oidc = Gcp.ServiceAccount.GetAccountIdToken.Invoke(new()\n {\n TargetAudience = \"https://foo.bar/\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"oidcToken\"] = oidc.Apply(getAccountIdTokenResult =\u003e getAccountIdTokenResult.IdToken),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\toidc, err := serviceaccount.GetAccountIdToken(ctx, \u0026serviceaccount.GetAccountIdTokenArgs{\n\t\t\tTargetAudience: \"https://foo.bar/\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"oidcToken\", oidc.IdToken)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceaccount.ServiceaccountFunctions;\nimport com.pulumi.gcp.serviceaccount.inputs.GetAccountIdTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var oidc = ServiceaccountFunctions.getAccountIdToken(GetAccountIdTokenArgs.builder()\n .targetAudience(\"https://foo.bar/\")\n .build());\n\n ctx.export(\"oidcToken\", oidc.applyValue(getAccountIdTokenResult -\u003e getAccountIdTokenResult.idToken()));\n }\n}\n```\n```yaml\nvariables:\n oidc:\n fn::invoke:\n function: gcp:serviceaccount:getAccountIdToken\n arguments:\n targetAudience: https://foo.bar/\noutputs:\n oidcToken: ${oidc.idToken}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Service Account Impersonation.\n `gcp.serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`.\n\n Note: to use the following, you must grant `target_service_account` the\n `roles/iam.serviceAccountTokenCreator` role on itself.\n\n \u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst impersonated = gcp.serviceaccount.getAccountAccessToken({\n targetServiceAccount: \"impersonated-account@project.iam.gserviceaccount.com\",\n delegates: [],\n scopes: [\n \"userinfo-email\",\n \"cloud-platform\",\n ],\n lifetime: \"300s\",\n});\nconst oidc = gcp.serviceaccount.getAccountIdToken({\n targetServiceAccount: \"impersonated-account@project.iam.gserviceaccount.com\",\n delegates: [],\n includeEmail: true,\n targetAudience: \"https://foo.bar/\",\n});\nexport const oidcToken = oidc.then(oidc =\u003e oidc.idToken);\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nimpersonated = gcp.serviceaccount.get_account_access_token(target_service_account=\"impersonated-account@project.iam.gserviceaccount.com\",\n delegates=[],\n scopes=[\n \"userinfo-email\",\n \"cloud-platform\",\n ],\n lifetime=\"300s\")\noidc = gcp.serviceaccount.get_account_id_token(target_service_account=\"impersonated-account@project.iam.gserviceaccount.com\",\n delegates=[],\n include_email=True,\n target_audience=\"https://foo.bar/\")\npulumi.export(\"oidcToken\", oidc.id_token)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var impersonated = Gcp.ServiceAccount.GetAccountAccessToken.Invoke(new()\n {\n TargetServiceAccount = \"impersonated-account@project.iam.gserviceaccount.com\",\n Delegates = new() { },\n Scopes = new[]\n {\n \"userinfo-email\",\n \"cloud-platform\",\n },\n Lifetime = \"300s\",\n });\n\n var oidc = Gcp.ServiceAccount.GetAccountIdToken.Invoke(new()\n {\n TargetServiceAccount = \"impersonated-account@project.iam.gserviceaccount.com\",\n Delegates = new() { },\n IncludeEmail = true,\n TargetAudience = \"https://foo.bar/\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"oidcToken\"] = oidc.Apply(getAccountIdTokenResult =\u003e getAccountIdTokenResult.IdToken),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := serviceaccount.GetAccountAccessToken(ctx, \u0026serviceaccount.GetAccountAccessTokenArgs{\n\t\t\tTargetServiceAccount: \"impersonated-account@project.iam.gserviceaccount.com\",\n\t\t\tDelegates: []interface{}{},\n\t\t\tScopes: []string{\n\t\t\t\t\"userinfo-email\",\n\t\t\t\t\"cloud-platform\",\n\t\t\t},\n\t\t\tLifetime: pulumi.StringRef(\"300s\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toidc, err := serviceaccount.GetAccountIdToken(ctx, \u0026serviceaccount.GetAccountIdTokenArgs{\n\t\t\tTargetServiceAccount: pulumi.StringRef(\"impersonated-account@project.iam.gserviceaccount.com\"),\n\t\t\tDelegates: []interface{}{},\n\t\t\tIncludeEmail: pulumi.BoolRef(true),\n\t\t\tTargetAudience: \"https://foo.bar/\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"oidcToken\", oidc.IdToken)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceaccount.ServiceaccountFunctions;\nimport com.pulumi.gcp.serviceaccount.inputs.GetAccountAccessTokenArgs;\nimport com.pulumi.gcp.serviceaccount.inputs.GetAccountIdTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var impersonated = ServiceaccountFunctions.getAccountAccessToken(GetAccountAccessTokenArgs.builder()\n .targetServiceAccount(\"impersonated-account@project.iam.gserviceaccount.com\")\n .delegates()\n .scopes( \n \"userinfo-email\",\n \"cloud-platform\")\n .lifetime(\"300s\")\n .build());\n\n final var oidc = ServiceaccountFunctions.getAccountIdToken(GetAccountIdTokenArgs.builder()\n .targetServiceAccount(\"impersonated-account@project.iam.gserviceaccount.com\")\n .delegates()\n .includeEmail(true)\n .targetAudience(\"https://foo.bar/\")\n .build());\n\n ctx.export(\"oidcToken\", oidc.applyValue(getAccountIdTokenResult -\u003e getAccountIdTokenResult.idToken()));\n }\n}\n```\n```yaml\nvariables:\n impersonated:\n fn::invoke:\n function: gcp:serviceaccount:getAccountAccessToken\n arguments:\n targetServiceAccount: impersonated-account@project.iam.gserviceaccount.com\n delegates: []\n scopes:\n - userinfo-email\n - cloud-platform\n lifetime: 300s\n oidc:\n fn::invoke:\n function: gcp:serviceaccount:getAccountIdToken\n arguments:\n targetServiceAccount: impersonated-account@project.iam.gserviceaccount.com\n delegates: []\n includeEmail: true\n targetAudience: https://foo.bar/\noutputs:\n oidcToken: ${oidc.idToken}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Invoking Cloud Run Endpoint\n\n The following configuration will invoke [Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service) endpoint where the service account for the provider has been granted `roles/run.invoker` role previously.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as http from \"@pulumi/http\";\n\nconst oidc = gcp.serviceaccount.getAccountIdToken({\n targetAudience: \"https://your.cloud.run.app/\",\n});\nconst cloudrun = oidc.then(oidc =\u003e http.getHttp({\n url: \"https://your.cloud.run.app/\",\n requestHeaders: {\n Authorization: `Bearer ${oidc.idToken}`,\n },\n}));\nexport const cloudRunResponse = cloudrun.then(cloudrun =\u003e cloudrun.body);\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_http as http\n\noidc = gcp.serviceaccount.get_account_id_token(target_audience=\"https://your.cloud.run.app/\")\ncloudrun = http.get_http(url=\"https://your.cloud.run.app/\",\n request_headers={\n \"Authorization\": f\"Bearer {oidc.id_token}\",\n })\npulumi.export(\"cloudRunResponse\", cloudrun.body)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Http = Pulumi.Http;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var oidc = Gcp.ServiceAccount.GetAccountIdToken.Invoke(new()\n {\n TargetAudience = \"https://your.cloud.run.app/\",\n });\n\n var cloudrun = Http.GetHttp.Invoke(new()\n {\n Url = \"https://your.cloud.run.app/\",\n RequestHeaders = \n {\n { \"Authorization\", $\"Bearer {oidc.Apply(getAccountIdTokenResult =\u003e getAccountIdTokenResult.IdToken)}\" },\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"cloudRunResponse\"] = cloudrun.Apply(getHttpResult =\u003e getHttpResult.Body),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-http/sdk/go/http\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\toidc, err := serviceaccount.GetAccountIdToken(ctx, \u0026serviceaccount.GetAccountIdTokenArgs{\n\t\t\tTargetAudience: \"https://your.cloud.run.app/\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudrun, err := http.GetHttp(ctx, \u0026http.GetHttpArgs{\n\t\t\tUrl: \"https://your.cloud.run.app/\",\n\t\t\tRequestHeaders: map[string]interface{}{\n\t\t\t\t\"Authorization\": fmt.Sprintf(\"Bearer %v\", oidc.IdToken),\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"cloudRunResponse\", cloudrun.Body)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceaccount.ServiceaccountFunctions;\nimport com.pulumi.gcp.serviceaccount.inputs.GetAccountIdTokenArgs;\nimport com.pulumi.http.HttpFunctions;\nimport com.pulumi.http.inputs.GetHttpArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var oidc = ServiceaccountFunctions.getAccountIdToken(GetAccountIdTokenArgs.builder()\n .targetAudience(\"https://your.cloud.run.app/\")\n .build());\n\n final var cloudrun = HttpFunctions.getHttp(GetHttpArgs.builder()\n .url(\"https://your.cloud.run.app/\")\n .requestHeaders(Map.of(\"Authorization\", String.format(\"Bearer %s\", oidc.applyValue(getAccountIdTokenResult -\u003e getAccountIdTokenResult.idToken()))))\n .build());\n\n ctx.export(\"cloudRunResponse\", cloudrun.applyValue(getHttpResult -\u003e getHttpResult.body()));\n }\n}\n```\n```yaml\nvariables:\n oidc:\n fn::invoke:\n function: gcp:serviceaccount:getAccountIdToken\n arguments:\n targetAudience: https://your.cloud.run.app/\n cloudrun:\n fn::invoke:\n function: http:getHttp\n arguments:\n url: https://your.cloud.run.app/\n requestHeaders:\n Authorization: Bearer ${oidc.idToken}\noutputs:\n cloudRunResponse: ${cloudrun.body}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
"inputs": {
"description": "A collection of arguments for invoking getAccountIdToken.\n",
"properties": {
@@ -300789,7 +304050,7 @@
},
"project": {
"type": "string",
- "description": "The ID of the project that the service account will be created in.\nDefaults to the provider project configuration.\n"
+ "description": "The ID of the project that the service account is present in.\nDefaults to the provider project configuration.\n"
},
"publicKeyType": {
"type": "string",
@@ -302108,7 +305369,7 @@
},
"project": {
"type": "string",
- "description": "The ID of the project in which the resource belongs. If it is not provided, the provider project is used. If no value is supplied in the configuration or through provider defaults then the data source will use the Compute API to find the project id that corresponds to the project number returned from the Storage API. Supplying a value for `project` doesn't influence retrieving data about the bucket but it can be used to prevent use of the Compute API. If you do provide a `project` value ensure that it is the correct value for that bucket; the data source will not check that the project id and project number match.\n"
+ "description": "The ID of the project in which the resource belongs. If it is not provided then the data source will use the Compute API to find the project id that corresponds to the project number returned from the Storage API, and if no Compute API permissions are available or if the Compute API is disabled it defaults to the provider value. Supplying a value for `project` doesn't influence retrieving data about the bucket but it can be used to prevent use of the Compute API. If you do provide a `project` value ensure that it is the correct value for that bucket; the data source will not check that the project id and project number match.\n"
}
},
"type": "object",
@@ -302472,7 +305733,7 @@
}
},
"gcp:storage/getBucketObjectContent:getBucketObjectContent": {
- "description": "Gets an existing object content inside an existing bucket in Google Cloud Storage service (GCS).\nSee [the official documentation](https://cloud.google.com/storage/docs/key-terms#objects)\nand\n[API](https://cloud.google.com/storage/docs/json_api/v1/objects).\n\n\u003e **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file.\n\n## Example Usage\n\nExample file object stored within a folder.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst key = gcp.storage.getBucketObjectContent({\n name: \"encryptedkey\",\n bucket: \"keystore\",\n});\nexport const encrypted = key.then(key =\u003e key.content);\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey = gcp.storage.get_bucket_object_content(name=\"encryptedkey\",\n bucket=\"keystore\")\npulumi.export(\"encrypted\", key.content)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var key = Gcp.Storage.GetBucketObjectContent.Invoke(new()\n {\n Name = \"encryptedkey\",\n Bucket = \"keystore\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"encrypted\"] = key.Apply(getBucketObjectContentResult =\u003e getBucketObjectContentResult.Content),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkey, err := storage.GetBucketObjectContent(ctx, \u0026storage.GetBucketObjectContentArgs{\n\t\t\tName: \"encryptedkey\",\n\t\t\tBucket: \"keystore\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"encrypted\", key.Content)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetBucketObjectContentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var key = StorageFunctions.getBucketObjectContent(GetBucketObjectContentArgs.builder()\n .name(\"encryptedkey\")\n .bucket(\"keystore\")\n .build());\n\n ctx.export(\"encrypted\", key.applyValue(getBucketObjectContentResult -\u003e getBucketObjectContentResult.content()));\n }\n}\n```\n```yaml\nvariables:\n key:\n fn::invoke:\n function: gcp:storage:getBucketObjectContent\n arguments:\n name: encryptedkey\n bucket: keystore\noutputs:\n encrypted: ${key.content}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
+ "description": "Gets an existing object content inside an existing bucket in Google Cloud Storage service (GCS).\nSee [the official documentation](https://cloud.google.com/storage/docs/key-terms#objects)\nand\n[API](https://cloud.google.com/storage/docs/json_api/v1/objects).\n\n\u003e **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file.\n\n## Example Usage\n\nExample file object stored within a folder.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst key = gcp.storage.getBucketObjectContent({\n name: \"encryptedkey\",\n bucket: \"keystore\",\n});\nexport const encrypted = key.then(key =\u003e key.content);\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey = gcp.storage.get_bucket_object_content(name=\"encryptedkey\",\n bucket=\"keystore\")\npulumi.export(\"encrypted\", key.content)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var key = Gcp.Storage.GetBucketObjectContent.Invoke(new()\n {\n Name = \"encryptedkey\",\n Bucket = \"keystore\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"encrypted\"] = key.Apply(getBucketObjectContentResult =\u003e getBucketObjectContentResult.Content),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkey, err := storage.GetBucketObjectContent(ctx, \u0026storage.GetBucketObjectContentArgs{\n\t\t\tName: \"encryptedkey\",\n\t\t\tBucket: \"keystore\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"encrypted\", key.Content)\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetBucketObjectContentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var key = StorageFunctions.getBucketObjectContent(GetBucketObjectContentArgs.builder()\n .name(\"encryptedkey\")\n .bucket(\"keystore\")\n .build());\n\n ctx.export(\"encrypted\", key.applyValue(getBucketObjectContentResult -\u003e getBucketObjectContentResult.content()));\n }\n}\n```\n```yaml\nvariables:\n key:\n fn::invoke:\n function: gcp:storage:getBucketObjectContent\n arguments:\n name: encryptedkey\n bucket: keystore\noutputs:\n encrypted: ${key.content}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
"inputs": {
"description": "A collection of arguments for invoking getBucketObjectContent.\n",
"properties": {
diff --git a/provider/go.mod b/provider/go.mod
index cda0fe9409..70eb732424 100644
--- a/provider/go.mod
+++ b/provider/go.mod
@@ -14,7 +14,7 @@ require (
github.com/pulumi/pulumi/pkg/v3 v3.142.0
github.com/pulumi/pulumi/sdk/v3 v3.142.0
github.com/stretchr/testify v1.9.0
- google.golang.org/api v0.203.0
+ google.golang.org/api v0.206.0
sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600
)
@@ -28,15 +28,15 @@ require (
bitbucket.org/creachadair/stringset v0.0.8 // indirect
cel.dev/expr v0.16.0 // indirect
cloud.google.com/go v0.116.0 // indirect
- cloud.google.com/go/auth v0.9.9 // indirect
- cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect
+ cloud.google.com/go/auth v0.10.2 // indirect
+ cloud.google.com/go/auth/oauth2adapt v0.2.5 // indirect
cloud.google.com/go/bigtable v1.33.0 // indirect
cloud.google.com/go/compute/metadata v0.5.2 // indirect
- cloud.google.com/go/iam v1.2.1 // indirect
- cloud.google.com/go/kms v1.20.0 // indirect
- cloud.google.com/go/logging v1.11.0 // indirect
- cloud.google.com/go/longrunning v0.6.1 // indirect
- cloud.google.com/go/monitoring v1.21.1 // indirect
+ cloud.google.com/go/iam v1.2.2 // indirect
+ cloud.google.com/go/kms v1.20.1 // indirect
+ cloud.google.com/go/logging v1.12.0 // indirect
+ cloud.google.com/go/longrunning v0.6.2 // indirect
+ cloud.google.com/go/monitoring v1.21.2 // indirect
cloud.google.com/go/storage v1.43.0 // indirect
dario.cat/mergo v1.0.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 // indirect
@@ -46,7 +46,7 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
github.com/BurntSushi/toml v1.2.1 // indirect
- github.com/GoogleCloudPlatform/declarative-resource-client-library v1.75.0 // indirect
+ github.com/GoogleCloudPlatform/declarative-resource-client-library v1.76.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
github.com/Masterminds/semver/v3 v3.2.1 // indirect
@@ -123,7 +123,7 @@ require (
github.com/google/uuid v1.6.0 // indirect
github.com/google/wire v0.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect
- github.com/googleapis/gax-go/v2 v2.13.0 // indirect
+ github.com/googleapis/gax-go/v2 v2.14.0 // indirect
github.com/gorilla/mux v1.8.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
@@ -153,7 +153,6 @@ require (
github.com/hashicorp/terraform-plugin-framework-validators v0.12.0 // indirect
github.com/hashicorp/terraform-plugin-go v0.25.0 // indirect
github.com/hashicorp/terraform-plugin-log v0.9.0 // indirect
- github.com/hashicorp/terraform-plugin-mux v0.17.0 // indirect
github.com/hashicorp/terraform-plugin-testing v1.5.1 // indirect
github.com/hashicorp/terraform-registry-address v0.2.3 // indirect
github.com/hashicorp/terraform-svchost v0.1.1 // indirect
@@ -256,22 +255,22 @@ require (
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
gocloud.dev v0.37.0 // indirect
gocloud.dev/secrets/hashivault v0.37.0 // indirect
- golang.org/x/crypto v0.28.0 // indirect
+ golang.org/x/crypto v0.29.0 // indirect
golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 // indirect
golang.org/x/mod v0.18.0 // indirect
- golang.org/x/net v0.30.0 // indirect
- golang.org/x/oauth2 v0.23.0 // indirect
- golang.org/x/sync v0.8.0 // indirect
- golang.org/x/sys v0.26.0 // indirect
- golang.org/x/term v0.25.0 // indirect
- golang.org/x/text v0.19.0 // indirect
- golang.org/x/time v0.7.0 // indirect
+ golang.org/x/net v0.31.0 // indirect
+ golang.org/x/oauth2 v0.24.0 // indirect
+ golang.org/x/sync v0.9.0 // indirect
+ golang.org/x/sys v0.27.0 // indirect
+ golang.org/x/term v0.26.0 // indirect
+ golang.org/x/text v0.20.0 // indirect
+ golang.org/x/time v0.8.0 // indirect
golang.org/x/tools v0.22.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
google.golang.org/appengine v1.6.8 // indirect
- google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect
+ google.golang.org/genproto v0.0.0-20241104194629-dd2ea8efbc28 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect
google.golang.org/grpc v1.67.1 // indirect
google.golang.org/protobuf v1.35.1 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
diff --git a/provider/go.sum b/provider/go.sum
index dbb806dbf0..ab2cd1b725 100644
--- a/provider/go.sum
+++ b/provider/go.sum
@@ -165,10 +165,10 @@ cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav
cloud.google.com/go/assuredworkloads v1.11.2/go.mod h1:O1dfr+oZJMlE6mw0Bp0P1KZSlj5SghMBvTpZqIcUAW4=
cloud.google.com/go/assuredworkloads v1.11.3/go.mod h1:vEjfTKYyRUaIeA0bsGJceFV2JKpVRgyG2op3jfa59Zs=
cloud.google.com/go/assuredworkloads v1.11.4/go.mod h1:4pwwGNwy1RP0m+y12ef3Q/8PaiWrIDQ6nD2E8kvWI9U=
-cloud.google.com/go/auth v0.9.9 h1:BmtbpNQozo8ZwW2t7QJjnrQtdganSdmqeIBxHxNkEZQ=
-cloud.google.com/go/auth v0.9.9/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI=
-cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY=
-cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc=
+cloud.google.com/go/auth v0.10.2 h1:oKF7rgBfSHdp/kuhXtqU/tNDr0mZqhYbEh+6SiqzkKo=
+cloud.google.com/go/auth v0.10.2/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI=
+cloud.google.com/go/auth/oauth2adapt v0.2.5 h1:2p29+dePqsCHPP1bqDJcKj4qxRyYCcbzKpFyKGt3MTk=
+cloud.google.com/go/auth/oauth2adapt v0.2.5/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8=
cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=
cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8=
cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8=
@@ -602,8 +602,8 @@ cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+K
cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE=
cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8=
cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8=
-cloud.google.com/go/iam v1.2.1 h1:QFct02HRb7H12J/3utj0qf5tobFh9V4vR6h9eX5EBRU=
-cloud.google.com/go/iam v1.2.1/go.mod h1:3VUIJDPpwT6p/amXRC5GY8fCCh70lxPygguVtI0Z4/g=
+cloud.google.com/go/iam v1.2.2 h1:ozUSofHUGf/F4tCNy/mu9tHLTaxZFLOUiKzjcgWHGIA=
+cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY=
cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc=
cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A=
cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk=
@@ -643,8 +643,8 @@ cloud.google.com/go/kms v1.15.2/go.mod h1:3hopT4+7ooWRCjc2DxgnpESFxhIraaI2IpAVUE
cloud.google.com/go/kms v1.15.3/go.mod h1:AJdXqHxS2GlPyduM99s9iGqi2nwbviBbhV/hdmt4iOQ=
cloud.google.com/go/kms v1.15.4/go.mod h1:L3Sdj6QTHK8dfwK5D1JLsAyELsNMnd3tAIwGS4ltKpc=
cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI=
-cloud.google.com/go/kms v1.20.0 h1:uKUvjGqbBlI96xGE669hcVnEMw1Px/Mvfa62dhM5UrY=
-cloud.google.com/go/kms v1.20.0/go.mod h1:/dMbFF1tLLFnQV44AoI2GlotbjowyUfgVwezxW291fM=
+cloud.google.com/go/kms v1.20.1 h1:og29Wv59uf2FVaZlesaiDAqHFzHaoUyHI3HYp9VUHVg=
+cloud.google.com/go/kms v1.20.1/go.mod h1:LywpNiVCvzYNJWS9JUcGJSVTNSwPwi0vBAotzDqn2nc=
cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=
cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=
cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE=
@@ -665,8 +665,8 @@ cloud.google.com/go/lifesciences v0.9.4/go.mod h1:bhm64duKhMi7s9jR9WYJYvjAFJwRqN
cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw=
cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M=
cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI=
-cloud.google.com/go/logging v1.11.0 h1:v3ktVzXMV7CwHq1MBF65wcqLMA7i+z3YxbUsoK7mOKs=
-cloud.google.com/go/logging v1.11.0/go.mod h1:5LDiJC/RxTt+fHc1LAt20R9TKiUTReDg6RuuFOZ67+A=
+cloud.google.com/go/logging v1.12.0 h1:ex1igYcGFd4S/RZWOCU51StlIEuey5bjqwH9ZYjHibk=
+cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT7RejksUAM=
cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE=
cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc=
cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo=
@@ -676,8 +676,8 @@ cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHS
cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs=
cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y=
cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI=
-cloud.google.com/go/longrunning v0.6.1 h1:lOLTFxYpr8hcRtcwWir5ITh1PAKUD/sG2lKrTSYjyMc=
-cloud.google.com/go/longrunning v0.6.1/go.mod h1:nHISoOZpBcmlwbJmiVk5oDRz0qG/ZxPynEGs1iZ79s0=
+cloud.google.com/go/longrunning v0.6.2 h1:xjDfh1pQcWPEvnfjZmwjKQEcHnpz6lHjfy7Fo0MK+hc=
+cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI=
cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE=
cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM=
cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA=
@@ -729,8 +729,8 @@ cloud.google.com/go/monitoring v1.16.0/go.mod h1:Ptp15HgAyM1fNICAojDMoNc/wUmn67m
cloud.google.com/go/monitoring v1.16.1/go.mod h1:6HsxddR+3y9j+o/cMJH6q/KJ/CBTvM/38L/1m7bTRJ4=
cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc=
cloud.google.com/go/monitoring v1.16.3/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw=
-cloud.google.com/go/monitoring v1.21.1 h1:zWtbIoBMnU5LP9A/fz8LmWMGHpk4skdfeiaa66QdFGc=
-cloud.google.com/go/monitoring v1.21.1/go.mod h1:Rj++LKrlht9uBi8+Eb530dIrzG/cU/lB8mt+lbeFK1c=
+cloud.google.com/go/monitoring v1.21.2 h1:FChwVtClH19E7pJ+e0xUhJPGksctZNVOk2UhMmblmdU=
+cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU=
cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA=
cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o=
cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM=
@@ -1179,8 +1179,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/GoogleCloudPlatform/declarative-resource-client-library v1.75.0 h1:7tFkHNjfjm7dYnjqyuzMon+31lPaMTjca3OuamWd0Oo=
-github.com/GoogleCloudPlatform/declarative-resource-client-library v1.75.0/go.mod h1:pL2Qt5HT+x6xrTd806oMiM3awW6kNIXB/iiuClz6m6k=
+github.com/GoogleCloudPlatform/declarative-resource-client-library v1.76.0 h1:VH/j8GmTsvPds/NkGfo4OYr9C7R8ysikaqq4rcDUT0s=
+github.com/GoogleCloudPlatform/declarative-resource-client-library v1.76.0/go.mod h1:pL2Qt5HT+x6xrTd806oMiM3awW6kNIXB/iiuClz6m6k=
github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
@@ -1623,8 +1623,8 @@ github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38
github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw=
github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI=
github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
-github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s=
-github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A=
+github.com/googleapis/gax-go/v2 v2.14.0 h1:f+jMrjBPl+DL9nI4IQzLUxMq7XrAqFYB7hBPqMNIe8o=
+github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk=
github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
@@ -2218,8 +2218,8 @@ golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
-golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
-golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
+golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
+golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -2365,8 +2365,8 @@ golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
-golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
-golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
+golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo=
+golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
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=
@@ -2402,8 +2402,8 @@ golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQ
golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk=
golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0=
golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
+golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
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=
@@ -2425,8 +2425,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
-golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
+golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -2538,8 +2538,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
-golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
+golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -2560,8 +2560,8 @@ golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
-golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
-golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
+golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
+golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E=
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=
@@ -2583,16 +2583,16 @@ golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
-golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
+golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
+golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
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=
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
-golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
+golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -2753,8 +2753,8 @@ google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvy
google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750=
google.golang.org/api v0.139.0/go.mod h1:CVagp6Eekz9CjGZ718Z+sloknzkDJE7Vc1Ckj9+viBk=
google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI=
-google.golang.org/api v0.203.0 h1:SrEeuwU3S11Wlscsn+LA1kb/Y5xT8uggJSkIhD08NAU=
-google.golang.org/api v0.203.0/go.mod h1:BuOVyCSYEPwJb3npWvDnNmFI92f3GeRnHNkETneT3SI=
+google.golang.org/api v0.206.0 h1:A27GClesCSheW5P2BymVHjpEeQ2XHH8DI8Srs2HI2L8=
+google.golang.org/api v0.206.0/go.mod h1:BtB8bfjTYIrai3d8UyvPmV9REGgox7coh+ZRwm0b+W8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -2917,8 +2917,8 @@ google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb
google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4=
google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY=
-google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53 h1:Df6WuGvthPzc+JiQ/G+m+sNX24kc0aTBqoDN/0yyykE=
-google.golang.org/genproto v0.0.0-20241015192408-796eee8c2d53/go.mod h1:fheguH3Am2dGp1LfXkrvwqC/KlFq8F0nLq3LryOMrrE=
+google.golang.org/genproto v0.0.0-20241104194629-dd2ea8efbc28 h1:KJjNNclfpIkVqrZlTWcgOOaVQ00LdBnoEaRfkUx760s=
+google.golang.org/genproto v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:mt9/MofW7AWQ+Gy179ChOnvmJatV8YHUmrcedo9CIFI=
google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8=
google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
@@ -2936,8 +2936,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.
google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870=
google.golang.org/genproto/googleapis/api v0.0.0-20231030173426-d783a09b4405/go.mod h1:oT32Z4o8Zv2xPQTg0pbVaPr0MPOH6f14RgXt7zfIpwg=
google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 h1:T6rh4haD3GVYsgEfWExoCZA2o2FmbNyKpTuAxbEFPTg=
-google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:wp2WsuBYj6j8wUdo3ToZsdxxixbvQNAHqVJrTgi5E5M=
+google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 h1:M0KvPgPmDZHPlbRbaNU1APr28TvwvvdUPlSv7PUvy8g=
+google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:dguCy7UOdZhTvLzDyt15+rOrawrpM4q7DD9dQ1P11P4=
google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA=
google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c=
google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw=
@@ -2958,8 +2958,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.
google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc=
google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 h1:XVhgTWWV3kGQlwJHR3upFWZeTsei6Oks1apkZSeonIE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
diff --git a/provider/resources.go b/provider/resources.go
index d786f7276c..ae0fd413c1 100644
--- a/provider/resources.go
+++ b/provider/resources.go
@@ -239,6 +239,7 @@ var moduleMapping = map[string]string{
"firestore": gcpFirestore,
"folder": gcpFolder,
"game_services": gcpGameServices,
+ "gemini": "Gemini",
"gke_backup": gcpGkeBackup,
"gke_hub": gcpGkeHub,
"gkeonprem": gcpGkeOnPrem,
@@ -467,12 +468,10 @@ var metadata []byte
//
//nolint:lll
func Provider() tfbridge.ProviderInfo {
- p := pf.MuxShimWithDisjointgPF(
- context.Background(),
- shimv2.NewProvider(gcpProvider.Provider(),
- shimv2.WithPlanStateEdit(fixEmptyLabels),
- ),
- gcpPFProvider.New())
+ gcpSDKv2 := gcpProvider.Provider()
+ p := pf.MuxShimWithDisjointgPF(context.Background(),
+ shimv2.NewProvider(gcpSDKv2, shimv2.WithPlanStateEdit(fixEmptyLabels)),
+ gcpPFProvider.New(gcpSDKv2))
// We should only run the validation once to avoid duplicating the reported errors.
var credentialsValidationRun atomic.Bool
@@ -2733,6 +2732,7 @@ func Provider() tfbridge.ProviderInfo {
},
"google_backup_dr_backup_plan": {Docs: &tfbridge.DocInfo{AllowMissing: true}},
"google_backup_dr_data_source": {Docs: &tfbridge.DocInfo{AllowMissing: true}},
+ "google_backup_dr_backup": {Docs: &tfbridge.DocInfo{AllowMissing: true}},
},
JavaScript: &tfbridge.JavaScriptInfo{
Dependencies: map[string]string{
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimetersServicePerimeterArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimetersServicePerimeterArgs.cs
index 5127dad685..cfcfa228ce 100644
--- a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimetersServicePerimeterArgs.cs
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimetersServicePerimeterArgs.cs
@@ -26,6 +26,15 @@ public sealed class ServicePerimetersServicePerimeterArgs : global::Pulumi.Resou
[Input("description")]
public Input
? Description { get; set; }
+ ///
+ /// (Output)
+ /// An opaque identifier for the current version of the ServicePerimeter. This
+ /// identifier does not follow any specific format. If an etag is not provided, the
+ /// operation will be performed as if a valid etag is provided.
+ ///
+ [Input("etag")]
+ public Input? Etag { get; set; }
+
///
/// Resource name for the ServicePerimeter. The short_name component must
/// begin with a letter and only include alphanumeric and '_'.
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimetersServicePerimeterGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimetersServicePerimeterGetArgs.cs
index f5e8672278..a64bc847e1 100644
--- a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimetersServicePerimeterGetArgs.cs
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimetersServicePerimeterGetArgs.cs
@@ -26,6 +26,15 @@ public sealed class ServicePerimetersServicePerimeterGetArgs : global::Pulumi.Re
[Input("description")]
public Input? Description { get; set; }
+ ///
+ /// (Output)
+ /// An opaque identifier for the current version of the ServicePerimeter. This
+ /// identifier does not follow any specific format. If an etag is not provided, the
+ /// operation will be performed as if a valid etag is provided.
+ ///
+ [Input("etag")]
+ public Input? Etag { get; set; }
+
///
/// Resource name for the ServicePerimeter. The short_name component must
/// begin with a letter and only include alphanumeric and '_'.
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimetersServicePerimeter.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimetersServicePerimeter.cs
index a0088fc132..b28966da4a 100644
--- a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimetersServicePerimeter.cs
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimetersServicePerimeter.cs
@@ -24,6 +24,13 @@ public sealed class ServicePerimetersServicePerimeter
///
public readonly string? Description;
///
+ /// (Output)
+ /// An opaque identifier for the current version of the ServicePerimeter. This
+ /// identifier does not follow any specific format. If an etag is not provided, the
+ /// operation will be performed as if a valid etag is provided.
+ ///
+ public readonly string? Etag;
+ ///
/// Resource name for the ServicePerimeter. The short_name component must
/// begin with a letter and only include alphanumeric and '_'.
/// Format: accessPolicies/{policy_id}/servicePerimeters/{short_name}
@@ -91,6 +98,8 @@ private ServicePerimetersServicePerimeter(
string? description,
+ string? etag,
+
string name,
string? perimeterType,
@@ -107,6 +116,7 @@ private ServicePerimetersServicePerimeter(
{
CreateTime = createTime;
Description = description;
+ Etag = etag;
Name = name;
PerimeterType = perimeterType;
Spec = spec;
diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeter.cs b/sdk/dotnet/AccessContextManager/ServicePerimeter.cs
index 1d0a597c78..efb9511c0a 100644
--- a/sdk/dotnet/AccessContextManager/ServicePerimeter.cs
+++ b/sdk/dotnet/AccessContextManager/ServicePerimeter.cs
@@ -356,6 +356,14 @@ public partial class ServicePerimeter : global::Pulumi.CustomResource
[Output("description")]
public Output Description { get; private set; } = null!;
+ ///
+ /// An opaque identifier for the current version of the ServicePerimeter. This
+ /// identifier does not follow any specific format. If an etag is not provided, the
+ /// operation will be performed as if a valid etag is provided.
+ ///
+ [Output("etag")]
+ public Output Etag { get; private set; } = null!;
+
///
/// Resource name for the ServicePerimeter. The short_name component must
/// begin with a letter and only include alphanumeric and '_'.
@@ -592,6 +600,14 @@ public sealed class ServicePerimeterState : global::Pulumi.ResourceArgs
[Input("description")]
public Input? Description { get; set; }
+ ///
+ /// An opaque identifier for the current version of the ServicePerimeter. This
+ /// identifier does not follow any specific format. If an etag is not provided, the
+ /// operation will be performed as if a valid etag is provided.
+ ///
+ [Input("etag")]
+ public Input? Etag { get; set; }
+
///
/// Resource name for the ServicePerimeter. The short_name component must
/// begin with a letter and only include alphanumeric and '_'.
diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs
index a4eac6d3da..a71ef8b017 100644
--- a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs
+++ b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs
@@ -22,6 +22,9 @@ namespace Pulumi.Gcp.AccessContextManager
/// > **Note:** By default, updates to this resource will remove the EgressPolicy from the
/// from the perimeter and add it back in a non-atomic manner. To ensure that the new EgressPolicy
/// is added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.
+ /// **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,
+ /// the service perimeter resource must have a `lifecycle` block with `ignore_changes = [spec[0].egress_policies]` so
+ /// they don't fight over which egress rules should be in the policy.
///
/// To get more information about ServicePerimeterDryRunEgressPolicy, see:
///
diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs
index 5c884733e8..a57bc7196e 100644
--- a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs
+++ b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs
@@ -23,6 +23,9 @@ namespace Pulumi.Gcp.AccessContextManager
/// > **Note:** By default, updates to this resource will remove the IngressPolicy from the
/// from the perimeter and add it back in a non-atomic manner. To ensure that the new IngressPolicy
/// is added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.
+ /// **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,
+ /// the service perimeter resource must have a `lifecycle` block with `ignore_changes = [spec[0].ingress_policies]` so
+ /// they don't fight over which ingress rules should be in the policy.
///
/// To get more information about ServicePerimeterDryRunIngressPolicy, see:
///
diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs
index a0b2517dc8..a6937f3579 100644
--- a/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs
+++ b/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs
@@ -22,6 +22,9 @@ namespace Pulumi.Gcp.AccessContextManager
/// > **Note:** By default, updates to this resource will remove the EgressPolicy from the
/// from the perimeter and add it back in a non-atomic manner. To ensure that the new EgressPolicy
/// is added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.
+ /// **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,
+ /// the service perimeter resource must have a `lifecycle` block with `ignore_changes = [status[0].egress_policies]` so
+ /// they don't fight over which egress rules should be in the policy.
///
/// To get more information about ServicePerimeterEgressPolicy, see:
///
diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs
index 1744988ade..5d3ca2ccff 100644
--- a/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs
+++ b/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs
@@ -23,6 +23,9 @@ namespace Pulumi.Gcp.AccessContextManager
/// > **Note:** By default, updates to this resource will remove the IngressPolicy from the
/// from the perimeter and add it back in a non-atomic manner. To ensure that the new IngressPolicy
/// is added before the old one is removed, add a `lifecycle` block with `create_before_destroy = true` to this resource.
+ /// **Note:** If this resource is used alongside a `gcp.accesscontextmanager.ServicePerimeter` resource,
+ /// the service perimeter resource must have a `lifecycle` block with `ignore_changes = [status[0].ingress_policies]` so
+ /// they don't fight over which ingress rules should be in the policy.
///
/// To get more information about ServicePerimeterIngressPolicy, see:
///
diff --git a/sdk/dotnet/Apigee/AppGroup.cs b/sdk/dotnet/Apigee/AppGroup.cs
index 246b61e302..a7d0f88139 100644
--- a/sdk/dotnet/Apigee/AppGroup.cs
+++ b/sdk/dotnet/Apigee/AppGroup.cs
@@ -219,7 +219,7 @@ public partial class AppGroup : global::Pulumi.CustomResource
public Output> Attributes { get; private set; } = null!;
///
- /// Channel identifier identifies the owner maintaing this grouping.
+ /// Channel identifier identifies the owner maintaining this grouping.
///
[Output("channelId")]
public Output ChannelId { get; private set; } = null!;
@@ -337,7 +337,7 @@ public InputList Attributes
}
///
- /// Channel identifier identifies the owner maintaing this grouping.
+ /// Channel identifier identifies the owner maintaining this grouping.
///
[Input("channelId")]
public Input? ChannelId { get; set; }
@@ -405,7 +405,7 @@ public InputList Attributes
}
///
- /// Channel identifier identifies the owner maintaing this grouping.
+ /// Channel identifier identifies the owner maintaining this grouping.
///
[Input("channelId")]
public Input? ChannelId { get; set; }
diff --git a/sdk/dotnet/ApplicationIntegration/Client.cs b/sdk/dotnet/ApplicationIntegration/Client.cs
index 4466f3c4e4..a3963434a0 100644
--- a/sdk/dotnet/ApplicationIntegration/Client.cs
+++ b/sdk/dotnet/ApplicationIntegration/Client.cs
@@ -45,6 +45,7 @@ namespace Pulumi.Gcp.ApplicationIntegration
/// using System.Linq;
/// using Pulumi;
/// using Gcp = Pulumi.Gcp;
+ /// using Std = Pulumi.Std;
///
/// return await Deployment.RunAsync(() =>
/// {
@@ -82,9 +83,18 @@ namespace Pulumi.Gcp.ApplicationIntegration
/// CloudKmsConfig = new Gcp.ApplicationIntegration.Inputs.ClientCloudKmsConfigArgs
/// {
/// KmsLocation = "us-east1",
- /// KmsRing = keyring.Id,
- /// Key = cryptokey.Id,
- /// KeyVersion = testKey.Id,
+ /// KmsRing = Std.Basename.Invoke(new()
+ /// {
+ /// Input = keyring.Id,
+ /// }).Apply(invoke => invoke.Result),
+ /// Key = Std.Basename.Invoke(new()
+ /// {
+ /// Input = cryptokey.Id,
+ /// }).Apply(invoke => invoke.Result),
+ /// KeyVersion = Std.Basename.Invoke(new()
+ /// {
+ /// Input = testKey.Id,
+ /// }).Apply(invoke => invoke.Result),
/// KmsProjectId = testProject.Apply(getProjectResult => getProjectResult.ProjectId),
/// },
/// });
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigCommonRepositoryArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigCommonRepositoryArgs.cs
index 48303f7a0e..1f01162a41 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigCommonRepositoryArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigCommonRepositoryArgs.cs
@@ -13,7 +13,10 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigCommonRepositoryArgs : global::Pulumi.ResourceArgs
{
///
- /// Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY`
+ /// One of:
+ /// a. Artifact Registry Repository resource, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY`
+ /// b. URI to the registry, e.g. `"https://registry-1.docker.io"`
+ /// c. URI to Artifact Registry Repository, e.g. `"https://REGION-docker.pkg.dev/UPSTREAM_PROJECT_ID/UPSTREAM_REPOSITORY"`
///
[Input("uri", required: true)]
public Input Uri { get; set; } = null!;
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigCommonRepositoryGetArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigCommonRepositoryGetArgs.cs
index 8cfcd79dd4..d4a2b7bed5 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigCommonRepositoryGetArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigCommonRepositoryGetArgs.cs
@@ -13,7 +13,10 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigCommonRepositoryGetArgs : global::Pulumi.ResourceArgs
{
///
- /// Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY`
+ /// One of:
+ /// a. Artifact Registry Repository resource, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY`
+ /// b. URI to the registry, e.g. `"https://registry-1.docker.io"`
+ /// c. URI to Artifact Registry Repository, e.g. `"https://REGION-docker.pkg.dev/UPSTREAM_PROJECT_ID/UPSTREAM_REPOSITORY"`
///
[Input("uri", required: true)]
public Input Uri { get; set; } = null!;
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigDockerRepositoryArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigDockerRepositoryArgs.cs
index 82a18cffd3..2083c3c098 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigDockerRepositoryArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigDockerRepositoryArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigDockerRepositoryArgs : global::Pulumi.ResourceArgs
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
[Input("customRepository")]
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigDockerRepositoryGetArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigDockerRepositoryGetArgs.cs
index 6e13d9dce6..cb4756976a 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigDockerRepositoryGetArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigDockerRepositoryGetArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigDockerRepositoryGetArgs : global::Pulumi.ResourceArgs
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
[Input("customRepository")]
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigMavenRepositoryArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigMavenRepositoryArgs.cs
index 55efb4ae31..a7df2c8c72 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigMavenRepositoryArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigMavenRepositoryArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigMavenRepositoryArgs : global::Pulumi.ResourceArgs
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
[Input("customRepository")]
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigMavenRepositoryGetArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigMavenRepositoryGetArgs.cs
index 96be001cde..016c9487d4 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigMavenRepositoryGetArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigMavenRepositoryGetArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigMavenRepositoryGetArgs : global::Pulumi.ResourceArgs
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
[Input("customRepository")]
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigNpmRepositoryArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigNpmRepositoryArgs.cs
index d5d5b2f557..fd62e52671 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigNpmRepositoryArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigNpmRepositoryArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigNpmRepositoryArgs : global::Pulumi.ResourceArgs
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
[Input("customRepository")]
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigNpmRepositoryGetArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigNpmRepositoryGetArgs.cs
index 317cc9dd9e..cce2a3e306 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigNpmRepositoryGetArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigNpmRepositoryGetArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigNpmRepositoryGetArgs : global::Pulumi.ResourceArgs
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
[Input("customRepository")]
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigPythonRepositoryArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigPythonRepositoryArgs.cs
index 3d7497eb04..c4e3dc58a2 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigPythonRepositoryArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigPythonRepositoryArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigPythonRepositoryArgs : global::Pulumi.ResourceArgs
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
[Input("customRepository")]
diff --git a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigPythonRepositoryGetArgs.cs b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigPythonRepositoryGetArgs.cs
index d88d20c1a0..80709da84d 100644
--- a/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigPythonRepositoryGetArgs.cs
+++ b/sdk/dotnet/ArtifactRegistry/Inputs/RepositoryRemoteRepositoryConfigPythonRepositoryGetArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Inputs
public sealed class RepositoryRemoteRepositoryConfigPythonRepositoryGetArgs : global::Pulumi.ResourceArgs
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
[Input("customRepository")]
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigCommonRepositoryResult.cs b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigCommonRepositoryResult.cs
index 3870ec115f..19fdd60e6d 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigCommonRepositoryResult.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigCommonRepositoryResult.cs
@@ -14,7 +14,10 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class GetRepositoryRemoteRepositoryConfigCommonRepositoryResult
{
///
- /// Specific uri to the Artifact Registory repository, e.g. 'projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY'
+ /// One of:
+ /// a. Artifact Registry Repository resource, e.g. 'projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY'
+ /// b. URI to the registry, e.g. '"https://registry-1.docker.io"'
+ /// c. URI to Artifact Registry Repository, e.g. '"https://REGION-docker.pkg.dev/UPSTREAM_PROJECT_ID/UPSTREAM_REPOSITORY"'
///
public readonly string Uri;
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigDockerRepositoryResult.cs b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigDockerRepositoryResult.cs
index 4f187e1274..233ae19896 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigDockerRepositoryResult.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigDockerRepositoryResult.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class GetRepositoryRemoteRepositoryConfigDockerRepositoryResult
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
///
public readonly ImmutableArray CustomRepositories;
///
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigMavenRepositoryResult.cs b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigMavenRepositoryResult.cs
index dd70541fba..d831f74ff1 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigMavenRepositoryResult.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigMavenRepositoryResult.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class GetRepositoryRemoteRepositoryConfigMavenRepositoryResult
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
///
public readonly ImmutableArray CustomRepositories;
///
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigNpmRepositoryResult.cs b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigNpmRepositoryResult.cs
index 2139a95ea2..fe6c7b54ab 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigNpmRepositoryResult.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigNpmRepositoryResult.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class GetRepositoryRemoteRepositoryConfigNpmRepositoryResult
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
///
public readonly ImmutableArray CustomRepositories;
///
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigPythonRepositoryResult.cs b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigPythonRepositoryResult.cs
index 270cc7769d..6e9b8f2dbd 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigPythonRepositoryResult.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/GetRepositoryRemoteRepositoryConfigPythonRepositoryResult.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class GetRepositoryRemoteRepositoryConfigPythonRepositoryResult
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
///
public readonly ImmutableArray CustomRepositories;
///
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigCommonRepository.cs b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigCommonRepository.cs
index 779d6fe541..52de872eeb 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigCommonRepository.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigCommonRepository.cs
@@ -14,7 +14,10 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class RepositoryRemoteRepositoryConfigCommonRepository
{
///
- /// Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY`
+ /// One of:
+ /// a. Artifact Registry Repository resource, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY`
+ /// b. URI to the registry, e.g. `"https://registry-1.docker.io"`
+ /// c. URI to Artifact Registry Repository, e.g. `"https://REGION-docker.pkg.dev/UPSTREAM_PROJECT_ID/UPSTREAM_REPOSITORY"`
///
public readonly string Uri;
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigDockerRepository.cs b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigDockerRepository.cs
index c4700a642e..62b29c109a 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigDockerRepository.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigDockerRepository.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class RepositoryRemoteRepositoryConfigDockerRepository
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
public readonly Outputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository? CustomRepository;
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigMavenRepository.cs b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigMavenRepository.cs
index 0dcd2c59d0..8bfdfc4415 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigMavenRepository.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigMavenRepository.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class RepositoryRemoteRepositoryConfigMavenRepository
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
public readonly Outputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository? CustomRepository;
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigNpmRepository.cs b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigNpmRepository.cs
index 03fbf6adcb..eb961b5571 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigNpmRepository.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigNpmRepository.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class RepositoryRemoteRepositoryConfigNpmRepository
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
public readonly Outputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository? CustomRepository;
diff --git a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigPythonRepository.cs b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigPythonRepository.cs
index adbd008ef9..83a370d694 100644
--- a/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigPythonRepository.cs
+++ b/sdk/dotnet/ArtifactRegistry/Outputs/RepositoryRemoteRepositoryConfigPythonRepository.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.ArtifactRegistry.Outputs
public sealed class RepositoryRemoteRepositoryConfigPythonRepository
{
///
- /// Settings for a remote repository with a custom uri.
+ /// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri.
/// Structure is documented below.
///
public readonly Outputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository? CustomRepository;
diff --git a/sdk/dotnet/ArtifactRegistry/Repository.cs b/sdk/dotnet/ArtifactRegistry/Repository.cs
index 1999c61d5b..b186034a02 100644
--- a/sdk/dotnet/ArtifactRegistry/Repository.cs
+++ b/sdk/dotnet/ArtifactRegistry/Repository.cs
@@ -681,6 +681,107 @@ namespace Pulumi.Gcp.ArtifactRegistry
///
/// });
/// ```
+ /// ### Artifact Registry Repository Remote Common Repository With Artifact Registry Uri
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var project = Gcp.Organizations.GetProject.Invoke();
+ ///
+ /// var upstreamRepo = new Gcp.ArtifactRegistry.Repository("upstream_repo", new()
+ /// {
+ /// Location = "us-central1",
+ /// RepositoryId = "example-upstream-repo",
+ /// Description = "example upstream repository",
+ /// Format = "DOCKER",
+ /// });
+ ///
+ /// var my_repo = new Gcp.ArtifactRegistry.Repository("my-repo", new()
+ /// {
+ /// Location = "us-central1",
+ /// RepositoryId = "example-common-remote",
+ /// Description = "example remote common repository with docker upstream",
+ /// Format = "DOCKER",
+ /// Mode = "REMOTE_REPOSITORY",
+ /// RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs
+ /// {
+ /// Description = "pull-through cache of another Artifact Registry repository by URL",
+ /// CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs
+ /// {
+ /// Uri = "https://us-central1-docker.pkg.dev//example-upstream-repo",
+ /// },
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ### Artifact Registry Repository Remote Common Repository With Custom Upstream
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var project = Gcp.Organizations.GetProject.Invoke();
+ ///
+ /// var example_remote_secret = new Gcp.SecretManager.Secret("example-remote-secret", new()
+ /// {
+ /// SecretId = "example-secret",
+ /// Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs
+ /// {
+ /// Auto = null,
+ /// },
+ /// });
+ ///
+ /// var example_remote_secretVersion = new Gcp.SecretManager.SecretVersion("example-remote-secret_version", new()
+ /// {
+ /// Secret = example_remote_secret.Id,
+ /// SecretData = "remote-password",
+ /// });
+ ///
+ /// var secret_access = new Gcp.SecretManager.SecretIamMember("secret-access", new()
+ /// {
+ /// SecretId = example_remote_secret.Id,
+ /// Role = "roles/secretmanager.secretAccessor",
+ /// Member = $"serviceAccount:service-{project.Apply(getProjectResult => getProjectResult.Number)}@gcp-sa-artifactregistry.iam.gserviceaccount.com",
+ /// });
+ ///
+ /// var my_repo = new Gcp.ArtifactRegistry.Repository("my-repo", new()
+ /// {
+ /// Location = "us-central1",
+ /// RepositoryId = "example-docker-custom-remote",
+ /// Description = "example remote custom docker repository with credentials",
+ /// Format = "DOCKER",
+ /// Mode = "REMOTE_REPOSITORY",
+ /// RemoteRepositoryConfig = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigArgs
+ /// {
+ /// Description = "custom common docker remote with credentials",
+ /// DisableUpstreamValidation = true,
+ /// CommonRepository = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs
+ /// {
+ /// Uri = "https://registry-1.docker.io",
+ /// },
+ /// UpstreamCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs
+ /// {
+ /// UsernamePasswordCredentials = new Gcp.ArtifactRegistry.Inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs
+ /// {
+ /// Username = "remote-username",
+ /// PasswordSecretVersion = example_remote_secretVersion.Name,
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
///
/// ## Import
///
diff --git a/sdk/dotnet/AssuredWorkloads/Workload.cs b/sdk/dotnet/AssuredWorkloads/Workload.cs
index 1baa2a1896..4b92335244 100644
--- a/sdk/dotnet/AssuredWorkloads/Workload.cs
+++ b/sdk/dotnet/AssuredWorkloads/Workload.cs
@@ -193,7 +193,7 @@ public partial class Workload : global::Pulumi.CustomResource
public Output BillingAccount { get; private set; } = null!;
///
- /// Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT
+ /// Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT, IRS_1075
///
[Output("complianceRegime")]
public Output ComplianceRegime { get; private set; } = null!;
@@ -401,7 +401,7 @@ public sealed class WorkloadArgs : global::Pulumi.ResourceArgs
public Input? BillingAccount { get; set; }
///
- /// Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT
+ /// Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT, IRS_1075
///
[Input("complianceRegime", required: true)]
public Input ComplianceRegime { get; set; } = null!;
@@ -518,7 +518,7 @@ public sealed class WorkloadState : global::Pulumi.ResourceArgs
public Input? BillingAccount { get; set; }
///
- /// Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT
+ /// Required. Immutable. Compliance Regime associated with this workload. Possible values: COMPLIANCE_REGIME_UNSPECIFIED, IL4, CJIS, FEDRAMP_HIGH, FEDRAMP_MODERATE, US_REGIONAL_ACCESS, HIPAA, HITRUST, EU_REGIONS_AND_SUPPORT, CA_REGIONS_AND_SUPPORT, ITAR, AU_REGIONS_AND_US_SUPPORT, ASSURED_WORKLOADS_FOR_PARTNERS, ISR_REGIONS, ISR_REGIONS_AND_SUPPORT, CA_PROTECTED_B, IL5, IL2, JP_REGIONS_AND_SUPPORT, KSA_REGIONS_AND_SUPPORT_WITH_SOVEREIGNTY_CONTROLS, REGIONAL_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS, HEALTHCARE_AND_LIFE_SCIENCES_CONTROLS_WITH_US_SUPPORT, IRS_1075
///
[Input("complianceRegime")]
public Input? ComplianceRegime { get; set; }
diff --git a/sdk/dotnet/BackupDisasterRecovery/BackupPlan.cs b/sdk/dotnet/BackupDisasterRecovery/BackupPlan.cs
index 2c98a84541..335042c19b 100644
--- a/sdk/dotnet/BackupDisasterRecovery/BackupPlan.cs
+++ b/sdk/dotnet/BackupDisasterRecovery/BackupPlan.cs
@@ -25,7 +25,7 @@ namespace Pulumi.Gcp.BackupDisasterRecovery
/// var myBackupVault = new Gcp.BackupDisasterRecovery.BackupVault("my_backup_vault", new()
/// {
/// Location = "us-central1",
- /// BackupVaultId = "bv-bp-test",
+ /// BackupVaultId = "backup-vault-simple-test",
/// BackupMinimumEnforcedRetentionDuration = "100000s",
/// });
///
diff --git a/sdk/dotnet/BackupDisasterRecovery/BackupVault.cs b/sdk/dotnet/BackupDisasterRecovery/BackupVault.cs
index 7bd877a52b..b36fd7f0ae 100644
--- a/sdk/dotnet/BackupDisasterRecovery/BackupVault.cs
+++ b/sdk/dotnet/BackupDisasterRecovery/BackupVault.cs
@@ -10,6 +10,8 @@
namespace Pulumi.Gcp.BackupDisasterRecovery
{
///
+ /// Container to store and organize immutable and indelible backups.
+ ///
/// ## Example Usage
///
/// ### Backup Dr Backup Vault Full
@@ -28,16 +30,16 @@ namespace Pulumi.Gcp.BackupDisasterRecovery
/// BackupVaultId = "backup-vault-test",
/// Description = "This is a second backup vault built by Terraform.",
/// BackupMinimumEnforcedRetentionDuration = "100000s",
- /// Labels =
- /// {
- /// { "foo", "bar1" },
- /// { "bar", "baz1" },
- /// },
/// Annotations =
/// {
/// { "annotations1", "bar1" },
/// { "annotations2", "baz1" },
/// },
+ /// Labels =
+ /// {
+ /// { "foo", "bar1" },
+ /// { "bar", "baz1" },
+ /// },
/// ForceUpdate = true,
/// AccessRestriction = "WITHIN_ORGANIZATION",
/// IgnoreInactiveDatasources = true,
diff --git a/sdk/dotnet/BackupDisasterRecovery/GetBackup.cs b/sdk/dotnet/BackupDisasterRecovery/GetBackup.cs
new file mode 100644
index 0000000000..a840c421aa
--- /dev/null
+++ b/sdk/dotnet/BackupDisasterRecovery/GetBackup.cs
@@ -0,0 +1,102 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.BackupDisasterRecovery
+{
+ public static class GetBackup
+ {
+ public static Task InvokeAsync(GetBackupArgs args, InvokeOptions? options = null)
+ => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:backupdisasterrecovery/getBackup:getBackup", args ?? new GetBackupArgs(), options.WithDefaults());
+
+ public static Output Invoke(GetBackupInvokeArgs args, InvokeOptions? options = null)
+ => global::Pulumi.Deployment.Instance.Invoke("gcp:backupdisasterrecovery/getBackup:getBackup", args ?? new GetBackupInvokeArgs(), options.WithDefaults());
+ }
+
+
+ public sealed class GetBackupArgs : global::Pulumi.InvokeArgs
+ {
+ [Input("backupVaultId", required: true)]
+ public string BackupVaultId { get; set; } = null!;
+
+ [Input("dataSourceId", required: true)]
+ public string DataSourceId { get; set; } = null!;
+
+ [Input("location", required: true)]
+ public string Location { get; set; } = null!;
+
+ [Input("project", required: true)]
+ public string Project { get; set; } = null!;
+
+ public GetBackupArgs()
+ {
+ }
+ public static new GetBackupArgs Empty => new GetBackupArgs();
+ }
+
+ public sealed class GetBackupInvokeArgs : global::Pulumi.InvokeArgs
+ {
+ [Input("backupVaultId", required: true)]
+ public Input BackupVaultId { get; set; } = null!;
+
+ [Input("dataSourceId", required: true)]
+ public Input DataSourceId { get; set; } = null!;
+
+ [Input("location", required: true)]
+ public Input Location { get; set; } = null!;
+
+ [Input("project", required: true)]
+ public Input Project { get; set; } = null!;
+
+ public GetBackupInvokeArgs()
+ {
+ }
+ public static new GetBackupInvokeArgs Empty => new GetBackupInvokeArgs();
+ }
+
+
+ [OutputType]
+ public sealed class GetBackupResult
+ {
+ public readonly string BackupVaultId;
+ public readonly ImmutableArray Backups;
+ public readonly string DataSourceId;
+ ///
+ /// The provider-assigned unique ID for this managed resource.
+ ///
+ public readonly string Id;
+ public readonly string Location;
+ public readonly string Name;
+ public readonly string Project;
+
+ [OutputConstructor]
+ private GetBackupResult(
+ string backupVaultId,
+
+ ImmutableArray backups,
+
+ string dataSourceId,
+
+ string id,
+
+ string location,
+
+ string name,
+
+ string project)
+ {
+ BackupVaultId = backupVaultId;
+ Backups = backups;
+ DataSourceId = dataSourceId;
+ Id = id;
+ Location = location;
+ Name = name;
+ Project = project;
+ }
+ }
+}
diff --git a/sdk/dotnet/BackupDisasterRecovery/GetBackupVault.cs b/sdk/dotnet/BackupDisasterRecovery/GetBackupVault.cs
new file mode 100644
index 0000000000..2f874a8c75
--- /dev/null
+++ b/sdk/dotnet/BackupDisasterRecovery/GetBackupVault.cs
@@ -0,0 +1,248 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.BackupDisasterRecovery
+{
+ public static class GetBackupVault
+ {
+ ///
+ /// A Backup and DRBackupVault.
+ ///
+ /// ## Example Usage
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var my_backup_vault = Gcp.BackupDisasterRecovery.GetBackupVault.Invoke(new()
+ /// {
+ /// Location = "us-central1",
+ /// BackupVaultId = "bv-1",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ public static Task InvokeAsync(GetBackupVaultArgs args, InvokeOptions? options = null)
+ => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:backupdisasterrecovery/getBackupVault:getBackupVault", args ?? new GetBackupVaultArgs(), options.WithDefaults());
+
+ ///
+ /// A Backup and DRBackupVault.
+ ///
+ /// ## Example Usage
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var my_backup_vault = Gcp.BackupDisasterRecovery.GetBackupVault.Invoke(new()
+ /// {
+ /// Location = "us-central1",
+ /// BackupVaultId = "bv-1",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ public static Output Invoke(GetBackupVaultInvokeArgs args, InvokeOptions? options = null)
+ => global::Pulumi.Deployment.Instance.Invoke("gcp:backupdisasterrecovery/getBackupVault:getBackupVault", args ?? new GetBackupVaultInvokeArgs(), options.WithDefaults());
+ }
+
+
+ public sealed class GetBackupVaultArgs : global::Pulumi.InvokeArgs
+ {
+ ///
+ /// The id of Backup Vault resource.
+ ///
+ /// - - -
+ ///
+ [Input("backupVaultId", required: true)]
+ public string BackupVaultId { get; set; } = null!;
+
+ ///
+ /// The location in which the Backup Vault resource belongs.
+ ///
+ [Input("location", required: true)]
+ public string Location { get; set; } = null!;
+
+ ///
+ /// The project in which the resource belongs. If it
+ /// is not provided, the provider project is used.
+ ///
+ [Input("project")]
+ public string? Project { get; set; }
+
+ public GetBackupVaultArgs()
+ {
+ }
+ public static new GetBackupVaultArgs Empty => new GetBackupVaultArgs();
+ }
+
+ public sealed class GetBackupVaultInvokeArgs : global::Pulumi.InvokeArgs
+ {
+ ///
+ /// The id of Backup Vault resource.
+ ///
+ /// - - -
+ ///
+ [Input("backupVaultId", required: true)]
+ public Input BackupVaultId { get; set; } = null!;
+
+ ///
+ /// The location in which the Backup Vault resource belongs.
+ ///
+ [Input("location", required: true)]
+ public Input Location { get; set; } = null!;
+
+ ///
+ /// The project in which the resource belongs. If it
+ /// is not provided, the provider project is used.
+ ///
+ [Input("project")]
+ public Input? Project { get; set; }
+
+ public GetBackupVaultInvokeArgs()
+ {
+ }
+ public static new GetBackupVaultInvokeArgs Empty => new GetBackupVaultInvokeArgs();
+ }
+
+
+ [OutputType]
+ public sealed class GetBackupVaultResult
+ {
+ public readonly string AccessRestriction;
+ public readonly bool AllowMissing;
+ public readonly ImmutableDictionary Annotations;
+ public readonly string BackupCount;
+ public readonly string BackupMinimumEnforcedRetentionDuration;
+ public readonly string BackupVaultId;
+ public readonly string CreateTime;
+ public readonly bool Deletable;
+ public readonly string Description;
+ public readonly ImmutableDictionary EffectiveAnnotations;
+ public readonly ImmutableDictionary EffectiveLabels;
+ public readonly string EffectiveTime;
+ public readonly string Etag;
+ public readonly bool ForceDelete;
+ public readonly bool ForceUpdate;
+ ///
+ /// The provider-assigned unique ID for this managed resource.
+ ///
+ public readonly string Id;
+ public readonly bool IgnoreBackupPlanReferences;
+ public readonly bool IgnoreInactiveDatasources;
+ public readonly ImmutableDictionary Labels;
+ public readonly string Location;
+ public readonly string Name;
+ public readonly string? Project;
+ public readonly ImmutableDictionary PulumiLabels;
+ public readonly string ServiceAccount;
+ public readonly string State;
+ public readonly string TotalStoredBytes;
+ public readonly string Uid;
+ public readonly string UpdateTime;
+
+ [OutputConstructor]
+ private GetBackupVaultResult(
+ string accessRestriction,
+
+ bool allowMissing,
+
+ ImmutableDictionary annotations,
+
+ string backupCount,
+
+ string backupMinimumEnforcedRetentionDuration,
+
+ string backupVaultId,
+
+ string createTime,
+
+ bool deletable,
+
+ string description,
+
+ ImmutableDictionary effectiveAnnotations,
+
+ ImmutableDictionary effectiveLabels,
+
+ string effectiveTime,
+
+ string etag,
+
+ bool forceDelete,
+
+ bool forceUpdate,
+
+ string id,
+
+ bool ignoreBackupPlanReferences,
+
+ bool ignoreInactiveDatasources,
+
+ ImmutableDictionary labels,
+
+ string location,
+
+ string name,
+
+ string? project,
+
+ ImmutableDictionary pulumiLabels,
+
+ string serviceAccount,
+
+ string state,
+
+ string totalStoredBytes,
+
+ string uid,
+
+ string updateTime)
+ {
+ AccessRestriction = accessRestriction;
+ AllowMissing = allowMissing;
+ Annotations = annotations;
+ BackupCount = backupCount;
+ BackupMinimumEnforcedRetentionDuration = backupMinimumEnforcedRetentionDuration;
+ BackupVaultId = backupVaultId;
+ CreateTime = createTime;
+ Deletable = deletable;
+ Description = description;
+ EffectiveAnnotations = effectiveAnnotations;
+ EffectiveLabels = effectiveLabels;
+ EffectiveTime = effectiveTime;
+ Etag = etag;
+ ForceDelete = forceDelete;
+ ForceUpdate = forceUpdate;
+ Id = id;
+ IgnoreBackupPlanReferences = ignoreBackupPlanReferences;
+ IgnoreInactiveDatasources = ignoreInactiveDatasources;
+ Labels = labels;
+ Location = location;
+ Name = name;
+ Project = project;
+ PulumiLabels = pulumiLabels;
+ ServiceAccount = serviceAccount;
+ State = state;
+ TotalStoredBytes = totalStoredBytes;
+ Uid = uid;
+ UpdateTime = updateTime;
+ }
+ }
+}
diff --git a/sdk/dotnet/BackupDisasterRecovery/Outputs/GetBackupBackupResult.cs b/sdk/dotnet/BackupDisasterRecovery/Outputs/GetBackupBackupResult.cs
new file mode 100644
index 0000000000..3597f99f58
--- /dev/null
+++ b/sdk/dotnet/BackupDisasterRecovery/Outputs/GetBackupBackupResult.cs
@@ -0,0 +1,56 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.BackupDisasterRecovery.Outputs
+{
+
+ [OutputType]
+ public sealed class GetBackupBackupResult
+ {
+ ///
+ /// Id of the requesting object, Backup.
+ ///
+ public readonly string BackupId;
+ ///
+ /// Name of the Backup Vault associated with Backup.
+ ///
+ public readonly string BackupVaultId;
+ ///
+ /// Name of the Data Source associated with Backup.
+ ///
+ public readonly string DataSourceId;
+ ///
+ /// Location of the resource.
+ ///
+ public readonly string Location;
+ ///
+ /// Name of the resource.
+ ///
+ public readonly string Name;
+
+ [OutputConstructor]
+ private GetBackupBackupResult(
+ string backupId,
+
+ string backupVaultId,
+
+ string dataSourceId,
+
+ string location,
+
+ string name)
+ {
+ BackupId = backupId;
+ BackupVaultId = backupVaultId;
+ DataSourceId = dataSourceId;
+ Location = location;
+ Name = name;
+ }
+ }
+}
diff --git a/sdk/dotnet/BigQuery/AppProfile.cs b/sdk/dotnet/BigQuery/AppProfile.cs
index 7594f09bfb..9b58d1a1a0 100644
--- a/sdk/dotnet/BigQuery/AppProfile.cs
+++ b/sdk/dotnet/BigQuery/AppProfile.cs
@@ -297,6 +297,16 @@ public partial class AppProfile : global::Pulumi.CustomResource
[Output("project")]
public Output Project { get; private set; } = null!;
+ ///
+ /// Must be used with multi-cluster routing. If true, then this app profile will use row affinity sticky routing. With row
+ /// affinity, Bigtable will route single row key requests based on the row key, rather than randomly. Instead, each row key
+ /// will be assigned to a cluster by Cloud Bigtable, and will stick to that cluster. Choosing this option improves
+ /// read-your-writes consistency for most requests under most circumstances, without sacrificing availability. Consistency
+ /// is not guaranteed, as requests may still fail over between clusters in the event of errors or latency.
+ ///
+ [Output("rowAffinity")]
+ public Output RowAffinity { get; private set; } = null!;
+
///
/// Use a single-cluster routing policy.
/// Structure is documented below.
@@ -419,6 +429,16 @@ public InputList MultiClusterRoutingClusterIds
[Input("project")]
public Input? Project { get; set; }
+ ///
+ /// Must be used with multi-cluster routing. If true, then this app profile will use row affinity sticky routing. With row
+ /// affinity, Bigtable will route single row key requests based on the row key, rather than randomly. Instead, each row key
+ /// will be assigned to a cluster by Cloud Bigtable, and will stick to that cluster. Choosing this option improves
+ /// read-your-writes consistency for most requests under most circumstances, without sacrificing availability. Consistency
+ /// is not guaranteed, as requests may still fail over between clusters in the event of errors or latency.
+ ///
+ [Input("rowAffinity")]
+ public Input? RowAffinity { get; set; }
+
///
/// Use a single-cluster routing policy.
/// Structure is documented below.
@@ -509,6 +529,16 @@ public InputList MultiClusterRoutingClusterIds
[Input("project")]
public Input? Project { get; set; }
+ ///
+ /// Must be used with multi-cluster routing. If true, then this app profile will use row affinity sticky routing. With row
+ /// affinity, Bigtable will route single row key requests based on the row key, rather than randomly. Instead, each row key
+ /// will be assigned to a cluster by Cloud Bigtable, and will stick to that cluster. Choosing this option improves
+ /// read-your-writes consistency for most requests under most circumstances, without sacrificing availability. Consistency
+ /// is not guaranteed, as requests may still fail over between clusters in the event of errors or latency.
+ ///
+ [Input("rowAffinity")]
+ public Input? RowAffinity { get; set; }
+
///
/// Use a single-cluster routing policy.
/// Structure is documented below.
diff --git a/sdk/dotnet/Billing/Inputs/BudgetBudgetFilterArgs.cs b/sdk/dotnet/Billing/Inputs/BudgetBudgetFilterArgs.cs
index bff810ab59..44f7af779a 100644
--- a/sdk/dotnet/Billing/Inputs/BudgetBudgetFilterArgs.cs
+++ b/sdk/dotnet/Billing/Inputs/BudgetBudgetFilterArgs.cs
@@ -29,7 +29,7 @@ public sealed class BudgetBudgetFilterArgs : global::Pulumi.ResourceArgs
/// Optional. If creditTypesTreatment is INCLUDE_SPECIFIED_CREDITS,
/// this is a list of credit types to be subtracted from gross cost to determine the spend for threshold calculations. See a list of acceptable credit type values.
/// If creditTypesTreatment is not INCLUDE_SPECIFIED_CREDITS, this field must be empty.
- /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.
+ /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an empty array in the config.
///
public InputList CreditTypes
{
@@ -126,7 +126,7 @@ public InputList Services
/// the parent account, usage from the parent account will be included.
/// If the field is omitted, the report will include usage from the parent
/// account and all subaccounts, if they exist.
- /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.
+ /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an empty array in the config.
///
public InputList Subaccounts
{
diff --git a/sdk/dotnet/Billing/Inputs/BudgetBudgetFilterGetArgs.cs b/sdk/dotnet/Billing/Inputs/BudgetBudgetFilterGetArgs.cs
index 2c178382cf..2ec30d71d1 100644
--- a/sdk/dotnet/Billing/Inputs/BudgetBudgetFilterGetArgs.cs
+++ b/sdk/dotnet/Billing/Inputs/BudgetBudgetFilterGetArgs.cs
@@ -29,7 +29,7 @@ public sealed class BudgetBudgetFilterGetArgs : global::Pulumi.ResourceArgs
/// Optional. If creditTypesTreatment is INCLUDE_SPECIFIED_CREDITS,
/// this is a list of credit types to be subtracted from gross cost to determine the spend for threshold calculations. See a list of acceptable credit type values.
/// If creditTypesTreatment is not INCLUDE_SPECIFIED_CREDITS, this field must be empty.
- /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.
+ /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an empty array in the config.
///
public InputList CreditTypes
{
@@ -126,7 +126,7 @@ public InputList Services
/// the parent account, usage from the parent account will be included.
/// If the field is omitted, the report will include usage from the parent
/// account and all subaccounts, if they exist.
- /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.
+ /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an empty array in the config.
///
public InputList Subaccounts
{
diff --git a/sdk/dotnet/Billing/Outputs/BudgetBudgetFilter.cs b/sdk/dotnet/Billing/Outputs/BudgetBudgetFilter.cs
index df4448e3f6..c1d49eee93 100644
--- a/sdk/dotnet/Billing/Outputs/BudgetBudgetFilter.cs
+++ b/sdk/dotnet/Billing/Outputs/BudgetBudgetFilter.cs
@@ -25,7 +25,7 @@ public sealed class BudgetBudgetFilter
/// Optional. If creditTypesTreatment is INCLUDE_SPECIFIED_CREDITS,
/// this is a list of credit types to be subtracted from gross cost to determine the spend for threshold calculations. See a list of acceptable credit type values.
/// If creditTypesTreatment is not INCLUDE_SPECIFIED_CREDITS, this field must be empty.
- /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.
+ /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an empty array in the config.
///
public readonly ImmutableArray CreditTypes;
///
@@ -78,7 +78,7 @@ public sealed class BudgetBudgetFilter
/// the parent account, usage from the parent account will be included.
/// If the field is omitted, the report will include usage from the parent
/// account and all subaccounts, if they exist.
- /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.
+ /// **Note:** If the field has a value in the config and needs to be removed, the field has to be an empty array in the config.
///
public readonly ImmutableArray Subaccounts;
diff --git a/sdk/dotnet/CertificateAuthority/Inputs/AuthorityConfigSubjectKeyIdArgs.cs b/sdk/dotnet/CertificateAuthority/Inputs/AuthorityConfigSubjectKeyIdArgs.cs
index fc4a7e973a..e22e6962fc 100644
--- a/sdk/dotnet/CertificateAuthority/Inputs/AuthorityConfigSubjectKeyIdArgs.cs
+++ b/sdk/dotnet/CertificateAuthority/Inputs/AuthorityConfigSubjectKeyIdArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Inputs
public sealed class AuthorityConfigSubjectKeyIdArgs : global::Pulumi.ResourceArgs
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
/// <a name="nested_x509_config"></a>The `x509_config` block supports:
///
diff --git a/sdk/dotnet/CertificateAuthority/Inputs/AuthorityConfigSubjectKeyIdGetArgs.cs b/sdk/dotnet/CertificateAuthority/Inputs/AuthorityConfigSubjectKeyIdGetArgs.cs
index 37a4b90dea..f50c011f64 100644
--- a/sdk/dotnet/CertificateAuthority/Inputs/AuthorityConfigSubjectKeyIdGetArgs.cs
+++ b/sdk/dotnet/CertificateAuthority/Inputs/AuthorityConfigSubjectKeyIdGetArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Inputs
public sealed class AuthorityConfigSubjectKeyIdGetArgs : global::Pulumi.ResourceArgs
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
/// <a name="nested_x509_config"></a>The `x509_config` block supports:
///
diff --git a/sdk/dotnet/CertificateAuthority/Inputs/CertificateCertificateDescriptionSubjectKeyIdArgs.cs b/sdk/dotnet/CertificateAuthority/Inputs/CertificateCertificateDescriptionSubjectKeyIdArgs.cs
index c0f8efa59f..e127dd8358 100644
--- a/sdk/dotnet/CertificateAuthority/Inputs/CertificateCertificateDescriptionSubjectKeyIdArgs.cs
+++ b/sdk/dotnet/CertificateAuthority/Inputs/CertificateCertificateDescriptionSubjectKeyIdArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Inputs
public sealed class CertificateCertificateDescriptionSubjectKeyIdArgs : global::Pulumi.ResourceArgs
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
[Input("keyId")]
public Input? KeyId { get; set; }
diff --git a/sdk/dotnet/CertificateAuthority/Inputs/CertificateCertificateDescriptionSubjectKeyIdGetArgs.cs b/sdk/dotnet/CertificateAuthority/Inputs/CertificateCertificateDescriptionSubjectKeyIdGetArgs.cs
index 74fec1744e..a6880b6166 100644
--- a/sdk/dotnet/CertificateAuthority/Inputs/CertificateCertificateDescriptionSubjectKeyIdGetArgs.cs
+++ b/sdk/dotnet/CertificateAuthority/Inputs/CertificateCertificateDescriptionSubjectKeyIdGetArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Inputs
public sealed class CertificateCertificateDescriptionSubjectKeyIdGetArgs : global::Pulumi.ResourceArgs
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
[Input("keyId")]
public Input? KeyId { get; set; }
diff --git a/sdk/dotnet/CertificateAuthority/Inputs/CertificateConfigSubjectKeyIdArgs.cs b/sdk/dotnet/CertificateAuthority/Inputs/CertificateConfigSubjectKeyIdArgs.cs
index b91e0d510e..c91ee7eac2 100644
--- a/sdk/dotnet/CertificateAuthority/Inputs/CertificateConfigSubjectKeyIdArgs.cs
+++ b/sdk/dotnet/CertificateAuthority/Inputs/CertificateConfigSubjectKeyIdArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Inputs
public sealed class CertificateConfigSubjectKeyIdArgs : global::Pulumi.ResourceArgs
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
[Input("keyId")]
public Input? KeyId { get; set; }
diff --git a/sdk/dotnet/CertificateAuthority/Inputs/CertificateConfigSubjectKeyIdGetArgs.cs b/sdk/dotnet/CertificateAuthority/Inputs/CertificateConfigSubjectKeyIdGetArgs.cs
index 56d2e38e43..0590f6fe26 100644
--- a/sdk/dotnet/CertificateAuthority/Inputs/CertificateConfigSubjectKeyIdGetArgs.cs
+++ b/sdk/dotnet/CertificateAuthority/Inputs/CertificateConfigSubjectKeyIdGetArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Inputs
public sealed class CertificateConfigSubjectKeyIdGetArgs : global::Pulumi.ResourceArgs
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
[Input("keyId")]
public Input? KeyId { get; set; }
diff --git a/sdk/dotnet/CertificateAuthority/Outputs/AuthorityConfigSubjectKeyId.cs b/sdk/dotnet/CertificateAuthority/Outputs/AuthorityConfigSubjectKeyId.cs
index 052289d1ee..03b2895f27 100644
--- a/sdk/dotnet/CertificateAuthority/Outputs/AuthorityConfigSubjectKeyId.cs
+++ b/sdk/dotnet/CertificateAuthority/Outputs/AuthorityConfigSubjectKeyId.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Outputs
public sealed class AuthorityConfigSubjectKeyId
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
/// <a name="nested_x509_config"></a>The `x509_config` block supports:
///
diff --git a/sdk/dotnet/CertificateAuthority/Outputs/CertificateCertificateDescriptionSubjectKeyId.cs b/sdk/dotnet/CertificateAuthority/Outputs/CertificateCertificateDescriptionSubjectKeyId.cs
index b6ab58ef1a..12189d628e 100644
--- a/sdk/dotnet/CertificateAuthority/Outputs/CertificateCertificateDescriptionSubjectKeyId.cs
+++ b/sdk/dotnet/CertificateAuthority/Outputs/CertificateCertificateDescriptionSubjectKeyId.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Outputs
public sealed class CertificateCertificateDescriptionSubjectKeyId
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
public readonly string? KeyId;
diff --git a/sdk/dotnet/CertificateAuthority/Outputs/CertificateConfigSubjectKeyId.cs b/sdk/dotnet/CertificateAuthority/Outputs/CertificateConfigSubjectKeyId.cs
index 37093f03f2..67040f5f0c 100644
--- a/sdk/dotnet/CertificateAuthority/Outputs/CertificateConfigSubjectKeyId.cs
+++ b/sdk/dotnet/CertificateAuthority/Outputs/CertificateConfigSubjectKeyId.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Outputs
public sealed class CertificateConfigSubjectKeyId
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
public readonly string? KeyId;
diff --git a/sdk/dotnet/CertificateAuthority/Outputs/GetAuthorityConfigSubjectKeyIdResult.cs b/sdk/dotnet/CertificateAuthority/Outputs/GetAuthorityConfigSubjectKeyIdResult.cs
index 5daa326acb..af3785366d 100644
--- a/sdk/dotnet/CertificateAuthority/Outputs/GetAuthorityConfigSubjectKeyIdResult.cs
+++ b/sdk/dotnet/CertificateAuthority/Outputs/GetAuthorityConfigSubjectKeyIdResult.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.CertificateAuthority.Outputs
public sealed class GetAuthorityConfigSubjectKeyIdResult
{
///
- /// The value of the KeyId in lowercase hexidecimal.
+ /// The value of the KeyId in lowercase hexadecimal.
///
public readonly string KeyId;
diff --git a/sdk/dotnet/CloudBuild/Inputs/WorkerPoolPrivateServiceConnectArgs.cs b/sdk/dotnet/CloudBuild/Inputs/WorkerPoolPrivateServiceConnectArgs.cs
new file mode 100644
index 0000000000..edc29d3db0
--- /dev/null
+++ b/sdk/dotnet/CloudBuild/Inputs/WorkerPoolPrivateServiceConnectArgs.cs
@@ -0,0 +1,32 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudBuild.Inputs
+{
+
+ public sealed class WorkerPoolPrivateServiceConnectArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Required. Immutable. The network attachment that the worker network interface is connected to. Must be in the format `projects/{project}/regions/{region}/networkAttachments/{networkAttachment}`. The region of network attachment must be the same as the worker pool. See [Network Attachments](https://cloud.google.com/vpc/docs/about-network-attachments)
+ ///
+ [Input("networkAttachment", required: true)]
+ public Input NetworkAttachment { get; set; } = null!;
+
+ ///
+ /// Immutable. Route all traffic through PSC interface. Enable this if you want full control of traffic in the private pool. Configure Cloud NAT for the subnet of network attachment if you need to access public Internet. If false, Only route private IPs, e.g. 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16 through PSC interface.
+ ///
+ [Input("routeAllTraffic")]
+ public Input? RouteAllTraffic { get; set; }
+
+ public WorkerPoolPrivateServiceConnectArgs()
+ {
+ }
+ public static new WorkerPoolPrivateServiceConnectArgs Empty => new WorkerPoolPrivateServiceConnectArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudBuild/Inputs/WorkerPoolPrivateServiceConnectGetArgs.cs b/sdk/dotnet/CloudBuild/Inputs/WorkerPoolPrivateServiceConnectGetArgs.cs
new file mode 100644
index 0000000000..862b8e76bb
--- /dev/null
+++ b/sdk/dotnet/CloudBuild/Inputs/WorkerPoolPrivateServiceConnectGetArgs.cs
@@ -0,0 +1,32 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudBuild.Inputs
+{
+
+ public sealed class WorkerPoolPrivateServiceConnectGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Required. Immutable. The network attachment that the worker network interface is connected to. Must be in the format `projects/{project}/regions/{region}/networkAttachments/{networkAttachment}`. The region of network attachment must be the same as the worker pool. See [Network Attachments](https://cloud.google.com/vpc/docs/about-network-attachments)
+ ///
+ [Input("networkAttachment", required: true)]
+ public Input NetworkAttachment { get; set; } = null!;
+
+ ///
+ /// Immutable. Route all traffic through PSC interface. Enable this if you want full control of traffic in the private pool. Configure Cloud NAT for the subnet of network attachment if you need to access public Internet. If false, Only route private IPs, e.g. 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16 through PSC interface.
+ ///
+ [Input("routeAllTraffic")]
+ public Input? RouteAllTraffic { get; set; }
+
+ public WorkerPoolPrivateServiceConnectGetArgs()
+ {
+ }
+ public static new WorkerPoolPrivateServiceConnectGetArgs Empty => new WorkerPoolPrivateServiceConnectGetArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudBuild/Outputs/WorkerPoolPrivateServiceConnect.cs b/sdk/dotnet/CloudBuild/Outputs/WorkerPoolPrivateServiceConnect.cs
new file mode 100644
index 0000000000..e708a3d3bb
--- /dev/null
+++ b/sdk/dotnet/CloudBuild/Outputs/WorkerPoolPrivateServiceConnect.cs
@@ -0,0 +1,35 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudBuild.Outputs
+{
+
+ [OutputType]
+ public sealed class WorkerPoolPrivateServiceConnect
+ {
+ ///
+ /// Required. Immutable. The network attachment that the worker network interface is connected to. Must be in the format `projects/{project}/regions/{region}/networkAttachments/{networkAttachment}`. The region of network attachment must be the same as the worker pool. See [Network Attachments](https://cloud.google.com/vpc/docs/about-network-attachments)
+ ///
+ public readonly string NetworkAttachment;
+ ///
+ /// Immutable. Route all traffic through PSC interface. Enable this if you want full control of traffic in the private pool. Configure Cloud NAT for the subnet of network attachment if you need to access public Internet. If false, Only route private IPs, e.g. 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16 through PSC interface.
+ ///
+ public readonly bool? RouteAllTraffic;
+
+ [OutputConstructor]
+ private WorkerPoolPrivateServiceConnect(
+ string networkAttachment,
+
+ bool? routeAllTraffic)
+ {
+ NetworkAttachment = networkAttachment;
+ RouteAllTraffic = routeAllTraffic;
+ }
+ }
+}
diff --git a/sdk/dotnet/CloudBuild/WorkerPool.cs b/sdk/dotnet/CloudBuild/WorkerPool.cs
index 25163be52e..57f009ce8f 100644
--- a/sdk/dotnet/CloudBuild/WorkerPool.cs
+++ b/sdk/dotnet/CloudBuild/WorkerPool.cs
@@ -193,6 +193,12 @@ public partial class WorkerPool : global::Pulumi.CustomResource
[Output("networkConfig")]
public Output NetworkConfig { get; private set; } = null!;
+ ///
+ /// Private Service Connect configuration for the pool.
+ ///
+ [Output("privateServiceConnect")]
+ public Output PrivateServiceConnect { get; private set; } = null!;
+
///
/// The project for the resource
///
@@ -310,6 +316,12 @@ public InputMap Annotations
[Input("networkConfig")]
public Input? NetworkConfig { get; set; }
+ ///
+ /// Private Service Connect configuration for the pool.
+ ///
+ [Input("privateServiceConnect")]
+ public Input? PrivateServiceConnect { get; set; }
+
///
/// The project for the resource
///
@@ -391,6 +403,12 @@ public InputMap EffectiveAnnotations
[Input("networkConfig")]
public Input? NetworkConfig { get; set; }
+ ///
+ /// Private Service Connect configuration for the pool.
+ ///
+ [Input("privateServiceConnect")]
+ public Input? PrivateServiceConnect { get; set; }
+
///
/// The project for the resource
///
diff --git a/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs.cs
index 1c20b48d36..767d872bff 100644
--- a/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs.cs
+++ b/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs.cs
@@ -30,6 +30,12 @@ public sealed class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConf
[Input("podSelectorLabel")]
public Input? PodSelectorLabel { get; set; }
+ ///
+ /// Optional. Route destinations allow configuring the Gateway API HTTPRoute to be deployed to additional clusters. This option is available for multi-cluster service mesh set ups that require the route to exist in the clusters that call the service. If unspecified, the HTTPRoute will only be deployed to the Target cluster.
+ ///
+ [Input("routeDestinations")]
+ public Input? RouteDestinations { get; set; }
+
///
/// Optional. The time to wait for route updates to propagate. The maximum configurable time is 3 hours, in seconds format. If unspecified, there is no wait time.
///
diff --git a/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshGetArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshGetArgs.cs
index 70dedba52c..a96a45feb1 100644
--- a/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshGetArgs.cs
+++ b/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshGetArgs.cs
@@ -30,6 +30,12 @@ public sealed class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConf
[Input("podSelectorLabel")]
public Input? PodSelectorLabel { get; set; }
+ ///
+ /// Optional. Route destinations allow configuring the Gateway API HTTPRoute to be deployed to additional clusters. This option is available for multi-cluster service mesh set ups that require the route to exist in the clusters that call the service. If unspecified, the HTTPRoute will only be deployed to the Target cluster.
+ ///
+ [Input("routeDestinations")]
+ public Input? RouteDestinations { get; set; }
+
///
/// Optional. The time to wait for route updates to propagate. The maximum configurable time is 3 hours, in seconds format. If unspecified, there is no wait time.
///
diff --git a/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs.cs
new file mode 100644
index 0000000000..0b3ab3aac8
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs.cs
@@ -0,0 +1,38 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Inputs
+{
+
+ public sealed class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("destinationIds", required: true)]
+ private InputList? _destinationIds;
+
+ ///
+ /// Required. The clusters where the Gateway API HTTPRoute resource will be deployed to. Valid entries include the associated entities IDs configured in the Target resource and "@self" to include the Target cluster.
+ ///
+ public InputList DestinationIds
+ {
+ get => _destinationIds ?? (_destinationIds = new InputList());
+ set => _destinationIds = value;
+ }
+
+ ///
+ /// Optional. Whether to propagate the Kubernetes Service to the route destination clusters. The Service will always be deployed to the Target cluster even if the HTTPRoute is not. This option may be used to facilitiate successful DNS lookup in the route destination clusters. Can only be set to true if destinations are specified.
+ ///
+ [Input("propagateService")]
+ public Input? PropagateService { get; set; }
+
+ public DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs()
+ {
+ }
+ public static new DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs Empty => new DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsGetArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsGetArgs.cs
new file mode 100644
index 0000000000..09c8116255
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsGetArgs.cs
@@ -0,0 +1,38 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Inputs
+{
+
+ public sealed class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("destinationIds", required: true)]
+ private InputList? _destinationIds;
+
+ ///
+ /// Required. The clusters where the Gateway API HTTPRoute resource will be deployed to. Valid entries include the associated entities IDs configured in the Target resource and "@self" to include the Target cluster.
+ ///
+ public InputList DestinationIds
+ {
+ get => _destinationIds ?? (_destinationIds = new InputList());
+ set => _destinationIds = value;
+ }
+
+ ///
+ /// Optional. Whether to propagate the Kubernetes Service to the route destination clusters. The Service will always be deployed to the Target cluster even if the HTTPRoute is not. This option may be used to facilitiate successful DNS lookup in the route destination clusters. Can only be set to true if destinations are specified.
+ ///
+ [Input("propagateService")]
+ public Input? PropagateService { get; set; }
+
+ public DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsGetArgs()
+ {
+ }
+ public static new DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsGetArgs Empty => new DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsGetArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityAnthosClusterArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityAnthosClusterArgs.cs
new file mode 100644
index 0000000000..0f934813bf
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityAnthosClusterArgs.cs
@@ -0,0 +1,26 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Inputs
+{
+
+ public sealed class TargetAssociatedEntityAnthosClusterArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`.
+ ///
+ [Input("membership")]
+ public Input? Membership { get; set; }
+
+ public TargetAssociatedEntityAnthosClusterArgs()
+ {
+ }
+ public static new TargetAssociatedEntityAnthosClusterArgs Empty => new TargetAssociatedEntityAnthosClusterArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityAnthosClusterGetArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityAnthosClusterGetArgs.cs
new file mode 100644
index 0000000000..cd4cb753f4
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityAnthosClusterGetArgs.cs
@@ -0,0 +1,26 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Inputs
+{
+
+ public sealed class TargetAssociatedEntityAnthosClusterGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`.
+ ///
+ [Input("membership")]
+ public Input? Membership { get; set; }
+
+ public TargetAssociatedEntityAnthosClusterGetArgs()
+ {
+ }
+ public static new TargetAssociatedEntityAnthosClusterGetArgs Empty => new TargetAssociatedEntityAnthosClusterGetArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityArgs.cs
new file mode 100644
index 0000000000..a7a6b3c5fb
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityArgs.cs
@@ -0,0 +1,50 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Inputs
+{
+
+ public sealed class TargetAssociatedEntityArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("anthosClusters")]
+ private InputList? _anthosClusters;
+
+ ///
+ /// Optional. Information specifying Anthos clusters as associated entities.
+ ///
+ public InputList AnthosClusters
+ {
+ get => _anthosClusters ?? (_anthosClusters = new InputList());
+ set => _anthosClusters = value;
+ }
+
+ ///
+ /// The name for the key in the map for which this object is mapped to in the API
+ ///
+ [Input("entityId", required: true)]
+ public Input EntityId { get; set; } = null!;
+
+ [Input("gkeClusters")]
+ private InputList? _gkeClusters;
+
+ ///
+ /// Optional. Information specifying GKE clusters as associated entities.
+ ///
+ public InputList GkeClusters
+ {
+ get => _gkeClusters ?? (_gkeClusters = new InputList());
+ set => _gkeClusters = value;
+ }
+
+ public TargetAssociatedEntityArgs()
+ {
+ }
+ public static new TargetAssociatedEntityArgs Empty => new TargetAssociatedEntityArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityGetArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityGetArgs.cs
new file mode 100644
index 0000000000..a276db856b
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityGetArgs.cs
@@ -0,0 +1,50 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Inputs
+{
+
+ public sealed class TargetAssociatedEntityGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("anthosClusters")]
+ private InputList? _anthosClusters;
+
+ ///
+ /// Optional. Information specifying Anthos clusters as associated entities.
+ ///
+ public InputList AnthosClusters
+ {
+ get => _anthosClusters ?? (_anthosClusters = new InputList());
+ set => _anthosClusters = value;
+ }
+
+ ///
+ /// The name for the key in the map for which this object is mapped to in the API
+ ///
+ [Input("entityId", required: true)]
+ public Input EntityId { get; set; } = null!;
+
+ [Input("gkeClusters")]
+ private InputList? _gkeClusters;
+
+ ///
+ /// Optional. Information specifying GKE clusters as associated entities.
+ ///
+ public InputList GkeClusters
+ {
+ get => _gkeClusters ?? (_gkeClusters = new InputList());
+ set => _gkeClusters = value;
+ }
+
+ public TargetAssociatedEntityGetArgs()
+ {
+ }
+ public static new TargetAssociatedEntityGetArgs Empty => new TargetAssociatedEntityGetArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityGkeClusterArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityGkeClusterArgs.cs
new file mode 100644
index 0000000000..f2ccd9aa27
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityGkeClusterArgs.cs
@@ -0,0 +1,38 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Inputs
+{
+
+ public sealed class TargetAssociatedEntityGkeClusterArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`.
+ ///
+ [Input("cluster")]
+ public Input? Cluster { get; set; }
+
+ ///
+ /// Optional. If true, `cluster` is accessed using the private IP address of the control plane endpoint. Otherwise, the default IP address of the control plane endpoint is used. The default IP address is the private IP address for clusters with private control-plane endpoints and the public IP address otherwise. Only specify this option when `cluster` is a [private GKE cluster](https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept).
+ ///
+ [Input("internalIp")]
+ public Input? InternalIp { get; set; }
+
+ ///
+ /// Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server.
+ ///
+ [Input("proxyUrl")]
+ public Input? ProxyUrl { get; set; }
+
+ public TargetAssociatedEntityGkeClusterArgs()
+ {
+ }
+ public static new TargetAssociatedEntityGkeClusterArgs Empty => new TargetAssociatedEntityGkeClusterArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityGkeClusterGetArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityGkeClusterGetArgs.cs
new file mode 100644
index 0000000000..fa26579f76
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Inputs/TargetAssociatedEntityGkeClusterGetArgs.cs
@@ -0,0 +1,38 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Inputs
+{
+
+ public sealed class TargetAssociatedEntityGkeClusterGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`.
+ ///
+ [Input("cluster")]
+ public Input? Cluster { get; set; }
+
+ ///
+ /// Optional. If true, `cluster` is accessed using the private IP address of the control plane endpoint. Otherwise, the default IP address of the control plane endpoint is used. The default IP address is the private IP address for clusters with private control-plane endpoints and the public IP address otherwise. Only specify this option when `cluster` is a [private GKE cluster](https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept).
+ ///
+ [Input("internalIp")]
+ public Input? InternalIp { get; set; }
+
+ ///
+ /// Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server.
+ ///
+ [Input("proxyUrl")]
+ public Input? ProxyUrl { get; set; }
+
+ public TargetAssociatedEntityGkeClusterGetArgs()
+ {
+ }
+ public static new TargetAssociatedEntityGkeClusterGetArgs Empty => new TargetAssociatedEntityGkeClusterGetArgs();
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh.cs b/sdk/dotnet/CloudDeploy/Outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh.cs
index c4bdd25b3d..a0eba7e59e 100644
--- a/sdk/dotnet/CloudDeploy/Outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh.cs
+++ b/sdk/dotnet/CloudDeploy/Outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh.cs
@@ -26,6 +26,10 @@ public sealed class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConf
///
public readonly string? PodSelectorLabel;
///
+ /// Optional. Route destinations allow configuring the Gateway API HTTPRoute to be deployed to additional clusters. This option is available for multi-cluster service mesh set ups that require the route to exist in the clusters that call the service. If unspecified, the HTTPRoute will only be deployed to the Target cluster.
+ ///
+ public readonly Outputs.DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations? RouteDestinations;
+ ///
/// Optional. The time to wait for route updates to propagate. The maximum configurable time is 3 hours, in seconds format. If unspecified, there is no wait time.
///
public readonly string? RouteUpdateWaitTime;
@@ -46,6 +50,8 @@ private DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetes
string? podSelectorLabel,
+ Outputs.DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations? routeDestinations,
+
string? routeUpdateWaitTime,
string service,
@@ -55,6 +61,7 @@ private DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetes
Deployment = deployment;
HttpRoute = httpRoute;
PodSelectorLabel = podSelectorLabel;
+ RouteDestinations = routeDestinations;
RouteUpdateWaitTime = routeUpdateWaitTime;
Service = service;
StableCutbackDuration = stableCutbackDuration;
diff --git a/sdk/dotnet/CloudDeploy/Outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations.cs b/sdk/dotnet/CloudDeploy/Outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations.cs
new file mode 100644
index 0000000000..a86d8efcd4
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations.cs
@@ -0,0 +1,35 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Outputs
+{
+
+ [OutputType]
+ public sealed class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations
+ {
+ ///
+ /// Required. The clusters where the Gateway API HTTPRoute resource will be deployed to. Valid entries include the associated entities IDs configured in the Target resource and "@self" to include the Target cluster.
+ ///
+ public readonly ImmutableArray DestinationIds;
+ ///
+ /// Optional. Whether to propagate the Kubernetes Service to the route destination clusters. The Service will always be deployed to the Target cluster even if the HTTPRoute is not. This option may be used to facilitiate successful DNS lookup in the route destination clusters. Can only be set to true if destinations are specified.
+ ///
+ public readonly bool? PropagateService;
+
+ [OutputConstructor]
+ private DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations(
+ ImmutableArray destinationIds,
+
+ bool? propagateService)
+ {
+ DestinationIds = destinationIds;
+ PropagateService = propagateService;
+ }
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Outputs/TargetAssociatedEntity.cs b/sdk/dotnet/CloudDeploy/Outputs/TargetAssociatedEntity.cs
new file mode 100644
index 0000000000..9f71724791
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Outputs/TargetAssociatedEntity.cs
@@ -0,0 +1,42 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Outputs
+{
+
+ [OutputType]
+ public sealed class TargetAssociatedEntity
+ {
+ ///
+ /// Optional. Information specifying Anthos clusters as associated entities.
+ ///
+ public readonly ImmutableArray AnthosClusters;
+ ///
+ /// The name for the key in the map for which this object is mapped to in the API
+ ///
+ public readonly string EntityId;
+ ///
+ /// Optional. Information specifying GKE clusters as associated entities.
+ ///
+ public readonly ImmutableArray GkeClusters;
+
+ [OutputConstructor]
+ private TargetAssociatedEntity(
+ ImmutableArray anthosClusters,
+
+ string entityId,
+
+ ImmutableArray gkeClusters)
+ {
+ AnthosClusters = anthosClusters;
+ EntityId = entityId;
+ GkeClusters = gkeClusters;
+ }
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Outputs/TargetAssociatedEntityAnthosCluster.cs b/sdk/dotnet/CloudDeploy/Outputs/TargetAssociatedEntityAnthosCluster.cs
new file mode 100644
index 0000000000..ab67044412
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Outputs/TargetAssociatedEntityAnthosCluster.cs
@@ -0,0 +1,27 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Outputs
+{
+
+ [OutputType]
+ public sealed class TargetAssociatedEntityAnthosCluster
+ {
+ ///
+ /// Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`.
+ ///
+ public readonly string? Membership;
+
+ [OutputConstructor]
+ private TargetAssociatedEntityAnthosCluster(string? membership)
+ {
+ Membership = membership;
+ }
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Outputs/TargetAssociatedEntityGkeCluster.cs b/sdk/dotnet/CloudDeploy/Outputs/TargetAssociatedEntityGkeCluster.cs
new file mode 100644
index 0000000000..bbf7a29e09
--- /dev/null
+++ b/sdk/dotnet/CloudDeploy/Outputs/TargetAssociatedEntityGkeCluster.cs
@@ -0,0 +1,42 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.CloudDeploy.Outputs
+{
+
+ [OutputType]
+ public sealed class TargetAssociatedEntityGkeCluster
+ {
+ ///
+ /// Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`.
+ ///
+ public readonly string? Cluster;
+ ///
+ /// Optional. If true, `cluster` is accessed using the private IP address of the control plane endpoint. Otherwise, the default IP address of the control plane endpoint is used. The default IP address is the private IP address for clusters with private control-plane endpoints and the public IP address otherwise. Only specify this option when `cluster` is a [private GKE cluster](https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept).
+ ///
+ public readonly bool? InternalIp;
+ ///
+ /// Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server.
+ ///
+ public readonly string? ProxyUrl;
+
+ [OutputConstructor]
+ private TargetAssociatedEntityGkeCluster(
+ string? cluster,
+
+ bool? internalIp,
+
+ string? proxyUrl)
+ {
+ Cluster = cluster;
+ InternalIp = internalIp;
+ ProxyUrl = proxyUrl;
+ }
+ }
+}
diff --git a/sdk/dotnet/CloudDeploy/Target.cs b/sdk/dotnet/CloudDeploy/Target.cs
index 8f46a1a0ec..902bf1ecb0 100644
--- a/sdk/dotnet/CloudDeploy/Target.cs
+++ b/sdk/dotnet/CloudDeploy/Target.cs
@@ -196,6 +196,12 @@ public partial class Target : global::Pulumi.CustomResource
[Output("anthosCluster")]
public Output AnthosCluster { get; private set; } = null!;
+ ///
+ /// Optional. Map of entity IDs to their associated entities. Associated entities allows specifying places other than the deployment target for specific features. For example, the Gateway API canary can be configured to deploy the HTTPRoute to a different cluster(s) than the deployment cluster using associated entities. An entity ID must consist of lower-case letters, numbers, and hyphens, start with a letter and end with a letter or a number, and have a max length of 63 characters. In other words, it must match the following regex: `^a-z?$`.
+ ///
+ [Output("associatedEntities")]
+ public Output> AssociatedEntities { get; private set; } = null!;
+
///
/// Output only. Time at which the `Target` was created.
///
@@ -392,6 +398,18 @@ public InputMap Annotations
[Input("anthosCluster")]
public Input? AnthosCluster { get; set; }
+ [Input("associatedEntities")]
+ private InputList? _associatedEntities;
+
+ ///
+ /// Optional. Map of entity IDs to their associated entities. Associated entities allows specifying places other than the deployment target for specific features. For example, the Gateway API canary can be configured to deploy the HTTPRoute to a different cluster(s) than the deployment cluster using associated entities. An entity ID must consist of lower-case letters, numbers, and hyphens, start with a letter and end with a letter or a number, and have a max length of 63 characters. In other words, it must match the following regex: `^a-z?$`.
+ ///
+ public InputList AssociatedEntities
+ {
+ get => _associatedEntities ?? (_associatedEntities = new InputList());
+ set => _associatedEntities = value;
+ }
+
///
/// Optional. Information specifying a Custom Target.
///
@@ -518,6 +536,18 @@ public InputMap Annotations
[Input("anthosCluster")]
public Input? AnthosCluster { get; set; }
+ [Input("associatedEntities")]
+ private InputList? _associatedEntities;
+
+ ///
+ /// Optional. Map of entity IDs to their associated entities. Associated entities allows specifying places other than the deployment target for specific features. For example, the Gateway API canary can be configured to deploy the HTTPRoute to a different cluster(s) than the deployment cluster using associated entities. An entity ID must consist of lower-case letters, numbers, and hyphens, start with a letter and end with a letter or a number, and have a max length of 63 characters. In other words, it must match the following regex: `^a-z?$`.
+ ///
+ public InputList AssociatedEntities
+ {
+ get => _associatedEntities ?? (_associatedEntities = new InputList());
+ set => _associatedEntities = value;
+ }
+
///
/// Output only. Time at which the `Target` was created.
///
diff --git a/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretEnvironmentVariableArgs.cs b/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretEnvironmentVariableArgs.cs
index 00acdbf103..abef0ff204 100644
--- a/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretEnvironmentVariableArgs.cs
+++ b/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretEnvironmentVariableArgs.cs
@@ -19,7 +19,7 @@ public sealed class FunctionServiceConfigSecretEnvironmentVariableArgs : global:
public Input Key { get; set; } = null!;
///
- /// Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
+ /// Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
///
[Input("projectId", required: true)]
public Input ProjectId { get; set; } = null!;
diff --git a/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretEnvironmentVariableGetArgs.cs b/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretEnvironmentVariableGetArgs.cs
index 8c7f600ab3..5e686b64ca 100644
--- a/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretEnvironmentVariableGetArgs.cs
+++ b/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretEnvironmentVariableGetArgs.cs
@@ -19,7 +19,7 @@ public sealed class FunctionServiceConfigSecretEnvironmentVariableGetArgs : glob
public Input Key { get; set; } = null!;
///
- /// Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
+ /// Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
///
[Input("projectId", required: true)]
public Input ProjectId { get; set; } = null!;
diff --git a/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretVolumeArgs.cs b/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretVolumeArgs.cs
index e0351916e0..7af97bdf8f 100644
--- a/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretVolumeArgs.cs
+++ b/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretVolumeArgs.cs
@@ -19,7 +19,7 @@ public sealed class FunctionServiceConfigSecretVolumeArgs : global::Pulumi.Resou
public Input MountPath { get; set; } = null!;
///
- /// Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
+ /// Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
///
[Input("projectId", required: true)]
public Input ProjectId { get; set; } = null!;
diff --git a/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretVolumeGetArgs.cs b/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretVolumeGetArgs.cs
index 822527d9c2..4d375f48dc 100644
--- a/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretVolumeGetArgs.cs
+++ b/sdk/dotnet/CloudFunctionsV2/Inputs/FunctionServiceConfigSecretVolumeGetArgs.cs
@@ -19,7 +19,7 @@ public sealed class FunctionServiceConfigSecretVolumeGetArgs : global::Pulumi.Re
public Input MountPath { get; set; } = null!;
///
- /// Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
+ /// Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
///
[Input("projectId", required: true)]
public Input ProjectId { get; set; } = null!;
diff --git a/sdk/dotnet/CloudFunctionsV2/Outputs/FunctionServiceConfigSecretEnvironmentVariable.cs b/sdk/dotnet/CloudFunctionsV2/Outputs/FunctionServiceConfigSecretEnvironmentVariable.cs
index fa14d898ae..79da6ea822 100644
--- a/sdk/dotnet/CloudFunctionsV2/Outputs/FunctionServiceConfigSecretEnvironmentVariable.cs
+++ b/sdk/dotnet/CloudFunctionsV2/Outputs/FunctionServiceConfigSecretEnvironmentVariable.cs
@@ -18,7 +18,7 @@ public sealed class FunctionServiceConfigSecretEnvironmentVariable
///
public readonly string Key;
///
- /// Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
+ /// Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
///
public readonly string ProjectId;
///
diff --git a/sdk/dotnet/CloudFunctionsV2/Outputs/FunctionServiceConfigSecretVolume.cs b/sdk/dotnet/CloudFunctionsV2/Outputs/FunctionServiceConfigSecretVolume.cs
index c446d737a3..6223a54bd1 100644
--- a/sdk/dotnet/CloudFunctionsV2/Outputs/FunctionServiceConfigSecretVolume.cs
+++ b/sdk/dotnet/CloudFunctionsV2/Outputs/FunctionServiceConfigSecretVolume.cs
@@ -18,7 +18,7 @@ public sealed class FunctionServiceConfigSecretVolume
///
public readonly string MountPath;
///
- /// Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
+ /// Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
///
public readonly string ProjectId;
///
diff --git a/sdk/dotnet/CloudFunctionsV2/Outputs/GetFunctionServiceConfigSecretEnvironmentVariableResult.cs b/sdk/dotnet/CloudFunctionsV2/Outputs/GetFunctionServiceConfigSecretEnvironmentVariableResult.cs
index 02511f95ad..5cc6531ea7 100644
--- a/sdk/dotnet/CloudFunctionsV2/Outputs/GetFunctionServiceConfigSecretEnvironmentVariableResult.cs
+++ b/sdk/dotnet/CloudFunctionsV2/Outputs/GetFunctionServiceConfigSecretEnvironmentVariableResult.cs
@@ -18,7 +18,7 @@ public sealed class GetFunctionServiceConfigSecretEnvironmentVariableResult
///
public readonly string Key;
///
- /// Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
+ /// Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
///
public readonly string ProjectId;
///
diff --git a/sdk/dotnet/CloudFunctionsV2/Outputs/GetFunctionServiceConfigSecretVolumeResult.cs b/sdk/dotnet/CloudFunctionsV2/Outputs/GetFunctionServiceConfigSecretVolumeResult.cs
index 063ab5de65..2af5492a2d 100644
--- a/sdk/dotnet/CloudFunctionsV2/Outputs/GetFunctionServiceConfigSecretVolumeResult.cs
+++ b/sdk/dotnet/CloudFunctionsV2/Outputs/GetFunctionServiceConfigSecretVolumeResult.cs
@@ -18,7 +18,7 @@ public sealed class GetFunctionServiceConfigSecretVolumeResult
///
public readonly string MountPath;
///
- /// Project identifier (preferrably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
+ /// Project identifier (preferably project number but can also be the project ID) of the project that contains the secret. If not set, it will be populated with the function's project assuming that the secret exists in the same project as of the function.
///
public readonly string ProjectId;
///
diff --git a/sdk/dotnet/CloudRunV2/Job.cs b/sdk/dotnet/CloudRunV2/Job.cs
index 64606e84e9..ffe5cb06b9 100644
--- a/sdk/dotnet/CloudRunV2/Job.cs
+++ b/sdk/dotnet/CloudRunV2/Job.cs
@@ -615,7 +615,7 @@ public partial class Job : global::Pulumi.CustomResource
public Output ExecutionCount { get; private set; } = null!;
///
- /// For a deleted resource, the time after which it will be permamently deleted.
+ /// For a deleted resource, the time after which it will be permanently deleted.
///
[Output("expireTime")]
public Output ExpireTime { get; private set; } = null!;
@@ -1013,7 +1013,7 @@ public InputMap EffectiveLabels
public Input? ExecutionCount { get; set; }
///
- /// For a deleted resource, the time after which it will be permamently deleted.
+ /// For a deleted resource, the time after which it will be permanently deleted.
///
[Input("expireTime")]
public Input? ExpireTime { get; set; }
diff --git a/sdk/dotnet/CloudRunV2/Service.cs b/sdk/dotnet/CloudRunV2/Service.cs
index 8e26965414..7fd8fe3f48 100644
--- a/sdk/dotnet/CloudRunV2/Service.cs
+++ b/sdk/dotnet/CloudRunV2/Service.cs
@@ -950,7 +950,7 @@ public partial class Service : global::Pulumi.CustomResource
public Output Etag { get; private set; } = null!;
///
- /// For a deleted resource, the time after which it will be permamently deleted.
+ /// For a deleted resource, the time after which it will be permanently deleted.
///
[Output("expireTime")]
public Output ExpireTime { get; private set; } = null!;
@@ -1451,7 +1451,7 @@ public InputMap EffectiveLabels
public Input? Etag { get; set; }
///
- /// For a deleted resource, the time after which it will be permamently deleted.
+ /// For a deleted resource, the time after which it will be permanently deleted.
///
[Input("expireTime")]
public Input? ExpireTime { get; set; }
diff --git a/sdk/dotnet/Composer/GetUserWorkloadsConfigMap.cs b/sdk/dotnet/Composer/GetUserWorkloadsConfigMap.cs
index 4645d7e2b2..64796c76a4 100644
--- a/sdk/dotnet/Composer/GetUserWorkloadsConfigMap.cs
+++ b/sdk/dotnet/Composer/GetUserWorkloadsConfigMap.cs
@@ -12,6 +12,8 @@ namespace Pulumi.Gcp.Composer
public static class GetUserWorkloadsConfigMap
{
///
+ /// Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment.
+ ///
/// ## Example Usage
///
/// ```csharp
@@ -62,6 +64,8 @@ public static Task InvokeAsync(GetUserWorkloads
=> global::Pulumi.Deployment.Instance.InvokeAsync("gcp:composer/getUserWorkloadsConfigMap:getUserWorkloadsConfigMap", args ?? new GetUserWorkloadsConfigMapArgs(), options.WithDefaults());
///
+ /// Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment.
+ ///
/// ## Example Usage
///
/// ```csharp
diff --git a/sdk/dotnet/Composer/GetUserWorkloadsSecret.cs b/sdk/dotnet/Composer/GetUserWorkloadsSecret.cs
index dd44e8e9f4..8ab8cbbf1d 100644
--- a/sdk/dotnet/Composer/GetUserWorkloadsSecret.cs
+++ b/sdk/dotnet/Composer/GetUserWorkloadsSecret.cs
@@ -12,6 +12,8 @@ namespace Pulumi.Gcp.Composer
public static class GetUserWorkloadsSecret
{
///
+ /// Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment.
+ ///
/// ## Example Usage
///
/// ```csharp
@@ -69,6 +71,8 @@ public static Task InvokeAsync(GetUserWorkloadsSec
=> global::Pulumi.Deployment.Instance.InvokeAsync("gcp:composer/getUserWorkloadsSecret:getUserWorkloadsSecret", args ?? new GetUserWorkloadsSecretArgs(), options.WithDefaults());
///
+ /// Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment.
+ ///
/// ## Example Usage
///
/// ```csharp
diff --git a/sdk/dotnet/Composer/UserWorkloadsConfigMap.cs b/sdk/dotnet/Composer/UserWorkloadsConfigMap.cs
index 45c0ad4fa4..ed06631f27 100644
--- a/sdk/dotnet/Composer/UserWorkloadsConfigMap.cs
+++ b/sdk/dotnet/Composer/UserWorkloadsConfigMap.cs
@@ -10,6 +10,13 @@
namespace Pulumi.Gcp.Composer
{
///
+ /// User workloads ConfigMap used by Airflow tasks that run with Kubernetes Executor or KubernetesPodOperator.
+ /// Intended for Composer 3 Environments.
+ ///
+ /// To get more information about UserWorkloadsConfigMap, see:
+ ///
+ /// * [API documentation](https://cloud.google.com/composer/docs/reference/rest/v1/projects.locations.environments.userWorkloadsConfigMaps)
+ ///
/// ## Example Usage
///
/// ### Composer User Workloads Config Map Basic
diff --git a/sdk/dotnet/Composer/UserWorkloadsSecret.cs b/sdk/dotnet/Composer/UserWorkloadsSecret.cs
index 936dc2b24a..d35a757fab 100644
--- a/sdk/dotnet/Composer/UserWorkloadsSecret.cs
+++ b/sdk/dotnet/Composer/UserWorkloadsSecret.cs
@@ -10,6 +10,9 @@
namespace Pulumi.Gcp.Composer
{
///
+ /// User workloads Secret used by Airflow tasks that run with Kubernetes Executor or KubernetesPodOperator.
+ /// Intended for Composer 3 Environments.
+ ///
/// ## Example Usage
///
/// ```csharp
diff --git a/sdk/dotnet/Compute/Disk.cs b/sdk/dotnet/Compute/Disk.cs
index 1b228967f2..89e76f1ee6 100644
--- a/sdk/dotnet/Compute/Disk.cs
+++ b/sdk/dotnet/Compute/Disk.cs
@@ -462,10 +462,12 @@ public partial class Disk : global::Pulumi.CustomResource
public Output SourceSnapshotId { get; private set; } = null!;
///
- /// The URL of the storage pool in which the new disk is created.
+ /// The URL or the name of the storage pool in which the new disk is created.
/// For example:
/// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}
/// * /projects/{project}/zones/{zone}/storagePools/{storagePool}
+ /// * /zones/{zone}/storagePools/{storagePool}
+ /// * /{storagePool}
///
[Output("storagePool")]
public Output StoragePool { get; private set; } = null!;
@@ -780,10 +782,12 @@ public InputList ResourcePolicies
public Input? SourceSnapshotEncryptionKey { get; set; }
///
- /// The URL of the storage pool in which the new disk is created.
+ /// The URL or the name of the storage pool in which the new disk is created.
/// For example:
/// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}
/// * /projects/{project}/zones/{zone}/storagePools/{storagePool}
+ /// * /zones/{zone}/storagePools/{storagePool}
+ /// * /{storagePool}
///
[Input("storagePool")]
public Input? StoragePool { get; set; }
@@ -1147,10 +1151,12 @@ public InputList ResourcePolicies
public Input? SourceSnapshotId { get; set; }
///
- /// The URL of the storage pool in which the new disk is created.
+ /// The URL or the name of the storage pool in which the new disk is created.
/// For example:
/// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}
/// * /projects/{project}/zones/{zone}/storagePools/{storagePool}
+ /// * /zones/{zone}/storagePools/{storagePool}
+ /// * /{storagePool}
///
[Input("storagePool")]
public Input? StoragePool { get; set; }
diff --git a/sdk/dotnet/Compute/FirewallPolicyRule.cs b/sdk/dotnet/Compute/FirewallPolicyRule.cs
index c6e35679c3..9393576725 100644
--- a/sdk/dotnet/Compute/FirewallPolicyRule.cs
+++ b/sdk/dotnet/Compute/FirewallPolicyRule.cs
@@ -10,6 +10,12 @@
namespace Pulumi.Gcp.Compute
{
///
+ /// Represents a rule that describes one or more match conditions along with the action to be taken when traffic matches this condition (allow or deny).
+ ///
+ /// To get more information about FirewallPolicyRule, see:
+ ///
+ /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/firewallPolicies/addRule)
+ ///
/// ## Example Usage
///
/// ### Firewall Policy Rule
diff --git a/sdk/dotnet/Compute/GetForwardingRules.cs b/sdk/dotnet/Compute/GetForwardingRules.cs
index b5a62ddb0b..a05f48a956 100644
--- a/sdk/dotnet/Compute/GetForwardingRules.cs
+++ b/sdk/dotnet/Compute/GetForwardingRules.cs
@@ -74,7 +74,7 @@ public sealed class GetForwardingRulesArgs : global::Pulumi.InvokeArgs
///
/// The region you want to get the forwarding rules from.
///
- /// These arguments must be set in either the provider or the resouce in order for the information to be queried.
+ /// These arguments must be set in either the provider or the resource in order for the information to be queried.
///
[Input("region")]
public string? Region { get; set; }
@@ -96,7 +96,7 @@ public sealed class GetForwardingRulesInvokeArgs : global::Pulumi.InvokeArgs
///
/// The region you want to get the forwarding rules from.
///
- /// These arguments must be set in either the provider or the resouce in order for the information to be queried.
+ /// These arguments must be set in either the provider or the resource in order for the information to be queried.
///
[Input("region")]
public Input? Region { get; set; }
diff --git a/sdk/dotnet/Compute/GetGlobalForwardingRule.cs b/sdk/dotnet/Compute/GetGlobalForwardingRule.cs
index 89818ea677..1bbb967433 100644
--- a/sdk/dotnet/Compute/GetGlobalForwardingRule.cs
+++ b/sdk/dotnet/Compute/GetGlobalForwardingRule.cs
@@ -115,6 +115,7 @@ public sealed class GetGlobalForwardingRuleResult
public readonly string BaseForwardingRule;
public readonly string Description;
public readonly ImmutableDictionary EffectiveLabels;
+ public readonly int ForwardingRuleId;
///
/// The provider-assigned unique ID for this managed resource.
///
@@ -150,6 +151,8 @@ private GetGlobalForwardingRuleResult(
ImmutableDictionary effectiveLabels,
+ int forwardingRuleId,
+
string id,
string ipAddress,
@@ -196,6 +199,7 @@ private GetGlobalForwardingRuleResult(
BaseForwardingRule = baseForwardingRule;
Description = description;
EffectiveLabels = effectiveLabels;
+ ForwardingRuleId = forwardingRuleId;
Id = id;
IpAddress = ipAddress;
IpProtocol = ipProtocol;
diff --git a/sdk/dotnet/Compute/GetInstanceGroupManager.cs b/sdk/dotnet/Compute/GetInstanceGroupManager.cs
index 908250e6d2..d37aa94d7d 100644
--- a/sdk/dotnet/Compute/GetInstanceGroupManager.cs
+++ b/sdk/dotnet/Compute/GetInstanceGroupManager.cs
@@ -156,6 +156,7 @@ public sealed class GetInstanceGroupManagerResult
///
public readonly string Id;
public readonly string InstanceGroup;
+ public readonly int InstanceGroupManagerId;
public readonly ImmutableArray InstanceLifecyclePolicies;
public readonly string ListManagedInstancesResults;
public readonly string? Name;
@@ -197,6 +198,8 @@ private GetInstanceGroupManagerResult(
string instanceGroup,
+ int instanceGroupManagerId,
+
ImmutableArray instanceLifecyclePolicies,
string listManagedInstancesResults,
@@ -249,6 +252,7 @@ private GetInstanceGroupManagerResult(
Fingerprint = fingerprint;
Id = id;
InstanceGroup = instanceGroup;
+ InstanceGroupManagerId = instanceGroupManagerId;
InstanceLifecyclePolicies = instanceLifecyclePolicies;
ListManagedInstancesResults = listManagedInstancesResults;
Name = name;
diff --git a/sdk/dotnet/Compute/GetNetwork.cs b/sdk/dotnet/Compute/GetNetwork.cs
index 88007cbc69..1edaaacc73 100644
--- a/sdk/dotnet/Compute/GetNetwork.cs
+++ b/sdk/dotnet/Compute/GetNetwork.cs
@@ -72,6 +72,12 @@ public sealed class GetNetworkArgs : global::Pulumi.InvokeArgs
[Input("name", required: true)]
public string Name { get; set; } = null!;
+ ///
+ /// Beta A full or partial URL of the network profile to apply to this network.
+ ///
+ [Input("networkProfile")]
+ public string? NetworkProfile { get; set; }
+
///
/// The ID of the project in which the resource belongs. If it
/// is not provided, the provider project is used.
@@ -96,6 +102,12 @@ public sealed class GetNetworkInvokeArgs : global::Pulumi.InvokeArgs
[Input("name", required: true)]
public Input Name { get; set; } = null!;
+ ///
+ /// Beta A full or partial URL of the network profile to apply to this network.
+ ///
+ [Input("networkProfile")]
+ public Input? NetworkProfile { get; set; }
+
///
/// The ID of the project in which the resource belongs. If it
/// is not provided, the provider project is used.
@@ -130,6 +142,14 @@ public sealed class GetNetworkResult
///
public readonly string InternalIpv6Range;
public readonly string Name;
+ ///
+ /// Beta A full or partial URL of the network profile to apply to this network.
+ ///
+ public readonly string? NetworkProfile;
+ ///
+ /// The numeric unique identifier for the resource.
+ ///
+ public readonly string NumericId;
public readonly string? Project;
///
/// The URI of the resource.
@@ -152,6 +172,10 @@ private GetNetworkResult(
string name,
+ string? networkProfile,
+
+ string numericId,
+
string? project,
string selfLink,
@@ -163,6 +187,8 @@ private GetNetworkResult(
Id = id;
InternalIpv6Range = internalIpv6Range;
Name = name;
+ NetworkProfile = networkProfile;
+ NumericId = numericId;
Project = project;
SelfLink = selfLink;
SubnetworksSelfLinks = subnetworksSelfLinks;
diff --git a/sdk/dotnet/Compute/GetRegionInstanceGroupManager.cs b/sdk/dotnet/Compute/GetRegionInstanceGroupManager.cs
index 4d4b6cd83b..14c80e286e 100644
--- a/sdk/dotnet/Compute/GetRegionInstanceGroupManager.cs
+++ b/sdk/dotnet/Compute/GetRegionInstanceGroupManager.cs
@@ -147,6 +147,7 @@ public sealed class GetRegionInstanceGroupManagerResult
public readonly string Id;
public readonly ImmutableArray InstanceFlexibilityPolicies;
public readonly string InstanceGroup;
+ public readonly int InstanceGroupManagerId;
public readonly ImmutableArray InstanceLifecyclePolicies;
public readonly string ListManagedInstancesResults;
public readonly string? Name;
@@ -193,6 +194,8 @@ private GetRegionInstanceGroupManagerResult(
string instanceGroup,
+ int instanceGroupManagerId,
+
ImmutableArray instanceLifecyclePolicies,
string listManagedInstancesResults,
@@ -246,6 +249,7 @@ private GetRegionInstanceGroupManagerResult(
Id = id;
InstanceFlexibilityPolicies = instanceFlexibilityPolicies;
InstanceGroup = instanceGroup;
+ InstanceGroupManagerId = instanceGroupManagerId;
InstanceLifecyclePolicies = instanceLifecyclePolicies;
ListManagedInstancesResults = listManagedInstancesResults;
Name = name;
diff --git a/sdk/dotnet/Compute/GetRegionNetworkEndpointGroup.cs b/sdk/dotnet/Compute/GetRegionNetworkEndpointGroup.cs
index 55d70eb9dd..0d53a35c0f 100644
--- a/sdk/dotnet/Compute/GetRegionNetworkEndpointGroup.cs
+++ b/sdk/dotnet/Compute/GetRegionNetworkEndpointGroup.cs
@@ -166,6 +166,7 @@ public sealed class GetRegionNetworkEndpointGroupResult
///
public readonly string NetworkEndpointType;
public readonly string? Project;
+ public readonly ImmutableArray PscDatas;
///
/// The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment.
///
@@ -198,6 +199,8 @@ private GetRegionNetworkEndpointGroupResult(
string? project,
+ ImmutableArray pscDatas,
+
string pscTargetService,
string? region,
@@ -217,6 +220,7 @@ private GetRegionNetworkEndpointGroupResult(
Network = network;
NetworkEndpointType = networkEndpointType;
Project = project;
+ PscDatas = pscDatas;
PscTargetService = pscTargetService;
Region = region;
SelfLink = selfLink;
diff --git a/sdk/dotnet/Compute/GlobalForwardingRule.cs b/sdk/dotnet/Compute/GlobalForwardingRule.cs
index 8a42472851..62680397b0 100644
--- a/sdk/dotnet/Compute/GlobalForwardingRule.cs
+++ b/sdk/dotnet/Compute/GlobalForwardingRule.cs
@@ -663,6 +663,12 @@ public partial class GlobalForwardingRule : global::Pulumi.CustomResource
[Output("effectiveLabels")]
public Output> EffectiveLabels { get; private set; } = null!;
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Output("forwardingRuleId")]
+ public Output ForwardingRuleId { get; private set; } = null!;
+
///
/// IP address for which this forwarding rule accepts traffic. When a client
/// sends traffic to this IP address, the forwarding rule directs the traffic
@@ -1226,6 +1232,12 @@ public InputMap EffectiveLabels
}
}
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Input("forwardingRuleId")]
+ public Input? ForwardingRuleId { get; set; }
+
///
/// IP address for which this forwarding rule accepts traffic. When a client
/// sends traffic to this IP address, the forwarding rule directs the traffic
diff --git a/sdk/dotnet/Compute/Inputs/InstanceAdvancedMachineFeaturesArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceAdvancedMachineFeaturesArgs.cs
index 8746e4e674..2570b7bee4 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceAdvancedMachineFeaturesArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceAdvancedMachineFeaturesArgs.cs
@@ -18,6 +18,18 @@ public sealed class InstanceAdvancedMachineFeaturesArgs : global::Pulumi.Resourc
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for instance creation.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// [The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.
///
diff --git a/sdk/dotnet/Compute/Inputs/InstanceAdvancedMachineFeaturesGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceAdvancedMachineFeaturesGetArgs.cs
index c4cb100286..03dc02b88d 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceAdvancedMachineFeaturesGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceAdvancedMachineFeaturesGetArgs.cs
@@ -18,6 +18,18 @@ public sealed class InstanceAdvancedMachineFeaturesGetArgs : global::Pulumi.Reso
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for instance creation.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// [The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.
///
diff --git a/sdk/dotnet/Compute/Inputs/InstanceBootDiskInitializeParamsArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceBootDiskInitializeParamsArgs.cs
index faa266bfd0..158ba96cc7 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceBootDiskInitializeParamsArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceBootDiskInitializeParamsArgs.cs
@@ -96,10 +96,12 @@ public InputMap ResourceManagerTags
public Input? Size { get; set; }
///
- /// The URL of the storage pool in which the new disk is created.
+ /// The URL or the name of the storage pool in which the new disk is created.
/// For example:
/// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}
/// * /projects/{project}/zones/{zone}/storagePools/{storagePool}
+ /// * /zones/{zone}/storagePools/{storagePool}
+ /// * /{storagePool}
///
[Input("storagePool")]
public Input? StoragePool { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/InstanceBootDiskInitializeParamsGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceBootDiskInitializeParamsGetArgs.cs
index d6bad4f266..b2f37a1530 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceBootDiskInitializeParamsGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceBootDiskInitializeParamsGetArgs.cs
@@ -96,10 +96,12 @@ public InputMap ResourceManagerTags
public Input? Size { get; set; }
///
- /// The URL of the storage pool in which the new disk is created.
+ /// The URL or the name of the storage pool in which the new disk is created.
/// For example:
/// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}
/// * /projects/{project}/zones/{zone}/storagePools/{storagePool}
+ /// * /zones/{zone}/storagePools/{storagePool}
+ /// * /{storagePool}
///
[Input("storagePool")]
public Input? StoragePool { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageAdvancedMachineFeaturesArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageAdvancedMachineFeaturesArgs.cs
index 75fa1b0259..4377ae6575 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageAdvancedMachineFeaturesArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageAdvancedMachineFeaturesArgs.cs
@@ -18,6 +18,18 @@ public sealed class InstanceFromMachineImageAdvancedMachineFeaturesArgs : global
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for the instance.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are "STANDARD", "ENHANCED", and "ARCHITECTURAL".
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.
///
diff --git a/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageAdvancedMachineFeaturesGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageAdvancedMachineFeaturesGetArgs.cs
index fc3e6bc68f..a0e8cfdd83 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageAdvancedMachineFeaturesGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageAdvancedMachineFeaturesGetArgs.cs
@@ -18,6 +18,18 @@ public sealed class InstanceFromMachineImageAdvancedMachineFeaturesGetArgs : glo
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for the instance.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are "STANDARD", "ENHANCED", and "ARCHITECTURAL".
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.
///
diff --git a/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageNetworkInterfaceArgs.cs
index 36fa7c353b..a745d9b980 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageNetworkInterfaceArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageNetworkInterfaceArgs.cs
@@ -92,7 +92,7 @@ public InputList? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF
+ /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageNetworkInterfaceGetArgs.cs
index e0200b3cd6..88b3b7a46b 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageNetworkInterfaceGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceFromMachineImageNetworkInterfaceGetArgs.cs
@@ -92,7 +92,7 @@ public InputList? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF
+ /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/InstanceFromTemplateAdvancedMachineFeaturesArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceFromTemplateAdvancedMachineFeaturesArgs.cs
index 8c4cccd919..ea4ca859c4 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceFromTemplateAdvancedMachineFeaturesArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceFromTemplateAdvancedMachineFeaturesArgs.cs
@@ -18,6 +18,18 @@ public sealed class InstanceFromTemplateAdvancedMachineFeaturesArgs : global::Pu
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for the instance.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are "STANDARD", "ENHANCED", and "ARCHITECTURAL".
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.
///
diff --git a/sdk/dotnet/Compute/Inputs/InstanceFromTemplateAdvancedMachineFeaturesGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceFromTemplateAdvancedMachineFeaturesGetArgs.cs
index 2ce0cf7da7..4be12325db 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceFromTemplateAdvancedMachineFeaturesGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceFromTemplateAdvancedMachineFeaturesGetArgs.cs
@@ -18,6 +18,18 @@ public sealed class InstanceFromTemplateAdvancedMachineFeaturesGetArgs : global:
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for the instance.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are "STANDARD", "ENHANCED", and "ARCHITECTURAL".
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.
///
diff --git a/sdk/dotnet/Compute/Inputs/InstanceFromTemplateNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceFromTemplateNetworkInterfaceArgs.cs
index efe08d0c58..c494628cf3 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceFromTemplateNetworkInterfaceArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceFromTemplateNetworkInterfaceArgs.cs
@@ -92,7 +92,7 @@ public InputList? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF
+ /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/InstanceFromTemplateNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceFromTemplateNetworkInterfaceGetArgs.cs
index f8a61307a0..e17db7d89e 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceFromTemplateNetworkInterfaceGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceFromTemplateNetworkInterfaceGetArgs.cs
@@ -92,7 +92,7 @@ public InputList? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF
+ /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs
index 2df2d9a3a5..838950b4e2 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs
@@ -100,7 +100,7 @@ public InputList Ipv6Access
public Input? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF.
+ /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. In the beta provider the additional values of MRDMA and IRDMA are supported.
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs
index f69a6e8c48..f739100a28 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs
@@ -100,7 +100,7 @@ public InputList Ipv6Acc
public Input? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF.
+ /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. In the beta provider the additional values of MRDMA and IRDMA are supported.
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateAdvancedMachineFeaturesArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateAdvancedMachineFeaturesArgs.cs
index ce053b5d94..a195e42166 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceTemplateAdvancedMachineFeaturesArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateAdvancedMachineFeaturesArgs.cs
@@ -18,6 +18,18 @@ public sealed class InstanceTemplateAdvancedMachineFeaturesArgs : global::Pulumi
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for instance creation.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// [The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.
///
diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateAdvancedMachineFeaturesGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateAdvancedMachineFeaturesGetArgs.cs
index f9bfd879dc..fd8a287b83 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceTemplateAdvancedMachineFeaturesGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateAdvancedMachineFeaturesGetArgs.cs
@@ -18,6 +18,18 @@ public sealed class InstanceTemplateAdvancedMachineFeaturesGetArgs : global::Pul
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for instance creation.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// [The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.
///
diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs
index 6171268448..e79017e94b 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs
@@ -104,7 +104,7 @@ public InputList Ip
public Input? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET.
+ /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported.
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs
index 49847f4c93..a32b219d43 100644
--- a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs
@@ -104,7 +104,7 @@ public InputList
public Input? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET.
+ /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported.
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateAdvancedMachineFeaturesArgs.cs b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateAdvancedMachineFeaturesArgs.cs
index 1031dd26da..3394e95ad2 100644
--- a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateAdvancedMachineFeaturesArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateAdvancedMachineFeaturesArgs.cs
@@ -18,6 +18,18 @@ public sealed class RegionInstanceTemplateAdvancedMachineFeaturesArgs : global::
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for instance creation.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// [The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.
///
diff --git a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateAdvancedMachineFeaturesGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateAdvancedMachineFeaturesGetArgs.cs
index 1e8d43d410..4397dd7bec 100644
--- a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateAdvancedMachineFeaturesGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateAdvancedMachineFeaturesGetArgs.cs
@@ -18,6 +18,18 @@ public sealed class RegionInstanceTemplateAdvancedMachineFeaturesGetArgs : globa
[Input("enableNestedVirtualization")]
public Input? EnableNestedVirtualization { get; set; }
+ ///
+ /// Whether to enable UEFI networking for instance creation.
+ ///
+ [Input("enableUefiNetworking")]
+ public Input? EnableUefiNetworking { get; set; }
+
+ ///
+ /// [The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.
+ ///
+ [Input("performanceMonitoringUnit")]
+ public Input? PerformanceMonitoringUnit { get; set; }
+
///
/// The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.
///
diff --git a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceArgs.cs
index 80a11ecabb..a0498eaf7e 100644
--- a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceArgs.cs
@@ -88,7 +88,7 @@ public InputList? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET.
+ /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported.
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceGetArgs.cs
index c57063f721..fc6a575474 100644
--- a/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/RegionInstanceTemplateNetworkInterfaceGetArgs.cs
@@ -88,7 +88,7 @@ public InputList? NetworkIp { get; set; }
///
- /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET.
+ /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported.
///
[Input("nicType")]
public Input? NicType { get; set; }
diff --git a/sdk/dotnet/Compute/Inputs/RegionNetworkEndpointGroupPscDataArgs.cs b/sdk/dotnet/Compute/Inputs/RegionNetworkEndpointGroupPscDataArgs.cs
new file mode 100644
index 0000000000..2fd4ee3b10
--- /dev/null
+++ b/sdk/dotnet/Compute/Inputs/RegionNetworkEndpointGroupPscDataArgs.cs
@@ -0,0 +1,29 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Inputs
+{
+
+ public sealed class RegionNetworkEndpointGroupPscDataArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// The PSC producer port to use when consumer PSC NEG connects to a producer. If
+ /// this flag isn't specified for a PSC NEG with endpoint type
+ /// private-service-connect, then PSC NEG will be connected to a first port in the
+ /// available PSC producer port range.
+ ///
+ [Input("producerPort")]
+ public Input? ProducerPort { get; set; }
+
+ public RegionNetworkEndpointGroupPscDataArgs()
+ {
+ }
+ public static new RegionNetworkEndpointGroupPscDataArgs Empty => new RegionNetworkEndpointGroupPscDataArgs();
+ }
+}
diff --git a/sdk/dotnet/Compute/Inputs/RegionNetworkEndpointGroupPscDataGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionNetworkEndpointGroupPscDataGetArgs.cs
new file mode 100644
index 0000000000..52614cc947
--- /dev/null
+++ b/sdk/dotnet/Compute/Inputs/RegionNetworkEndpointGroupPscDataGetArgs.cs
@@ -0,0 +1,29 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Inputs
+{
+
+ public sealed class RegionNetworkEndpointGroupPscDataGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// The PSC producer port to use when consumer PSC NEG connects to a producer. If
+ /// this flag isn't specified for a PSC NEG with endpoint type
+ /// private-service-connect, then PSC NEG will be connected to a first port in the
+ /// available PSC producer port range.
+ ///
+ [Input("producerPort")]
+ public Input? ProducerPort { get; set; }
+
+ public RegionNetworkEndpointGroupPscDataGetArgs()
+ {
+ }
+ public static new RegionNetworkEndpointGroupPscDataGetArgs Empty => new RegionNetworkEndpointGroupPscDataGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs.cs
index 0ac0b19466..097374fe0c 100644
--- a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs.cs
@@ -24,6 +24,18 @@ public sealed class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfi
[Input("ruleVisibility")]
public Input? RuleVisibility { get; set; }
+ [Input("thresholdConfigs")]
+ private InputList? _thresholdConfigs;
+
+ ///
+ /// Configuration options for layer7 adaptive protection for various customizable thresholds.
+ ///
+ public InputList ThresholdConfigs
+ {
+ get => _thresholdConfigs ?? (_thresholdConfigs = new InputList());
+ set => _thresholdConfigs = value;
+ }
+
public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs()
{
}
diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigGetArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigGetArgs.cs
index 409622485b..8cae28e1ac 100644
--- a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigGetArgs.cs
@@ -24,6 +24,18 @@ public sealed class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfi
[Input("ruleVisibility")]
public Input? RuleVisibility { get; set; }
+ [Input("thresholdConfigs")]
+ private InputList? _thresholdConfigs;
+
+ ///
+ /// Configuration options for layer7 adaptive protection for various customizable thresholds.
+ ///
+ public InputList ThresholdConfigs
+ {
+ get => _thresholdConfigs ?? (_thresholdConfigs = new InputList());
+ set => _thresholdConfigs = value;
+ }
+
public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigGetArgs()
{
}
diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs.cs
new file mode 100644
index 0000000000..844480c936
--- /dev/null
+++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs.cs
@@ -0,0 +1,80 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Inputs
+{
+
+ public sealed class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Confidence threshold above which Adaptive Protection's auto-deploy takes actions.
+ ///
+ [Input("autoDeployConfidenceThreshold")]
+ public Input? AutoDeployConfidenceThreshold { get; set; }
+
+ ///
+ /// Duration over which Adaptive Protection's auto-deployed actions last.
+ ///
+ [Input("autoDeployExpirationSec")]
+ public Input? AutoDeployExpirationSec { get; set; }
+
+ ///
+ /// Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions.
+ ///
+ [Input("autoDeployImpactedBaselineThreshold")]
+ public Input? AutoDeployImpactedBaselineThreshold { get; set; }
+
+ ///
+ /// Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack.
+ ///
+ [Input("autoDeployLoadThreshold")]
+ public Input? AutoDeployLoadThreshold { get; set; }
+
+ ///
+ /// Detection threshold based on absolute QPS.
+ ///
+ [Input("detectionAbsoluteQps")]
+ public Input? DetectionAbsoluteQps { get; set; }
+
+ ///
+ /// Detection threshold based on the backend service's load.
+ ///
+ [Input("detectionLoadThreshold")]
+ public Input? DetectionLoadThreshold { get; set; }
+
+ ///
+ /// Detection threshold based on QPS relative to the average of baseline traffic.
+ ///
+ [Input("detectionRelativeToBaselineQps")]
+ public Input? DetectionRelativeToBaselineQps { get; set; }
+
+ ///
+ /// The name of config. The name must be 1-63 characters long, and comply with RFC1035. The name must be unique within the security policy.
+ ///
+ [Input("name", required: true)]
+ public Input Name { get; set; } = null!;
+
+ [Input("trafficGranularityConfigs")]
+ private InputList? _trafficGranularityConfigs;
+
+ ///
+ /// Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below.
+ ///
+ public InputList TrafficGranularityConfigs
+ {
+ get => _trafficGranularityConfigs ?? (_trafficGranularityConfigs = new InputList());
+ set => _trafficGranularityConfigs = value;
+ }
+
+ public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs()
+ {
+ }
+ public static new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs Empty => new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs();
+ }
+}
diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigGetArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigGetArgs.cs
new file mode 100644
index 0000000000..5d780c2ee7
--- /dev/null
+++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigGetArgs.cs
@@ -0,0 +1,80 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Inputs
+{
+
+ public sealed class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Confidence threshold above which Adaptive Protection's auto-deploy takes actions.
+ ///
+ [Input("autoDeployConfidenceThreshold")]
+ public Input? AutoDeployConfidenceThreshold { get; set; }
+
+ ///
+ /// Duration over which Adaptive Protection's auto-deployed actions last.
+ ///
+ [Input("autoDeployExpirationSec")]
+ public Input? AutoDeployExpirationSec { get; set; }
+
+ ///
+ /// Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions.
+ ///
+ [Input("autoDeployImpactedBaselineThreshold")]
+ public Input? AutoDeployImpactedBaselineThreshold { get; set; }
+
+ ///
+ /// Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack.
+ ///
+ [Input("autoDeployLoadThreshold")]
+ public Input? AutoDeployLoadThreshold { get; set; }
+
+ ///
+ /// Detection threshold based on absolute QPS.
+ ///
+ [Input("detectionAbsoluteQps")]
+ public Input? DetectionAbsoluteQps { get; set; }
+
+ ///
+ /// Detection threshold based on the backend service's load.
+ ///
+ [Input("detectionLoadThreshold")]
+ public Input? DetectionLoadThreshold { get; set; }
+
+ ///
+ /// Detection threshold based on QPS relative to the average of baseline traffic.
+ ///
+ [Input("detectionRelativeToBaselineQps")]
+ public Input? DetectionRelativeToBaselineQps { get; set; }
+
+ ///
+ /// The name of config. The name must be 1-63 characters long, and comply with RFC1035. The name must be unique within the security policy.
+ ///
+ [Input("name", required: true)]
+ public Input Name { get; set; } = null!;
+
+ [Input("trafficGranularityConfigs")]
+ private InputList? _trafficGranularityConfigs;
+
+ ///
+ /// Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below.
+ ///
+ public InputList TrafficGranularityConfigs
+ {
+ get => _trafficGranularityConfigs ?? (_trafficGranularityConfigs = new InputList());
+ set => _trafficGranularityConfigs = value;
+ }
+
+ public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigGetArgs()
+ {
+ }
+ public static new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigGetArgs Empty => new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs.cs
new file mode 100644
index 0000000000..ed1deaf4b9
--- /dev/null
+++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs.cs
@@ -0,0 +1,40 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Inputs
+{
+
+ public sealed class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// If enabled, traffic matching each unique value for the specified type constitutes a separate traffic unit. It can only be set to true if value is empty.
+ ///
+ [Input("enableEachUniqueValue")]
+ public Input? EnableEachUniqueValue { get; set; }
+
+ ///
+ /// The type of this configuration, a granular traffic unit can be one of the following:
+ /// * `HTTP_HEADER_HOST`
+ /// * `HTTP_PATH`
+ ///
+ [Input("type", required: true)]
+ public Input Type { get; set; } = null!;
+
+ ///
+ /// Requests that match this value constitute a granular traffic unit.
+ ///
+ [Input("value")]
+ public Input? Value { get; set; }
+
+ public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs()
+ {
+ }
+ public static new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs Empty => new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs();
+ }
+}
diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigGetArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigGetArgs.cs
new file mode 100644
index 0000000000..e215073398
--- /dev/null
+++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigGetArgs.cs
@@ -0,0 +1,40 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Inputs
+{
+
+ public sealed class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// If enabled, traffic matching each unique value for the specified type constitutes a separate traffic unit. It can only be set to true if value is empty.
+ ///
+ [Input("enableEachUniqueValue")]
+ public Input? EnableEachUniqueValue { get; set; }
+
+ ///
+ /// The type of this configuration, a granular traffic unit can be one of the following:
+ /// * `HTTP_HEADER_HOST`
+ /// * `HTTP_PATH`
+ ///
+ [Input("type", required: true)]
+ public Input Type { get; set; } = null!;
+
+ ///
+ /// Requests that match this value constitute a granular traffic unit.
+ ///
+ [Input("value")]
+ public Input? Value { get; set; }
+
+ public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigGetArgs()
+ {
+ }
+ public static new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigGetArgs Empty => new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Compute/Inputs/URLMapPathMatcherArgs.cs b/sdk/dotnet/Compute/Inputs/URLMapPathMatcherArgs.cs
index 35cdb1c6cf..276ad98da7 100644
--- a/sdk/dotnet/Compute/Inputs/URLMapPathMatcherArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/URLMapPathMatcherArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.Compute.Inputs
public sealed class URLMapPathMatcherArgs : global::Pulumi.ResourceArgs
{
///
- /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.
+ /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.
/// This policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.
/// For example, consider a UrlMap with the following configuration:
/// UrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors
diff --git a/sdk/dotnet/Compute/Inputs/URLMapPathMatcherGetArgs.cs b/sdk/dotnet/Compute/Inputs/URLMapPathMatcherGetArgs.cs
index c47355c167..e36f95cc9a 100644
--- a/sdk/dotnet/Compute/Inputs/URLMapPathMatcherGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/URLMapPathMatcherGetArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.Compute.Inputs
public sealed class URLMapPathMatcherGetArgs : global::Pulumi.ResourceArgs
{
///
- /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.
+ /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.
/// This policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.
/// For example, consider a UrlMap with the following configuration:
/// UrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors
diff --git a/sdk/dotnet/Compute/Inputs/URLMapPathMatcherPathRuleArgs.cs b/sdk/dotnet/Compute/Inputs/URLMapPathMatcherPathRuleArgs.cs
index dd25cde114..0b2ab0503c 100644
--- a/sdk/dotnet/Compute/Inputs/URLMapPathMatcherPathRuleArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/URLMapPathMatcherPathRuleArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.Compute.Inputs
public sealed class URLMapPathMatcherPathRuleArgs : global::Pulumi.ResourceArgs
{
///
- /// customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.
+ /// customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.
/// If a policy for an error code is not configured for the PathRule, a policy for the error code configured in pathMatcher.defaultCustomErrorResponsePolicy is applied. If one is not specified in pathMatcher.defaultCustomErrorResponsePolicy, the policy configured in UrlMap.defaultCustomErrorResponsePolicy takes effect.
/// For example, consider a UrlMap with the following configuration:
/// UrlMap.defaultCustomErrorResponsePolicy are configured with policies for 5xx and 4xx errors
diff --git a/sdk/dotnet/Compute/Inputs/URLMapPathMatcherPathRuleGetArgs.cs b/sdk/dotnet/Compute/Inputs/URLMapPathMatcherPathRuleGetArgs.cs
index 2c5b3919ed..e31f225a24 100644
--- a/sdk/dotnet/Compute/Inputs/URLMapPathMatcherPathRuleGetArgs.cs
+++ b/sdk/dotnet/Compute/Inputs/URLMapPathMatcherPathRuleGetArgs.cs
@@ -13,7 +13,7 @@ namespace Pulumi.Gcp.Compute.Inputs
public sealed class URLMapPathMatcherPathRuleGetArgs : global::Pulumi.ResourceArgs
{
///
- /// customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.
+ /// customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.
/// If a policy for an error code is not configured for the PathRule, a policy for the error code configured in pathMatcher.defaultCustomErrorResponsePolicy is applied. If one is not specified in pathMatcher.defaultCustomErrorResponsePolicy, the policy configured in UrlMap.defaultCustomErrorResponsePolicy takes effect.
/// For example, consider a UrlMap with the following configuration:
/// UrlMap.defaultCustomErrorResponsePolicy are configured with policies for 5xx and 4xx errors
diff --git a/sdk/dotnet/Compute/InstanceGroupManager.cs b/sdk/dotnet/Compute/InstanceGroupManager.cs
index 8991f633a5..075337511e 100644
--- a/sdk/dotnet/Compute/InstanceGroupManager.cs
+++ b/sdk/dotnet/Compute/InstanceGroupManager.cs
@@ -245,6 +245,12 @@ public partial class InstanceGroupManager : global::Pulumi.CustomResource
[Output("instanceGroup")]
public Output InstanceGroup { get; private set; } = null!;
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Output("instanceGroupManagerId")]
+ public Output InstanceGroupManagerId { get; private set; } = null!;
+
///
/// The instance lifecycle policy for this managed instance group.
///
@@ -712,6 +718,12 @@ public sealed class InstanceGroupManagerState : global::Pulumi.ResourceArgs
[Input("instanceGroup")]
public Input? InstanceGroup { get; set; }
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Input("instanceGroupManagerId")]
+ public Input? InstanceGroupManagerId { get; set; }
+
///
/// The instance lifecycle policy for this managed instance group.
///
diff --git a/sdk/dotnet/Compute/Network.cs b/sdk/dotnet/Compute/Network.cs
index 48955dd71d..48473d6e53 100644
--- a/sdk/dotnet/Compute/Network.cs
+++ b/sdk/dotnet/Compute/Network.cs
@@ -268,6 +268,16 @@ public partial class Network : global::Pulumi.CustomResource
[Output("networkFirewallPolicyEnforcementOrder")]
public Output NetworkFirewallPolicyEnforcementOrder { get; private set; } = null!;
+ ///
+ /// A full or partial URL of the network profile to apply to this network.
+ /// This field can be set only at resource creation time. For example, the
+ /// following are valid URLs:
+ /// * https://www.googleapis.com/compute/beta/projects/{projectId}/global/networkProfiles/{network_profile_name}
+ /// * projects/{projectId}/global/networkProfiles/{network_profile_name}
+ ///
+ [Output("networkProfile")]
+ public Output NetworkProfile { get; private set; } = null!;
+
///
/// The unique identifier for the resource. This identifier is defined by the server.
///
@@ -439,6 +449,16 @@ public sealed class NetworkArgs : global::Pulumi.ResourceArgs
[Input("networkFirewallPolicyEnforcementOrder")]
public Input? NetworkFirewallPolicyEnforcementOrder { get; set; }
+ ///
+ /// A full or partial URL of the network profile to apply to this network.
+ /// This field can be set only at resource creation time. For example, the
+ /// following are valid URLs:
+ /// * https://www.googleapis.com/compute/beta/projects/{projectId}/global/networkProfiles/{network_profile_name}
+ /// * projects/{projectId}/global/networkProfiles/{network_profile_name}
+ ///
+ [Input("networkProfile")]
+ public Input? NetworkProfile { get; set; }
+
///
/// The ID of the project in which the resource belongs.
/// If it is not provided, the provider project is used.
@@ -567,6 +587,16 @@ public sealed class NetworkState : global::Pulumi.ResourceArgs
[Input("networkFirewallPolicyEnforcementOrder")]
public Input? NetworkFirewallPolicyEnforcementOrder { get; set; }
+ ///
+ /// A full or partial URL of the network profile to apply to this network.
+ /// This field can be set only at resource creation time. For example, the
+ /// following are valid URLs:
+ /// * https://www.googleapis.com/compute/beta/projects/{projectId}/global/networkProfiles/{network_profile_name}
+ /// * projects/{projectId}/global/networkProfiles/{network_profile_name}
+ ///
+ [Input("networkProfile")]
+ public Input? NetworkProfile { get; set; }
+
///
/// The unique identifier for the resource. This identifier is defined by the server.
///
diff --git a/sdk/dotnet/Compute/Outputs/GetForwardingRulesRuleResult.cs b/sdk/dotnet/Compute/Outputs/GetForwardingRulesRuleResult.cs
index 8888ca237a..497b1b5a35 100644
--- a/sdk/dotnet/Compute/Outputs/GetForwardingRulesRuleResult.cs
+++ b/sdk/dotnet/Compute/Outputs/GetForwardingRulesRuleResult.cs
@@ -287,7 +287,7 @@ public sealed class GetForwardingRulesRuleResult
///
/// The region you want to get the forwarding rules from.
///
- /// These arguments must be set in either the provider or the resouce in order for the information to be queried.
+ /// These arguments must be set in either the provider or the resource in order for the information to be queried.
///
public readonly string Region;
///
diff --git a/sdk/dotnet/Compute/Outputs/GetInstanceAdvancedMachineFeatureResult.cs b/sdk/dotnet/Compute/Outputs/GetInstanceAdvancedMachineFeatureResult.cs
index 82dff983ba..d35bccbb0d 100644
--- a/sdk/dotnet/Compute/Outputs/GetInstanceAdvancedMachineFeatureResult.cs
+++ b/sdk/dotnet/Compute/Outputs/GetInstanceAdvancedMachineFeatureResult.cs
@@ -18,6 +18,14 @@ public sealed class GetInstanceAdvancedMachineFeatureResult
///
public readonly bool EnableNestedVirtualization;
///
+ /// Whether to enable UEFI networking for the instance.
+ ///
+ public readonly bool EnableUefiNetworking;
+ ///
+ /// The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are "STANDARD", "ENHANCED", and "ARCHITECTURAL".
+ ///
+ public readonly string PerformanceMonitoringUnit;
+ ///
/// The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.
///
public readonly int ThreadsPerCore;
@@ -34,6 +42,10 @@ public sealed class GetInstanceAdvancedMachineFeatureResult
private GetInstanceAdvancedMachineFeatureResult(
bool enableNestedVirtualization,
+ bool enableUefiNetworking,
+
+ string performanceMonitoringUnit,
+
int threadsPerCore,
string turboMode,
@@ -41,6 +53,8 @@ private GetInstanceAdvancedMachineFeatureResult(
int visibleCoreCount)
{
EnableNestedVirtualization = enableNestedVirtualization;
+ EnableUefiNetworking = enableUefiNetworking;
+ PerformanceMonitoringUnit = performanceMonitoringUnit;
ThreadsPerCore = threadsPerCore;
TurboMode = turboMode;
VisibleCoreCount = visibleCoreCount;
diff --git a/sdk/dotnet/Compute/Outputs/GetInstanceNetworkInterfaceResult.cs b/sdk/dotnet/Compute/Outputs/GetInstanceNetworkInterfaceResult.cs
index 65f737ac44..8c1528b913 100644
--- a/sdk/dotnet/Compute/Outputs/GetInstanceNetworkInterfaceResult.cs
+++ b/sdk/dotnet/Compute/Outputs/GetInstanceNetworkInterfaceResult.cs
@@ -55,7 +55,7 @@ public sealed class GetInstanceNetworkInterfaceResult
///
public readonly string NetworkIp;
///
- /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF
+ /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA
///
public readonly string NicType;
///
diff --git a/sdk/dotnet/Compute/Outputs/GetInstanceTemplateAdvancedMachineFeatureResult.cs b/sdk/dotnet/Compute/Outputs/GetInstanceTemplateAdvancedMachineFeatureResult.cs
index 90c19ec85d..025011a608 100644
--- a/sdk/dotnet/Compute/Outputs/GetInstanceTemplateAdvancedMachineFeatureResult.cs
+++ b/sdk/dotnet/Compute/Outputs/GetInstanceTemplateAdvancedMachineFeatureResult.cs
@@ -18,6 +18,14 @@ public sealed class GetInstanceTemplateAdvancedMachineFeatureResult
///
public readonly bool EnableNestedVirtualization;
///
+ /// Whether to enable UEFI networking or not.
+ ///
+ public readonly bool EnableUefiNetworking;
+ ///
+ /// The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are "STANDARD", "ENHANCED", and "ARCHITECTURAL".
+ ///
+ public readonly string PerformanceMonitoringUnit;
+ ///
/// The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.
///
public readonly int ThreadsPerCore;
@@ -34,6 +42,10 @@ public sealed class GetInstanceTemplateAdvancedMachineFeatureResult
private GetInstanceTemplateAdvancedMachineFeatureResult(
bool enableNestedVirtualization,
+ bool enableUefiNetworking,
+
+ string performanceMonitoringUnit,
+
int threadsPerCore,
string turboMode,
@@ -41,6 +53,8 @@ private GetInstanceTemplateAdvancedMachineFeatureResult(
int visibleCoreCount)
{
EnableNestedVirtualization = enableNestedVirtualization;
+ EnableUefiNetworking = enableUefiNetworking;
+ PerformanceMonitoringUnit = performanceMonitoringUnit;
ThreadsPerCore = threadsPerCore;
TurboMode = turboMode;
VisibleCoreCount = visibleCoreCount;
diff --git a/sdk/dotnet/Compute/Outputs/GetInstanceTemplateNetworkInterfaceResult.cs b/sdk/dotnet/Compute/Outputs/GetInstanceTemplateNetworkInterfaceResult.cs
index 79dbc00c6a..567d4aea09 100644
--- a/sdk/dotnet/Compute/Outputs/GetInstanceTemplateNetworkInterfaceResult.cs
+++ b/sdk/dotnet/Compute/Outputs/GetInstanceTemplateNetworkInterfaceResult.cs
@@ -64,7 +64,7 @@ public sealed class GetInstanceTemplateNetworkInterfaceResult
///
public readonly string NetworkIp;
///
- /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET
+ /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA
///
public readonly string NicType;
///
diff --git a/sdk/dotnet/Compute/Outputs/GetRegionInstanceTemplateAdvancedMachineFeatureResult.cs b/sdk/dotnet/Compute/Outputs/GetRegionInstanceTemplateAdvancedMachineFeatureResult.cs
index 05c4f9b940..a7a77104c3 100644
--- a/sdk/dotnet/Compute/Outputs/GetRegionInstanceTemplateAdvancedMachineFeatureResult.cs
+++ b/sdk/dotnet/Compute/Outputs/GetRegionInstanceTemplateAdvancedMachineFeatureResult.cs
@@ -18,6 +18,14 @@ public sealed class GetRegionInstanceTemplateAdvancedMachineFeatureResult
///
public readonly bool EnableNestedVirtualization;
///
+ /// Whether to enable UEFI networking or not.
+ ///
+ public readonly bool EnableUefiNetworking;
+ ///
+ /// The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are "STANDARD", "ENHANCED", and "ARCHITECTURAL".
+ ///
+ public readonly string PerformanceMonitoringUnit;
+ ///
/// The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.
///
public readonly int ThreadsPerCore;
@@ -34,6 +42,10 @@ public sealed class GetRegionInstanceTemplateAdvancedMachineFeatureResult
private GetRegionInstanceTemplateAdvancedMachineFeatureResult(
bool enableNestedVirtualization,
+ bool enableUefiNetworking,
+
+ string performanceMonitoringUnit,
+
int threadsPerCore,
string turboMode,
@@ -41,6 +53,8 @@ private GetRegionInstanceTemplateAdvancedMachineFeatureResult(
int visibleCoreCount)
{
EnableNestedVirtualization = enableNestedVirtualization;
+ EnableUefiNetworking = enableUefiNetworking;
+ PerformanceMonitoringUnit = performanceMonitoringUnit;
ThreadsPerCore = threadsPerCore;
TurboMode = turboMode;
VisibleCoreCount = visibleCoreCount;
diff --git a/sdk/dotnet/Compute/Outputs/GetRegionInstanceTemplateNetworkInterfaceResult.cs b/sdk/dotnet/Compute/Outputs/GetRegionInstanceTemplateNetworkInterfaceResult.cs
index a57fa3bc89..52c5a25a5d 100644
--- a/sdk/dotnet/Compute/Outputs/GetRegionInstanceTemplateNetworkInterfaceResult.cs
+++ b/sdk/dotnet/Compute/Outputs/GetRegionInstanceTemplateNetworkInterfaceResult.cs
@@ -52,7 +52,7 @@ public sealed class GetRegionInstanceTemplateNetworkInterfaceResult
///
public readonly string NetworkIp;
///
- /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET
+ /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA
///
public readonly string NicType;
///
diff --git a/sdk/dotnet/Compute/Outputs/GetRegionNetworkEndpointGroupPscDataResult.cs b/sdk/dotnet/Compute/Outputs/GetRegionNetworkEndpointGroupPscDataResult.cs
new file mode 100644
index 0000000000..474d62d783
--- /dev/null
+++ b/sdk/dotnet/Compute/Outputs/GetRegionNetworkEndpointGroupPscDataResult.cs
@@ -0,0 +1,30 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Outputs
+{
+
+ [OutputType]
+ public sealed class GetRegionNetworkEndpointGroupPscDataResult
+ {
+ ///
+ /// The PSC producer port to use when consumer PSC NEG connects to a producer. If
+ /// this flag isn't specified for a PSC NEG with endpoint type
+ /// private-service-connect, then PSC NEG will be connected to a first port in the
+ /// available PSC producer port range.
+ ///
+ public readonly string ProducerPort;
+
+ [OutputConstructor]
+ private GetRegionNetworkEndpointGroupPscDataResult(string producerPort)
+ {
+ ProducerPort = producerPort;
+ }
+ }
+}
diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult.cs
index 33547fd4be..4bc54306ea 100644
--- a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult.cs
+++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult.cs
@@ -21,15 +21,22 @@ public sealed class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseCo
/// Rule visibility. Supported values include: "STANDARD", "PREMIUM".
///
public readonly string RuleVisibility;
+ ///
+ /// Configuration options for layer7 adaptive protection for various customizable thresholds.
+ ///
+ public readonly ImmutableArray ThresholdConfigs;
[OutputConstructor]
private GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult(
bool enable,
- string ruleVisibility)
+ string ruleVisibility,
+
+ ImmutableArray thresholdConfigs)
{
Enable = enable;
RuleVisibility = ruleVisibility;
+ ThresholdConfigs = thresholdConfigs;
}
}
}
diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigResult.cs
new file mode 100644
index 0000000000..6f9d5667cc
--- /dev/null
+++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigResult.cs
@@ -0,0 +1,60 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Outputs
+{
+
+ [OutputType]
+ public sealed class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigResult
+ {
+ public readonly double AutoDeployConfidenceThreshold;
+ public readonly int AutoDeployExpirationSec;
+ public readonly double AutoDeployImpactedBaselineThreshold;
+ public readonly double AutoDeployLoadThreshold;
+ public readonly double DetectionAbsoluteQps;
+ public readonly double DetectionLoadThreshold;
+ public readonly double DetectionRelativeToBaselineQps;
+ ///
+ /// The name of the security policy. Provide either this or a `self_link`.
+ ///
+ public readonly string Name;
+ public readonly ImmutableArray TrafficGranularityConfigs;
+
+ [OutputConstructor]
+ private GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigResult(
+ double autoDeployConfidenceThreshold,
+
+ int autoDeployExpirationSec,
+
+ double autoDeployImpactedBaselineThreshold,
+
+ double autoDeployLoadThreshold,
+
+ double detectionAbsoluteQps,
+
+ double detectionLoadThreshold,
+
+ double detectionRelativeToBaselineQps,
+
+ string name,
+
+ ImmutableArray trafficGranularityConfigs)
+ {
+ AutoDeployConfidenceThreshold = autoDeployConfidenceThreshold;
+ AutoDeployExpirationSec = autoDeployExpirationSec;
+ AutoDeployImpactedBaselineThreshold = autoDeployImpactedBaselineThreshold;
+ AutoDeployLoadThreshold = autoDeployLoadThreshold;
+ DetectionAbsoluteQps = detectionAbsoluteQps;
+ DetectionLoadThreshold = detectionLoadThreshold;
+ DetectionRelativeToBaselineQps = detectionRelativeToBaselineQps;
+ Name = name;
+ TrafficGranularityConfigs = trafficGranularityConfigs;
+ }
+ }
+}
diff --git a/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigResult.cs b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigResult.cs
new file mode 100644
index 0000000000..f4e2adc9b7
--- /dev/null
+++ b/sdk/dotnet/Compute/Outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigResult.cs
@@ -0,0 +1,42 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Outputs
+{
+
+ [OutputType]
+ public sealed class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigResult
+ {
+ ///
+ /// If enabled, traffic matching each unique value for the specified type constitutes a separate traffic unit. It can only be set to true if value is empty.
+ ///
+ public readonly bool EnableEachUniqueValue;
+ ///
+ /// Type of this configuration.
+ ///
+ public readonly string Type;
+ ///
+ /// Requests that match this value constitute a granular traffic unit.
+ ///
+ public readonly string Value;
+
+ [OutputConstructor]
+ private GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigResult(
+ bool enableEachUniqueValue,
+
+ string type,
+
+ string value)
+ {
+ EnableEachUniqueValue = enableEachUniqueValue;
+ Type = type;
+ Value = value;
+ }
+ }
+}
diff --git a/sdk/dotnet/Compute/Outputs/InstanceAdvancedMachineFeatures.cs b/sdk/dotnet/Compute/Outputs/InstanceAdvancedMachineFeatures.cs
index 53eb571460..ee1a2c9eaf 100644
--- a/sdk/dotnet/Compute/Outputs/InstanceAdvancedMachineFeatures.cs
+++ b/sdk/dotnet/Compute/Outputs/InstanceAdvancedMachineFeatures.cs
@@ -18,6 +18,14 @@ public sealed class InstanceAdvancedMachineFeatures
///
public readonly bool? EnableNestedVirtualization;
///
+ /// Whether to enable UEFI networking for instance creation.
+ ///
+ public readonly bool? EnableUefiNetworking;
+ ///
+ /// [The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.
+ ///
+ public readonly string? PerformanceMonitoringUnit;
+ ///
/// The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.
///
public readonly int? ThreadsPerCore;
@@ -34,6 +42,10 @@ public sealed class InstanceAdvancedMachineFeatures
private InstanceAdvancedMachineFeatures(
bool? enableNestedVirtualization,
+ bool? enableUefiNetworking,
+
+ string? performanceMonitoringUnit,
+
int? threadsPerCore,
string? turboMode,
@@ -41,6 +53,8 @@ private InstanceAdvancedMachineFeatures(
int? visibleCoreCount)
{
EnableNestedVirtualization = enableNestedVirtualization;
+ EnableUefiNetworking = enableUefiNetworking;
+ PerformanceMonitoringUnit = performanceMonitoringUnit;
ThreadsPerCore = threadsPerCore;
TurboMode = turboMode;
VisibleCoreCount = visibleCoreCount;
diff --git a/sdk/dotnet/Compute/Outputs/InstanceBootDiskInitializeParams.cs b/sdk/dotnet/Compute/Outputs/InstanceBootDiskInitializeParams.cs
index 1a9612a04e..4b04227036 100644
--- a/sdk/dotnet/Compute/Outputs/InstanceBootDiskInitializeParams.cs
+++ b/sdk/dotnet/Compute/Outputs/InstanceBootDiskInitializeParams.cs
@@ -69,10 +69,12 @@ public sealed class InstanceBootDiskInitializeParams
///
public readonly int? Size;
///
- /// The URL of the storage pool in which the new disk is created.
+ /// The URL or the name of the storage pool in which the new disk is created.
/// For example:
/// * https://www.googleapis.com/compute/v1/projects/{project}/zones/{zone}/storagePools/{storagePool}
/// * /projects/{project}/zones/{zone}/storagePools/{storagePool}
+ /// * /zones/{zone}/storagePools/{storagePool}
+ /// * /{storagePool}
///
public readonly string? StoragePool;
///
diff --git a/sdk/dotnet/Compute/Outputs/InstanceFromMachineImageAdvancedMachineFeatures.cs b/sdk/dotnet/Compute/Outputs/InstanceFromMachineImageAdvancedMachineFeatures.cs
index ffefb751c7..82769d1f22 100644
--- a/sdk/dotnet/Compute/Outputs/InstanceFromMachineImageAdvancedMachineFeatures.cs
+++ b/sdk/dotnet/Compute/Outputs/InstanceFromMachineImageAdvancedMachineFeatures.cs
@@ -18,6 +18,14 @@ public sealed class InstanceFromMachineImageAdvancedMachineFeatures
///
public readonly bool? EnableNestedVirtualization;
///
+ /// Whether to enable UEFI networking for the instance.
+ ///
+ public readonly bool? EnableUefiNetworking;
+ ///
+ /// The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are "STANDARD", "ENHANCED", and "ARCHITECTURAL".
+ ///
+ public readonly string? PerformanceMonitoringUnit;
+ ///
/// The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.
///
public readonly int? ThreadsPerCore;
@@ -34,6 +42,10 @@ public sealed class InstanceFromMachineImageAdvancedMachineFeatures
private InstanceFromMachineImageAdvancedMachineFeatures(
bool? enableNestedVirtualization,
+ bool? enableUefiNetworking,
+
+ string? performanceMonitoringUnit,
+
int? threadsPerCore,
string? turboMode,
@@ -41,6 +53,8 @@ private InstanceFromMachineImageAdvancedMachineFeatures(
int? visibleCoreCount)
{
EnableNestedVirtualization = enableNestedVirtualization;
+ EnableUefiNetworking = enableUefiNetworking;
+ PerformanceMonitoringUnit = performanceMonitoringUnit;
ThreadsPerCore = threadsPerCore;
TurboMode = turboMode;
VisibleCoreCount = visibleCoreCount;
diff --git a/sdk/dotnet/Compute/Outputs/InstanceFromMachineImageNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/InstanceFromMachineImageNetworkInterface.cs
index cde80671a7..bf596d6d58 100644
--- a/sdk/dotnet/Compute/Outputs/InstanceFromMachineImageNetworkInterface.cs
+++ b/sdk/dotnet/Compute/Outputs/InstanceFromMachineImageNetworkInterface.cs
@@ -55,7 +55,7 @@ public sealed class InstanceFromMachineImageNetworkInterface
///
public readonly string? NetworkIp;
///
- /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF
+ /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA
///
public readonly string? NicType;
///
diff --git a/sdk/dotnet/Compute/Outputs/InstanceFromTemplateAdvancedMachineFeatures.cs b/sdk/dotnet/Compute/Outputs/InstanceFromTemplateAdvancedMachineFeatures.cs
index ce75e7f11a..743d7a8cdf 100644
--- a/sdk/dotnet/Compute/Outputs/InstanceFromTemplateAdvancedMachineFeatures.cs
+++ b/sdk/dotnet/Compute/Outputs/InstanceFromTemplateAdvancedMachineFeatures.cs
@@ -18,6 +18,14 @@ public sealed class InstanceFromTemplateAdvancedMachineFeatures
///
public readonly bool? EnableNestedVirtualization;
///
+ /// Whether to enable UEFI networking for the instance.
+ ///
+ public readonly bool? EnableUefiNetworking;
+ ///
+ /// The PMU is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are "STANDARD", "ENHANCED", and "ARCHITECTURAL".
+ ///
+ public readonly string? PerformanceMonitoringUnit;
+ ///
/// The number of threads per physical core. To disable simultaneous multithreading (SMT) set this to 1. If unset, the maximum number of threads supported per core by the underlying processor is assumed.
///
public readonly int? ThreadsPerCore;
@@ -34,6 +42,10 @@ public sealed class InstanceFromTemplateAdvancedMachineFeatures
private InstanceFromTemplateAdvancedMachineFeatures(
bool? enableNestedVirtualization,
+ bool? enableUefiNetworking,
+
+ string? performanceMonitoringUnit,
+
int? threadsPerCore,
string? turboMode,
@@ -41,6 +53,8 @@ private InstanceFromTemplateAdvancedMachineFeatures(
int? visibleCoreCount)
{
EnableNestedVirtualization = enableNestedVirtualization;
+ EnableUefiNetworking = enableUefiNetworking;
+ PerformanceMonitoringUnit = performanceMonitoringUnit;
ThreadsPerCore = threadsPerCore;
TurboMode = turboMode;
VisibleCoreCount = visibleCoreCount;
diff --git a/sdk/dotnet/Compute/Outputs/InstanceFromTemplateNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/InstanceFromTemplateNetworkInterface.cs
index 2afb9f72ac..f2223aa019 100644
--- a/sdk/dotnet/Compute/Outputs/InstanceFromTemplateNetworkInterface.cs
+++ b/sdk/dotnet/Compute/Outputs/InstanceFromTemplateNetworkInterface.cs
@@ -55,7 +55,7 @@ public sealed class InstanceFromTemplateNetworkInterface
///
public readonly string? NetworkIp;
///
- /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF
+ /// The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA
///
public readonly string? NicType;
///
diff --git a/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs
index 5816746e3e..e5d460f7e2 100644
--- a/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs
+++ b/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs
@@ -63,7 +63,7 @@ public sealed class InstanceNetworkInterface
///
public readonly string? NetworkIp;
///
- /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF.
+ /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. In the beta provider the additional values of MRDMA and IRDMA are supported.
///
public readonly string? NicType;
///
diff --git a/sdk/dotnet/Compute/Outputs/InstanceTemplateAdvancedMachineFeatures.cs b/sdk/dotnet/Compute/Outputs/InstanceTemplateAdvancedMachineFeatures.cs
index e08a911520..b310656065 100644
--- a/sdk/dotnet/Compute/Outputs/InstanceTemplateAdvancedMachineFeatures.cs
+++ b/sdk/dotnet/Compute/Outputs/InstanceTemplateAdvancedMachineFeatures.cs
@@ -18,6 +18,14 @@ public sealed class InstanceTemplateAdvancedMachineFeatures
///
public readonly bool? EnableNestedVirtualization;
///
+ /// Whether to enable UEFI networking for instance creation.
+ ///
+ public readonly bool? EnableUefiNetworking;
+ ///
+ /// [The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.
+ ///
+ public readonly string? PerformanceMonitoringUnit;
+ ///
/// The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.
///
public readonly int? ThreadsPerCore;
@@ -34,6 +42,10 @@ public sealed class InstanceTemplateAdvancedMachineFeatures
private InstanceTemplateAdvancedMachineFeatures(
bool? enableNestedVirtualization,
+ bool? enableUefiNetworking,
+
+ string? performanceMonitoringUnit,
+
int? threadsPerCore,
string? turboMode,
@@ -41,6 +53,8 @@ private InstanceTemplateAdvancedMachineFeatures(
int? visibleCoreCount)
{
EnableNestedVirtualization = enableNestedVirtualization;
+ EnableUefiNetworking = enableUefiNetworking;
+ PerformanceMonitoringUnit = performanceMonitoringUnit;
ThreadsPerCore = threadsPerCore;
TurboMode = turboMode;
VisibleCoreCount = visibleCoreCount;
diff --git a/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs
index d2669be135..bf59f8c096 100644
--- a/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs
+++ b/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs
@@ -67,7 +67,7 @@ public sealed class InstanceTemplateNetworkInterface
///
public readonly string? NetworkIp;
///
- /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET.
+ /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported.
///
public readonly string? NicType;
///
diff --git a/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateAdvancedMachineFeatures.cs b/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateAdvancedMachineFeatures.cs
index 579977fc76..9cdfceb63c 100644
--- a/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateAdvancedMachineFeatures.cs
+++ b/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateAdvancedMachineFeatures.cs
@@ -18,6 +18,14 @@ public sealed class RegionInstanceTemplateAdvancedMachineFeatures
///
public readonly bool? EnableNestedVirtualization;
///
+ /// Whether to enable UEFI networking for instance creation.
+ ///
+ public readonly bool? EnableUefiNetworking;
+ ///
+ /// [The PMU](https://cloud.google.com/compute/docs/pmu-overview) is a hardware component within the CPU core that monitors how the processor runs code. Valid values for the level of PMU are `STANDARD`, `ENHANCED`, and `ARCHITECTURAL`.
+ ///
+ public readonly string? PerformanceMonitoringUnit;
+ ///
/// The number of threads per physical core. To disable [simultaneous multithreading (SMT)](https://cloud.google.com/compute/docs/instances/disabling-smt) set this to 1.
///
public readonly int? ThreadsPerCore;
@@ -34,6 +42,10 @@ public sealed class RegionInstanceTemplateAdvancedMachineFeatures
private RegionInstanceTemplateAdvancedMachineFeatures(
bool? enableNestedVirtualization,
+ bool? enableUefiNetworking,
+
+ string? performanceMonitoringUnit,
+
int? threadsPerCore,
string? turboMode,
@@ -41,6 +53,8 @@ private RegionInstanceTemplateAdvancedMachineFeatures(
int? visibleCoreCount)
{
EnableNestedVirtualization = enableNestedVirtualization;
+ EnableUefiNetworking = enableUefiNetworking;
+ PerformanceMonitoringUnit = performanceMonitoringUnit;
ThreadsPerCore = threadsPerCore;
TurboMode = turboMode;
VisibleCoreCount = visibleCoreCount;
diff --git a/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateNetworkInterface.cs
index 5646b82d37..283ff37d00 100644
--- a/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateNetworkInterface.cs
+++ b/sdk/dotnet/Compute/Outputs/RegionInstanceTemplateNetworkInterface.cs
@@ -54,7 +54,7 @@ public sealed class RegionInstanceTemplateNetworkInterface
///
public readonly string? NetworkIp;
///
- /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET.
+ /// The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. In the beta provider the additional values of MRDMA and IRDMA are supported.
///
public readonly string? NicType;
///
diff --git a/sdk/dotnet/Compute/Outputs/RegionNetworkEndpointGroupPscData.cs b/sdk/dotnet/Compute/Outputs/RegionNetworkEndpointGroupPscData.cs
new file mode 100644
index 0000000000..e5f7ed23ff
--- /dev/null
+++ b/sdk/dotnet/Compute/Outputs/RegionNetworkEndpointGroupPscData.cs
@@ -0,0 +1,30 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Outputs
+{
+
+ [OutputType]
+ public sealed class RegionNetworkEndpointGroupPscData
+ {
+ ///
+ /// The PSC producer port to use when consumer PSC NEG connects to a producer. If
+ /// this flag isn't specified for a PSC NEG with endpoint type
+ /// private-service-connect, then PSC NEG will be connected to a first port in the
+ /// available PSC producer port range.
+ ///
+ public readonly string? ProducerPort;
+
+ [OutputConstructor]
+ private RegionNetworkEndpointGroupPscData(string? producerPort)
+ {
+ ProducerPort = producerPort;
+ }
+ }
+}
diff --git a/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.cs b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.cs
index 9e96d7ade7..90572b8438 100644
--- a/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.cs
+++ b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.cs
@@ -21,15 +21,22 @@ public sealed class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfi
/// Rule visibility. Supported values include: "STANDARD", "PREMIUM".
///
public readonly string? RuleVisibility;
+ ///
+ /// Configuration options for layer7 adaptive protection for various customizable thresholds.
+ ///
+ public readonly ImmutableArray ThresholdConfigs;
[OutputConstructor]
private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig(
bool? enable,
- string? ruleVisibility)
+ string? ruleVisibility,
+
+ ImmutableArray thresholdConfigs)
{
Enable = enable;
RuleVisibility = ruleVisibility;
+ ThresholdConfigs = thresholdConfigs;
}
}
}
diff --git a/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.cs b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.cs
new file mode 100644
index 0000000000..5ac96cfb96
--- /dev/null
+++ b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.cs
@@ -0,0 +1,84 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Outputs
+{
+
+ [OutputType]
+ public sealed class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig
+ {
+ ///
+ /// Confidence threshold above which Adaptive Protection's auto-deploy takes actions.
+ ///
+ public readonly double? AutoDeployConfidenceThreshold;
+ ///
+ /// Duration over which Adaptive Protection's auto-deployed actions last.
+ ///
+ public readonly int? AutoDeployExpirationSec;
+ ///
+ /// Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions.
+ ///
+ public readonly double? AutoDeployImpactedBaselineThreshold;
+ ///
+ /// Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack.
+ ///
+ public readonly double? AutoDeployLoadThreshold;
+ ///
+ /// Detection threshold based on absolute QPS.
+ ///
+ public readonly double? DetectionAbsoluteQps;
+ ///
+ /// Detection threshold based on the backend service's load.
+ ///
+ public readonly double? DetectionLoadThreshold;
+ ///
+ /// Detection threshold based on QPS relative to the average of baseline traffic.
+ ///
+ public readonly double? DetectionRelativeToBaselineQps;
+ ///
+ /// The name of config. The name must be 1-63 characters long, and comply with RFC1035. The name must be unique within the security policy.
+ ///
+ public readonly string Name;
+ ///
+ /// Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below.
+ ///
+ public readonly ImmutableArray TrafficGranularityConfigs;
+
+ [OutputConstructor]
+ private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig(
+ double? autoDeployConfidenceThreshold,
+
+ int? autoDeployExpirationSec,
+
+ double? autoDeployImpactedBaselineThreshold,
+
+ double? autoDeployLoadThreshold,
+
+ double? detectionAbsoluteQps,
+
+ double? detectionLoadThreshold,
+
+ double? detectionRelativeToBaselineQps,
+
+ string name,
+
+ ImmutableArray trafficGranularityConfigs)
+ {
+ AutoDeployConfidenceThreshold = autoDeployConfidenceThreshold;
+ AutoDeployExpirationSec = autoDeployExpirationSec;
+ AutoDeployImpactedBaselineThreshold = autoDeployImpactedBaselineThreshold;
+ AutoDeployLoadThreshold = autoDeployLoadThreshold;
+ DetectionAbsoluteQps = detectionAbsoluteQps;
+ DetectionLoadThreshold = detectionLoadThreshold;
+ DetectionRelativeToBaselineQps = detectionRelativeToBaselineQps;
+ Name = name;
+ TrafficGranularityConfigs = trafficGranularityConfigs;
+ }
+ }
+}
diff --git a/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.cs b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.cs
new file mode 100644
index 0000000000..83658e79ba
--- /dev/null
+++ b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.cs
@@ -0,0 +1,44 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Compute.Outputs
+{
+
+ [OutputType]
+ public sealed class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig
+ {
+ ///
+ /// If enabled, traffic matching each unique value for the specified type constitutes a separate traffic unit. It can only be set to true if value is empty.
+ ///
+ public readonly bool? EnableEachUniqueValue;
+ ///
+ /// The type of this configuration, a granular traffic unit can be one of the following:
+ /// * `HTTP_HEADER_HOST`
+ /// * `HTTP_PATH`
+ ///
+ public readonly string Type;
+ ///
+ /// Requests that match this value constitute a granular traffic unit.
+ ///
+ public readonly string? Value;
+
+ [OutputConstructor]
+ private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig(
+ bool? enableEachUniqueValue,
+
+ string type,
+
+ string? value)
+ {
+ EnableEachUniqueValue = enableEachUniqueValue;
+ Type = type;
+ Value = value;
+ }
+ }
+}
diff --git a/sdk/dotnet/Compute/Outputs/URLMapPathMatcher.cs b/sdk/dotnet/Compute/Outputs/URLMapPathMatcher.cs
index 35eef5b86e..9f63037d71 100644
--- a/sdk/dotnet/Compute/Outputs/URLMapPathMatcher.cs
+++ b/sdk/dotnet/Compute/Outputs/URLMapPathMatcher.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.Compute.Outputs
public sealed class URLMapPathMatcher
{
///
- /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.
+ /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.
/// This policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.
/// For example, consider a UrlMap with the following configuration:
/// UrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors
diff --git a/sdk/dotnet/Compute/Outputs/URLMapPathMatcherPathRule.cs b/sdk/dotnet/Compute/Outputs/URLMapPathMatcherPathRule.cs
index fef7c0dfa7..a8f1397143 100644
--- a/sdk/dotnet/Compute/Outputs/URLMapPathMatcherPathRule.cs
+++ b/sdk/dotnet/Compute/Outputs/URLMapPathMatcherPathRule.cs
@@ -14,7 +14,7 @@ namespace Pulumi.Gcp.Compute.Outputs
public sealed class URLMapPathMatcherPathRule
{
///
- /// customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.
+ /// customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.
/// If a policy for an error code is not configured for the PathRule, a policy for the error code configured in pathMatcher.defaultCustomErrorResponsePolicy is applied. If one is not specified in pathMatcher.defaultCustomErrorResponsePolicy, the policy configured in UrlMap.defaultCustomErrorResponsePolicy takes effect.
/// For example, consider a UrlMap with the following configuration:
/// UrlMap.defaultCustomErrorResponsePolicy are configured with policies for 5xx and 4xx errors
diff --git a/sdk/dotnet/Compute/RegionHealthCheck.cs b/sdk/dotnet/Compute/RegionHealthCheck.cs
index 2aa7a3048c..dbbe405ba6 100644
--- a/sdk/dotnet/Compute/RegionHealthCheck.cs
+++ b/sdk/dotnet/Compute/RegionHealthCheck.cs
@@ -434,6 +434,12 @@ public partial class RegionHealthCheck : global::Pulumi.CustomResource
[Output("grpcHealthCheck")]
public Output GrpcHealthCheck { get; private set; } = null!;
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Output("healthCheckId")]
+ public Output HealthCheckId { get; private set; } = null!;
+
///
/// A so-far unhealthy instance will be marked healthy after this many
/// consecutive successes. The default value is 2.
@@ -734,6 +740,12 @@ public sealed class RegionHealthCheckState : global::Pulumi.ResourceArgs
[Input("grpcHealthCheck")]
public Input? GrpcHealthCheck { get; set; }
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Input("healthCheckId")]
+ public Input? HealthCheckId { get; set; }
+
///
/// A so-far unhealthy instance will be marked healthy after this many
/// consecutive successes. The default value is 2.
diff --git a/sdk/dotnet/Compute/RegionInstanceGroupManager.cs b/sdk/dotnet/Compute/RegionInstanceGroupManager.cs
index bbb679f6bd..0ada0c4c2c 100644
--- a/sdk/dotnet/Compute/RegionInstanceGroupManager.cs
+++ b/sdk/dotnet/Compute/RegionInstanceGroupManager.cs
@@ -255,6 +255,12 @@ public partial class RegionInstanceGroupManager : global::Pulumi.CustomResource
[Output("instanceGroup")]
public Output InstanceGroup { get; private set; } = null!;
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Output("instanceGroupManagerId")]
+ public Output InstanceGroupManagerId { get; private set; } = null!;
+
///
/// The instance lifecycle policy for this managed instance group.
///
@@ -765,6 +771,12 @@ public InputList DistributionPolicyZones
[Input("instanceGroup")]
public Input? InstanceGroup { get; set; }
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Input("instanceGroupManagerId")]
+ public Input? InstanceGroupManagerId { get; set; }
+
///
/// The instance lifecycle policy for this managed instance group.
///
diff --git a/sdk/dotnet/Compute/RegionNetworkEndpoint.cs b/sdk/dotnet/Compute/RegionNetworkEndpoint.cs
index a165bdb7f5..e4e1ae8764 100644
--- a/sdk/dotnet/Compute/RegionNetworkEndpoint.cs
+++ b/sdk/dotnet/Compute/RegionNetworkEndpoint.cs
@@ -229,6 +229,12 @@ public partial class RegionNetworkEndpoint : global::Pulumi.CustomResource
[Output("ipAddress")]
public Output IpAddress { get; private set; } = null!;
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Output("networkEndpointId")]
+ public Output NetworkEndpointId { get; private set; } = null!;
+
///
/// Port number of network endpoint.
///
@@ -393,6 +399,12 @@ public sealed class RegionNetworkEndpointState : global::Pulumi.ResourceArgs
[Input("ipAddress")]
public Input? IpAddress { get; set; }
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Input("networkEndpointId")]
+ public Input? NetworkEndpointId { get; set; }
+
///
/// Port number of network endpoint.
///
diff --git a/sdk/dotnet/Compute/RegionNetworkEndpointGroup.cs b/sdk/dotnet/Compute/RegionNetworkEndpointGroup.cs
index c36de6b0b7..00576cccc1 100644
--- a/sdk/dotnet/Compute/RegionNetworkEndpointGroup.cs
+++ b/sdk/dotnet/Compute/RegionNetworkEndpointGroup.cs
@@ -323,7 +323,12 @@ namespace Pulumi.Gcp.Compute
/// Region = "europe-west4",
/// LoadBalancingScheme = "INTERNAL",
/// BackendService = defaultRegionBackendService.Id,
- /// AllPorts = true,
+ /// Ports = new[]
+ /// {
+ /// "80",
+ /// "88",
+ /// "443",
+ /// },
/// Network = @default.Name,
/// Subnetwork = defaultSubnetwork.Name,
/// });
@@ -348,6 +353,10 @@ namespace Pulumi.Gcp.Compute
/// Region = "europe-west4",
/// NetworkEndpointType = "PRIVATE_SERVICE_CONNECT",
/// PscTargetService = defaultServiceAttachment.SelfLink,
+ /// PscData = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupPscDataArgs
+ /// {
+ /// ProducerPort = "88",
+ /// },
/// Network = @default.SelfLink,
/// Subnetwork = defaultSubnetwork.SelfLink,
/// });
@@ -538,6 +547,13 @@ public partial class RegionNetworkEndpointGroup : global::Pulumi.CustomResource
[Output("project")]
public Output Project { get; private set; } = null!;
+ ///
+ /// This field is only used for PSC NEGs.
+ /// Structure is documented below.
+ ///
+ [Output("pscData")]
+ public Output PscData { get; private set; } = null!;
+
///
/// This field is only used for PSC and INTERNET NEGs.
/// The target service url used to set up private service connection to
@@ -688,6 +704,13 @@ public sealed class RegionNetworkEndpointGroupArgs : global::Pulumi.ResourceArgs
[Input("project")]
public Input? Project { get; set; }
+ ///
+ /// This field is only used for PSC NEGs.
+ /// Structure is documented below.
+ ///
+ [Input("pscData")]
+ public Input? PscData { get; set; }
+
///
/// This field is only used for PSC and INTERNET NEGs.
/// The target service url used to set up private service connection to
@@ -794,6 +817,13 @@ public sealed class RegionNetworkEndpointGroupState : global::Pulumi.ResourceArg
[Input("project")]
public Input? Project { get; set; }
+ ///
+ /// This field is only used for PSC NEGs.
+ /// Structure is documented below.
+ ///
+ [Input("pscData")]
+ public Input? PscData { get; set; }
+
///
/// This field is only used for PSC and INTERNET NEGs.
/// The target service url used to set up private service connection to
diff --git a/sdk/dotnet/Compute/Subnetwork.cs b/sdk/dotnet/Compute/Subnetwork.cs
index b60b21943c..f9ffd1619c 100644
--- a/sdk/dotnet/Compute/Subnetwork.cs
+++ b/sdk/dotnet/Compute/Subnetwork.cs
@@ -576,6 +576,12 @@ public partial class Subnetwork : global::Pulumi.CustomResource
[Output("stackType")]
public Output StackType { get; private set; } = null!;
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Output("subnetworkId")]
+ public Output SubnetworkId { get; private set; } = null!;
+
///
/// Create a Subnetwork resource with the given unique name, arguments, and options.
@@ -997,6 +1003,12 @@ public InputList SecondaryIpRanges
[Input("stackType")]
public Input? StackType { get; set; }
+ ///
+ /// The unique identifier number for the resource. This identifier is defined by the server.
+ ///
+ [Input("subnetworkId")]
+ public Input? SubnetworkId { get; set; }
+
public SubnetworkState()
{
}
diff --git a/sdk/dotnet/Compute/URLMap.cs b/sdk/dotnet/Compute/URLMap.cs
index 832211cac9..d18771c297 100644
--- a/sdk/dotnet/Compute/URLMap.cs
+++ b/sdk/dotnet/Compute/URLMap.cs
@@ -1230,7 +1230,7 @@ public partial class URLMap : global::Pulumi.CustomResource
public Output CreationTimestamp { get; private set; } = null!;
///
- /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.
+ /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.
/// This policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.
/// For example, consider a UrlMap with the following configuration:
/// UrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors
@@ -1395,7 +1395,7 @@ public static URLMap Get(string name, Input id, URLMapState? state = nul
public sealed class URLMapArgs : global::Pulumi.ResourceArgs
{
///
- /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.
+ /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.
/// This policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.
/// For example, consider a UrlMap with the following configuration:
/// UrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors
@@ -1527,7 +1527,7 @@ public sealed class URLMapState : global::Pulumi.ResourceArgs
public Input? CreationTimestamp { get; set; }
///
- /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error.
+ /// defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendService or BackendBucket responds with an error.
/// This policy takes effect at the PathMatcher level and applies only when no policy has been defined for the error code at lower levels like RouteRule and PathRule within this PathMatcher. If an error code does not have a policy defined in defaultCustomErrorResponsePolicy, then a policy defined for the error code in UrlMap.defaultCustomErrorResponsePolicy takes effect.
/// For example, consider a UrlMap with the following configuration:
/// UrlMap.defaultCustomErrorResponsePolicy is configured with policies for 5xx and 4xx errors
diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs
index 06fff130ba..42fbf0acf2 100644
--- a/sdk/dotnet/Config/Config.cs
+++ b/sdk/dotnet/Config/Config.cs
@@ -662,6 +662,13 @@ public static string? FirestoreCustomEndpoint
set => _firestoreCustomEndpoint.Set(value);
}
+ private static readonly __Value _geminiCustomEndpoint = new __Value(() => __config.Get("geminiCustomEndpoint"));
+ public static string? GeminiCustomEndpoint
+ {
+ get => _geminiCustomEndpoint.Get();
+ set => _geminiCustomEndpoint.Set(value);
+ }
+
private static readonly __Value _gkeBackupCustomEndpoint = new __Value(() => __config.Get("gkeBackupCustomEndpoint"));
public static string? GkeBackupCustomEndpoint
{
diff --git a/sdk/dotnet/Container/Cluster.cs b/sdk/dotnet/Container/Cluster.cs
index 679f676025..a0b49ee20f 100644
--- a/sdk/dotnet/Container/Cluster.cs
+++ b/sdk/dotnet/Container/Cluster.cs
@@ -387,6 +387,15 @@ public partial class Cluster : global::Pulumi.CustomResource
[Output("endpoint")]
public Output Endpoint { get; private set; } = null!;
+ ///
+ /// Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below.
+ ///
+ ///
+ /// <a name="nested_default_snat_status"></a>The `default_snat_status` block supports
+ ///
+ [Output("enterpriseConfig")]
+ public Output EnterpriseConfig { get; private set; } = null!;
+
///
/// Fleet configuration for the cluster. Structure is documented below.
///
@@ -791,8 +800,6 @@ public partial class Cluster : global::Pulumi.CustomResource
///
/// Configuration for [direct-path (via ALTS) with workload identity.](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#workloadaltsconfig). Structure is documented below.
- ///
- /// <a name="nested_default_snat_status"></a>The `default_snat_status` block supports
///
[Output("workloadAltsConfig")]
public Output WorkloadAltsConfig { get; private set; } = null!;
@@ -1052,6 +1059,15 @@ public sealed class ClusterArgs : global::Pulumi.ResourceArgs
[Input("enableTpu")]
public Input? EnableTpu { get; set; }
+ ///
+ /// Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below.
+ ///
+ ///
+ /// <a name="nested_default_snat_status"></a>The `default_snat_status` block supports
+ ///
+ [Input("enterpriseConfig")]
+ public Input? EnterpriseConfig { get; set; }
+
///
/// Fleet configuration for the cluster. Structure is documented below.
///
@@ -1428,8 +1444,6 @@ public InputMap ResourceLabels
///
/// Configuration for [direct-path (via ALTS) with workload identity.](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#workloadaltsconfig). Structure is documented below.
- ///
- /// <a name="nested_default_snat_status"></a>The `default_snat_status` block supports
///
[Input("workloadAltsConfig")]
public Input? WorkloadAltsConfig { get; set; }
@@ -1668,6 +1682,15 @@ public InputMap EffectiveLabels
[Input("endpoint")]
public Input? Endpoint { get; set; }
+ ///
+ /// Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below.
+ ///
+ ///
+ /// <a name="nested_default_snat_status"></a>The `default_snat_status` block supports
+ ///
+ [Input("enterpriseConfig")]
+ public Input? EnterpriseConfig { get; set; }
+
///
/// Fleet configuration for the cluster. Structure is documented below.
///
@@ -2100,8 +2123,6 @@ public InputMap ResourceLabels
///
/// Configuration for [direct-path (via ALTS) with workload identity.](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters#workloadaltsconfig). Structure is documented below.
- ///
- /// <a name="nested_default_snat_status"></a>The `default_snat_status` block supports
///
[Input("workloadAltsConfig")]
public Input? WorkloadAltsConfig { get; set; }
diff --git a/sdk/dotnet/Container/GetCluster.cs b/sdk/dotnet/Container/GetCluster.cs
index 3a2eb4396d..1fd1e57f21 100644
--- a/sdk/dotnet/Container/GetCluster.cs
+++ b/sdk/dotnet/Container/GetCluster.cs
@@ -169,6 +169,7 @@ public sealed class GetClusterResult
public readonly bool EnableShieldedNodes;
public readonly bool EnableTpu;
public readonly string Endpoint;
+ public readonly ImmutableArray EnterpriseConfigs;
public readonly ImmutableArray Fleets;
public readonly ImmutableArray GatewayApiConfigs;
///
@@ -287,6 +288,8 @@ private GetClusterResult(
string endpoint,
+ ImmutableArray enterpriseConfigs,
+
ImmutableArray fleets,
ImmutableArray gatewayApiConfigs,
@@ -421,6 +424,7 @@ private GetClusterResult(
EnableShieldedNodes = enableShieldedNodes;
EnableTpu = enableTpu;
Endpoint = endpoint;
+ EnterpriseConfigs = enterpriseConfigs;
Fleets = fleets;
GatewayApiConfigs = gatewayApiConfigs;
Id = id;
diff --git a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.cs b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.cs
index 048d10cabc..be4a5b6703 100644
--- a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.cs
@@ -25,7 +25,7 @@ public sealed class ClusterClusterAutoscalingAutoProvisioningDefaultsArgs : glob
public Input? DiskSize { get; set; }
///
- /// Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard`
+ /// Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd', 'pd-balanced', or 'hyperdisk-balanced'). Defaults to `hyperdisk-balanced` if `hyperdisk-balanced` is supported and `pd-balanced` is not supported for the machine type; otherwise defaults to `pd-balanced`.
///
[Input("diskType")]
public Input? DiskType { get; set; }
diff --git a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs.cs
index 80bb84f403..4e4ef72798 100644
--- a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs.cs
@@ -25,7 +25,7 @@ public sealed class ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs : g
public Input? DiskSize { get; set; }
///
- /// Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard`
+ /// Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd', 'pd-balanced', or 'hyperdisk-balanced'). Defaults to `hyperdisk-balanced` if `hyperdisk-balanced` is supported and `pd-balanced` is not supported for the machine type; otherwise defaults to `pd-balanced`.
///
[Input("diskType")]
public Input? DiskType { get; set; }
diff --git a/sdk/dotnet/Container/Inputs/ClusterEnterpriseConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterEnterpriseConfigArgs.cs
new file mode 100644
index 0000000000..f608a13671
--- /dev/null
+++ b/sdk/dotnet/Container/Inputs/ClusterEnterpriseConfigArgs.cs
@@ -0,0 +1,32 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Container.Inputs
+{
+
+ public sealed class ClusterEnterpriseConfigArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// The effective tier of the cluster.
+ ///
+ [Input("clusterTier")]
+ public Input? ClusterTier { get; set; }
+
+ ///
+ /// Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`.
+ ///
+ [Input("desiredTier")]
+ public Input? DesiredTier { get; set; }
+
+ public ClusterEnterpriseConfigArgs()
+ {
+ }
+ public static new ClusterEnterpriseConfigArgs Empty => new ClusterEnterpriseConfigArgs();
+ }
+}
diff --git a/sdk/dotnet/Container/Inputs/ClusterEnterpriseConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterEnterpriseConfigGetArgs.cs
new file mode 100644
index 0000000000..e0620f9f2b
--- /dev/null
+++ b/sdk/dotnet/Container/Inputs/ClusterEnterpriseConfigGetArgs.cs
@@ -0,0 +1,32 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Container.Inputs
+{
+
+ public sealed class ClusterEnterpriseConfigGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// The effective tier of the cluster.
+ ///
+ [Input("clusterTier")]
+ public Input? ClusterTier { get; set; }
+
+ ///
+ /// Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`.
+ ///
+ [Input("desiredTier")]
+ public Input? DesiredTier { get; set; }
+
+ public ClusterEnterpriseConfigGetArgs()
+ {
+ }
+ public static new ClusterEnterpriseConfigGetArgs Empty => new ClusterEnterpriseConfigGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs
index 7bbe77ff8c..69d198c6f3 100644
--- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs
@@ -185,6 +185,15 @@ public InputMap Labels
[Input("localSsdCount")]
public Input? LocalSsdCount { get; set; }
+ ///
+ /// Possible Local SSD encryption modes:
+ /// Accepted values are:
+ /// * `STANDARD_ENCRYPTION`: The given node will be encrypted using keys managed by Google infrastructure and the keys wll be deleted when the node is deleted.
+ /// * `EPHEMERAL_KEY_ENCRYPTION`: The given node will opt-in for using ephemeral key for encrypting Local SSDs. The Local SSDs will not be able to recover data in case of node crash.
+ ///
+ [Input("localSsdEncryptionMode")]
+ public Input? LocalSsdEncryptionMode { get; set; }
+
///
/// Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.
///
diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs
index 69c2742daa..78561c40f2 100644
--- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs
@@ -185,6 +185,15 @@ public InputMap Labels
[Input("localSsdCount")]
public Input? LocalSsdCount { get; set; }
+ ///
+ /// Possible Local SSD encryption modes:
+ /// Accepted values are:
+ /// * `STANDARD_ENCRYPTION`: The given node will be encrypted using keys managed by Google infrastructure and the keys wll be deleted when the node is deleted.
+ /// * `EPHEMERAL_KEY_ENCRYPTION`: The given node will opt-in for using ephemeral key for encrypting Local SSDs. The Local SSDs will not be able to recover data in case of node crash.
+ ///
+ [Input("localSsdEncryptionMode")]
+ public Input? LocalSsdEncryptionMode { get; set; }
+
///
/// Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.
///
diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigArgs.cs
index 5e989f928b..420c1d31d7 100644
--- a/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigArgs.cs
@@ -12,6 +12,12 @@ namespace Pulumi.Gcp.Container.Inputs
public sealed class ClusterNodePoolAutoConfigArgs : global::Pulumi.ResourceArgs
{
+ ///
+ /// Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroup_mode` field is supported in `node_pool_auto_config`. Structure is documented below.
+ ///
+ [Input("linuxNodeConfig")]
+ public Input? LinuxNodeConfig { get; set; }
+
///
/// The network tag config for the cluster's automatically provisioned node pools. Structure is documented below.
///
diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigGetArgs.cs
index 8def989ddf..c791c8eac0 100644
--- a/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigGetArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigGetArgs.cs
@@ -12,6 +12,12 @@ namespace Pulumi.Gcp.Container.Inputs
public sealed class ClusterNodePoolAutoConfigGetArgs : global::Pulumi.ResourceArgs
{
+ ///
+ /// Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroup_mode` field is supported in `node_pool_auto_config`. Structure is documented below.
+ ///
+ [Input("linuxNodeConfig")]
+ public Input? LinuxNodeConfig { get; set; }
+
///
/// The network tag config for the cluster's automatically provisioned node pools. Structure is documented below.
///
diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigLinuxNodeConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigLinuxNodeConfigArgs.cs
new file mode 100644
index 0000000000..9cfe45cf0f
--- /dev/null
+++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigLinuxNodeConfigArgs.cs
@@ -0,0 +1,30 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Container.Inputs
+{
+
+ public sealed class ClusterNodePoolAutoConfigLinuxNodeConfigArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Possible cgroup modes that can be used.
+ /// Accepted values are:
+ /// * `CGROUP_MODE_UNSPECIFIED`: CGROUP_MODE_UNSPECIFIED is when unspecified cgroup configuration is used. The default for the GKE node OS image will be used.
+ /// * `CGROUP_MODE_V1`: CGROUP_MODE_V1 specifies to use cgroupv1 for the cgroup configuration on the node image.
+ /// * `CGROUP_MODE_V2`: CGROUP_MODE_V2 specifies to use cgroupv2 for the cgroup configuration on the node image.
+ ///
+ [Input("cgroupMode")]
+ public Input? CgroupMode { get; set; }
+
+ public ClusterNodePoolAutoConfigLinuxNodeConfigArgs()
+ {
+ }
+ public static new ClusterNodePoolAutoConfigLinuxNodeConfigArgs Empty => new ClusterNodePoolAutoConfigLinuxNodeConfigArgs();
+ }
+}
diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigLinuxNodeConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigLinuxNodeConfigGetArgs.cs
new file mode 100644
index 0000000000..faa6b91455
--- /dev/null
+++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolAutoConfigLinuxNodeConfigGetArgs.cs
@@ -0,0 +1,30 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Container.Inputs
+{
+
+ public sealed class ClusterNodePoolAutoConfigLinuxNodeConfigGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Possible cgroup modes that can be used.
+ /// Accepted values are:
+ /// * `CGROUP_MODE_UNSPECIFIED`: CGROUP_MODE_UNSPECIFIED is when unspecified cgroup configuration is used. The default for the GKE node OS image will be used.
+ /// * `CGROUP_MODE_V1`: CGROUP_MODE_V1 specifies to use cgroupv1 for the cgroup configuration on the node image.
+ /// * `CGROUP_MODE_V2`: CGROUP_MODE_V2 specifies to use cgroupv2 for the cgroup configuration on the node image.
+ ///
+ [Input("cgroupMode")]
+ public Input? CgroupMode { get; set; }
+
+ public ClusterNodePoolAutoConfigLinuxNodeConfigGetArgs()
+ {
+ }
+ public static new ClusterNodePoolAutoConfigLinuxNodeConfigGetArgs Empty => new ClusterNodePoolAutoConfigLinuxNodeConfigGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs
index 6682fd64ef..ef2faa7f8b 100644
--- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs
@@ -185,6 +185,15 @@ public InputMap Labels
[Input("localSsdCount")]
public Input? LocalSsdCount { get; set; }
+ ///
+ /// Possible Local SSD encryption modes:
+ /// Accepted values are:
+ /// * `STANDARD_ENCRYPTION`: The given node will be encrypted using keys managed by Google infrastructure and the keys wll be deleted when the node is deleted.
+ /// * `EPHEMERAL_KEY_ENCRYPTION`: The given node will opt-in for using ephemeral key for encrypting Local SSDs. The Local SSDs will not be able to recover data in case of node crash.
+ ///
+ [Input("localSsdEncryptionMode")]
+ public Input? LocalSsdEncryptionMode { get; set; }
+
///
/// Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.
///
diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs
index 2760632768..a6856e2861 100644
--- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs
@@ -185,6 +185,15 @@ public InputMap Labels
[Input("localSsdCount")]
public Input? LocalSsdCount { get; set; }
+ ///
+ /// Possible Local SSD encryption modes:
+ /// Accepted values are:
+ /// * `STANDARD_ENCRYPTION`: The given node will be encrypted using keys managed by Google infrastructure and the keys wll be deleted when the node is deleted.
+ /// * `EPHEMERAL_KEY_ENCRYPTION`: The given node will opt-in for using ephemeral key for encrypting Local SSDs. The Local SSDs will not be able to recover data in case of node crash.
+ ///
+ [Input("localSsdEncryptionMode")]
+ public Input? LocalSsdEncryptionMode { get; set; }
+
///
/// Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.
///
diff --git a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigArgs.cs
index 26b8bb3eb8..0e26a4777c 100644
--- a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigArgs.cs
+++ b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigArgs.cs
@@ -156,6 +156,12 @@ public InputMap Labels
[Input("localSsdCount")]
public Input? LocalSsdCount { get; set; }
+ ///
+ /// LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node.
+ ///
+ [Input("localSsdEncryptionMode")]
+ public Input? LocalSsdEncryptionMode { get; set; }
+
///
/// Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT.
///
diff --git a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigGetArgs.cs
index a75e53876f..2d3cd2677d 100644
--- a/sdk/dotnet/Container/Inputs/NodePoolNodeConfigGetArgs.cs
+++ b/sdk/dotnet/Container/Inputs/NodePoolNodeConfigGetArgs.cs
@@ -156,6 +156,12 @@ public InputMap Labels
[Input("localSsdCount")]
public Input? LocalSsdCount { get; set; }
+ ///
+ /// LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node.
+ ///
+ [Input("localSsdEncryptionMode")]
+ public Input? LocalSsdEncryptionMode { get; set; }
+
///
/// Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT.
///
diff --git a/sdk/dotnet/Container/Outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.cs b/sdk/dotnet/Container/Outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.cs
index 855619655b..0557aab686 100644
--- a/sdk/dotnet/Container/Outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.cs
+++ b/sdk/dotnet/Container/Outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.cs
@@ -22,7 +22,7 @@ public sealed class ClusterClusterAutoscalingAutoProvisioningDefaults
///
public readonly int? DiskSize;
///
- /// Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard`
+ /// Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd', 'pd-balanced', or 'hyperdisk-balanced'). Defaults to `hyperdisk-balanced` if `hyperdisk-balanced` is supported and `pd-balanced` is not supported for the machine type; otherwise defaults to `pd-balanced`.
///
public readonly string? DiskType;
///
diff --git a/sdk/dotnet/Container/Outputs/ClusterEnterpriseConfig.cs b/sdk/dotnet/Container/Outputs/ClusterEnterpriseConfig.cs
new file mode 100644
index 0000000000..2fc5a1d5bc
--- /dev/null
+++ b/sdk/dotnet/Container/Outputs/ClusterEnterpriseConfig.cs
@@ -0,0 +1,35 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Container.Outputs
+{
+
+ [OutputType]
+ public sealed class ClusterEnterpriseConfig
+ {
+ ///
+ /// The effective tier of the cluster.
+ ///
+ public readonly string? ClusterTier;
+ ///
+ /// Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`.
+ ///
+ public readonly string? DesiredTier;
+
+ [OutputConstructor]
+ private ClusterEnterpriseConfig(
+ string? clusterTier,
+
+ string? desiredTier)
+ {
+ ClusterTier = clusterTier;
+ DesiredTier = desiredTier;
+ }
+ }
+}
diff --git a/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs
index 1c818ea1cc..e11207a6c5 100644
--- a/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs
+++ b/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs
@@ -127,6 +127,13 @@ public sealed class ClusterNodeConfig
///
public readonly int? LocalSsdCount;
///
+ /// Possible Local SSD encryption modes:
+ /// Accepted values are:
+ /// * `STANDARD_ENCRYPTION`: The given node will be encrypted using keys managed by Google infrastructure and the keys wll be deleted when the node is deleted.
+ /// * `EPHEMERAL_KEY_ENCRYPTION`: The given node will opt-in for using ephemeral key for encrypting Local SSDs. The Local SSDs will not be able to recover data in case of node crash.
+ ///
+ public readonly string? LocalSsdEncryptionMode;
+ ///
/// Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.
///
public readonly string? LoggingVariant;
@@ -280,6 +287,8 @@ private ClusterNodeConfig(
int? localSsdCount,
+ string? localSsdEncryptionMode,
+
string? loggingVariant,
string? machineType,
@@ -341,6 +350,7 @@ private ClusterNodeConfig(
LinuxNodeConfig = linuxNodeConfig;
LocalNvmeSsdBlockConfig = localNvmeSsdBlockConfig;
LocalSsdCount = localSsdCount;
+ LocalSsdEncryptionMode = localSsdEncryptionMode;
LoggingVariant = loggingVariant;
MachineType = machineType;
Metadata = metadata;
diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePoolAutoConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodePoolAutoConfig.cs
index 57f44e1a83..98657c67e2 100644
--- a/sdk/dotnet/Container/Outputs/ClusterNodePoolAutoConfig.cs
+++ b/sdk/dotnet/Container/Outputs/ClusterNodePoolAutoConfig.cs
@@ -13,6 +13,10 @@ namespace Pulumi.Gcp.Container.Outputs
[OutputType]
public sealed class ClusterNodePoolAutoConfig
{
+ ///
+ /// Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroup_mode` field is supported in `node_pool_auto_config`. Structure is documented below.
+ ///
+ public readonly Outputs.ClusterNodePoolAutoConfigLinuxNodeConfig? LinuxNodeConfig;
///
/// The network tag config for the cluster's automatically provisioned node pools. Structure is documented below.
///
@@ -29,12 +33,15 @@ public sealed class ClusterNodePoolAutoConfig
[OutputConstructor]
private ClusterNodePoolAutoConfig(
+ Outputs.ClusterNodePoolAutoConfigLinuxNodeConfig? linuxNodeConfig,
+
Outputs.ClusterNodePoolAutoConfigNetworkTags? networkTags,
Outputs.ClusterNodePoolAutoConfigNodeKubeletConfig? nodeKubeletConfig,
ImmutableDictionary? resourceManagerTags)
{
+ LinuxNodeConfig = linuxNodeConfig;
NetworkTags = networkTags;
NodeKubeletConfig = nodeKubeletConfig;
ResourceManagerTags = resourceManagerTags;
diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePoolAutoConfigLinuxNodeConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodePoolAutoConfigLinuxNodeConfig.cs
new file mode 100644
index 0000000000..7d702f6848
--- /dev/null
+++ b/sdk/dotnet/Container/Outputs/ClusterNodePoolAutoConfigLinuxNodeConfig.cs
@@ -0,0 +1,31 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Container.Outputs
+{
+
+ [OutputType]
+ public sealed class ClusterNodePoolAutoConfigLinuxNodeConfig
+ {
+ ///
+ /// Possible cgroup modes that can be used.
+ /// Accepted values are:
+ /// * `CGROUP_MODE_UNSPECIFIED`: CGROUP_MODE_UNSPECIFIED is when unspecified cgroup configuration is used. The default for the GKE node OS image will be used.
+ /// * `CGROUP_MODE_V1`: CGROUP_MODE_V1 specifies to use cgroupv1 for the cgroup configuration on the node image.
+ /// * `CGROUP_MODE_V2`: CGROUP_MODE_V2 specifies to use cgroupv2 for the cgroup configuration on the node image.
+ ///
+ public readonly string? CgroupMode;
+
+ [OutputConstructor]
+ private ClusterNodePoolAutoConfigLinuxNodeConfig(string? cgroupMode)
+ {
+ CgroupMode = cgroupMode;
+ }
+ }
+}
diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs
index 8606c0f983..a1b58a3cdb 100644
--- a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs
+++ b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs
@@ -127,6 +127,13 @@ public sealed class ClusterNodePoolNodeConfig
///
public readonly int? LocalSsdCount;
///
+ /// Possible Local SSD encryption modes:
+ /// Accepted values are:
+ /// * `STANDARD_ENCRYPTION`: The given node will be encrypted using keys managed by Google infrastructure and the keys wll be deleted when the node is deleted.
+ /// * `EPHEMERAL_KEY_ENCRYPTION`: The given node will opt-in for using ephemeral key for encrypting Local SSDs. The Local SSDs will not be able to recover data in case of node crash.
+ ///
+ public readonly string? LocalSsdEncryptionMode;
+ ///
/// Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.
///
public readonly string? LoggingVariant;
@@ -280,6 +287,8 @@ private ClusterNodePoolNodeConfig(
int? localSsdCount,
+ string? localSsdEncryptionMode,
+
string? loggingVariant,
string? machineType,
@@ -341,6 +350,7 @@ private ClusterNodePoolNodeConfig(
LinuxNodeConfig = linuxNodeConfig;
LocalNvmeSsdBlockConfig = localNvmeSsdBlockConfig;
LocalSsdCount = localSsdCount;
+ LocalSsdEncryptionMode = localSsdEncryptionMode;
LoggingVariant = loggingVariant;
MachineType = machineType;
Metadata = metadata;
diff --git a/sdk/dotnet/Container/Outputs/GetClusterEnterpriseConfigResult.cs b/sdk/dotnet/Container/Outputs/GetClusterEnterpriseConfigResult.cs
new file mode 100644
index 0000000000..24465fa362
--- /dev/null
+++ b/sdk/dotnet/Container/Outputs/GetClusterEnterpriseConfigResult.cs
@@ -0,0 +1,35 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Container.Outputs
+{
+
+ [OutputType]
+ public sealed class GetClusterEnterpriseConfigResult
+ {
+ ///
+ /// Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE.
+ ///
+ public readonly string ClusterTier;
+ ///
+ /// Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE.
+ ///
+ public readonly string DesiredTier;
+
+ [OutputConstructor]
+ private GetClusterEnterpriseConfigResult(
+ string clusterTier,
+
+ string desiredTier)
+ {
+ ClusterTier = clusterTier;
+ DesiredTier = desiredTier;
+ }
+ }
+}
diff --git a/sdk/dotnet/Container/Outputs/GetClusterNodeConfigResult.cs b/sdk/dotnet/Container/Outputs/GetClusterNodeConfigResult.cs
index 7c713131a1..e478cc7599 100644
--- a/sdk/dotnet/Container/Outputs/GetClusterNodeConfigResult.cs
+++ b/sdk/dotnet/Container/Outputs/GetClusterNodeConfigResult.cs
@@ -98,6 +98,10 @@ public sealed class GetClusterNodeConfigResult
///
public readonly int LocalSsdCount;
///
+ /// LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node.
+ ///
+ public readonly string LocalSsdEncryptionMode;
+ ///
/// Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT.
///
public readonly string LoggingVariant;
@@ -222,6 +226,8 @@ private GetClusterNodeConfigResult(
int localSsdCount,
+ string localSsdEncryptionMode,
+
string loggingVariant,
string machineType,
@@ -283,6 +289,7 @@ private GetClusterNodeConfigResult(
LinuxNodeConfigs = linuxNodeConfigs;
LocalNvmeSsdBlockConfigs = localNvmeSsdBlockConfigs;
LocalSsdCount = localSsdCount;
+ LocalSsdEncryptionMode = localSsdEncryptionMode;
LoggingVariant = loggingVariant;
MachineType = machineType;
Metadata = metadata;
diff --git a/sdk/dotnet/Container/Outputs/GetClusterNodePoolAutoConfigLinuxNodeConfigResult.cs b/sdk/dotnet/Container/Outputs/GetClusterNodePoolAutoConfigLinuxNodeConfigResult.cs
new file mode 100644
index 0000000000..5d4f064379
--- /dev/null
+++ b/sdk/dotnet/Container/Outputs/GetClusterNodePoolAutoConfigLinuxNodeConfigResult.cs
@@ -0,0 +1,27 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Container.Outputs
+{
+
+ [OutputType]
+ public sealed class GetClusterNodePoolAutoConfigLinuxNodeConfigResult
+ {
+ ///
+ /// cgroupMode specifies the cgroup mode to be used on the node.
+ ///
+ public readonly string CgroupMode;
+
+ [OutputConstructor]
+ private GetClusterNodePoolAutoConfigLinuxNodeConfigResult(string cgroupMode)
+ {
+ CgroupMode = cgroupMode;
+ }
+ }
+}
diff --git a/sdk/dotnet/Container/Outputs/GetClusterNodePoolAutoConfigResult.cs b/sdk/dotnet/Container/Outputs/GetClusterNodePoolAutoConfigResult.cs
index 2e4210a6c8..c831d7ea37 100644
--- a/sdk/dotnet/Container/Outputs/GetClusterNodePoolAutoConfigResult.cs
+++ b/sdk/dotnet/Container/Outputs/GetClusterNodePoolAutoConfigResult.cs
@@ -13,6 +13,10 @@ namespace Pulumi.Gcp.Container.Outputs
[OutputType]
public sealed class GetClusterNodePoolAutoConfigResult
{
+ ///
+ /// Linux node configuration options.
+ ///
+ public readonly ImmutableArray LinuxNodeConfigs;
///
/// Collection of Compute Engine network tags that can be applied to a node's underlying VM instance.
///
@@ -28,12 +32,15 @@ public sealed class GetClusterNodePoolAutoConfigResult
[OutputConstructor]
private GetClusterNodePoolAutoConfigResult(
+ ImmutableArray linuxNodeConfigs,
+
ImmutableArray networkTags,
ImmutableArray nodeKubeletConfigs,
ImmutableDictionary resourceManagerTags)
{
+ LinuxNodeConfigs = linuxNodeConfigs;
NetworkTags = networkTags;
NodeKubeletConfigs = nodeKubeletConfigs;
ResourceManagerTags = resourceManagerTags;
diff --git a/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigResult.cs b/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigResult.cs
index af54b7ea68..515d9ee093 100644
--- a/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigResult.cs
+++ b/sdk/dotnet/Container/Outputs/GetClusterNodePoolNodeConfigResult.cs
@@ -98,6 +98,10 @@ public sealed class GetClusterNodePoolNodeConfigResult
///
public readonly int LocalSsdCount;
///
+ /// LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node.
+ ///
+ public readonly string LocalSsdEncryptionMode;
+ ///
/// Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT.
///
public readonly string LoggingVariant;
@@ -222,6 +226,8 @@ private GetClusterNodePoolNodeConfigResult(
int localSsdCount,
+ string localSsdEncryptionMode,
+
string loggingVariant,
string machineType,
@@ -283,6 +289,7 @@ private GetClusterNodePoolNodeConfigResult(
LinuxNodeConfigs = linuxNodeConfigs;
LocalNvmeSsdBlockConfigs = localNvmeSsdBlockConfigs;
LocalSsdCount = localSsdCount;
+ LocalSsdEncryptionMode = localSsdEncryptionMode;
LoggingVariant = loggingVariant;
MachineType = machineType;
Metadata = metadata;
diff --git a/sdk/dotnet/Container/Outputs/NodePoolNodeConfig.cs b/sdk/dotnet/Container/Outputs/NodePoolNodeConfig.cs
index d763c61832..bfa5cd9de9 100644
--- a/sdk/dotnet/Container/Outputs/NodePoolNodeConfig.cs
+++ b/sdk/dotnet/Container/Outputs/NodePoolNodeConfig.cs
@@ -98,6 +98,10 @@ public sealed class NodePoolNodeConfig
///
public readonly int? LocalSsdCount;
///
+ /// LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node.
+ ///
+ public readonly string? LocalSsdEncryptionMode;
+ ///
/// Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT.
///
public readonly string? LoggingVariant;
@@ -225,6 +229,8 @@ private NodePoolNodeConfig(
int? localSsdCount,
+ string? localSsdEncryptionMode,
+
string? loggingVariant,
string? machineType,
@@ -286,6 +292,7 @@ private NodePoolNodeConfig(
LinuxNodeConfig = linuxNodeConfig;
LocalNvmeSsdBlockConfig = localNvmeSsdBlockConfig;
LocalSsdCount = localSsdCount;
+ LocalSsdEncryptionMode = localSsdEncryptionMode;
LoggingVariant = loggingVariant;
MachineType = machineType;
Metadata = metadata;
diff --git a/sdk/dotnet/Dataproc/Batch.cs b/sdk/dotnet/Dataproc/Batch.cs
index 316e808a3d..eb9ca00561 100644
--- a/sdk/dotnet/Dataproc/Batch.cs
+++ b/sdk/dotnet/Dataproc/Batch.cs
@@ -384,6 +384,66 @@ namespace Pulumi.Gcp.Dataproc
///
/// });
/// ```
+ /// ### Dataproc Batch Autotuning
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var exampleBatchAutotuning = new Gcp.Dataproc.Batch("example_batch_autotuning", new()
+ /// {
+ /// BatchId = "tf-test-batch_16511",
+ /// Location = "us-central1",
+ /// Labels =
+ /// {
+ /// { "batch_test", "terraform" },
+ /// },
+ /// RuntimeConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigArgs
+ /// {
+ /// Version = "2.2",
+ /// Properties =
+ /// {
+ /// { "spark.dynamicAllocation.enabled", "false" },
+ /// { "spark.executor.instances", "2" },
+ /// },
+ /// Cohort = "tf-dataproc-batch-example",
+ /// AutotuningConfig = new Gcp.Dataproc.Inputs.BatchRuntimeConfigAutotuningConfigArgs
+ /// {
+ /// Scenarios = new[]
+ /// {
+ /// "SCALING",
+ /// "MEMORY",
+ /// },
+ /// },
+ /// },
+ /// EnvironmentConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigArgs
+ /// {
+ /// ExecutionConfig = new Gcp.Dataproc.Inputs.BatchEnvironmentConfigExecutionConfigArgs
+ /// {
+ /// SubnetworkUri = "default",
+ /// Ttl = "3600s",
+ /// },
+ /// },
+ /// SparkBatch = new Gcp.Dataproc.Inputs.BatchSparkBatchArgs
+ /// {
+ /// MainClass = "org.apache.spark.examples.SparkPi",
+ /// Args = new[]
+ /// {
+ /// "10",
+ /// },
+ /// JarFileUris = new[]
+ /// {
+ /// "file:///usr/lib/spark/examples/jars/spark-examples.jar",
+ /// },
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
///
/// ## Import
///
diff --git a/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigArgs.cs b/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigArgs.cs
index 129d54175d..85422d2197 100644
--- a/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigArgs.cs
+++ b/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigArgs.cs
@@ -12,6 +12,19 @@ namespace Pulumi.Gcp.Dataproc.Inputs
public sealed class BatchRuntimeConfigArgs : global::Pulumi.ResourceArgs
{
+ ///
+ /// Optional. Autotuning configuration of the workload.
+ /// Structure is documented below.
+ ///
+ [Input("autotuningConfig")]
+ public Input? AutotuningConfig { get; set; }
+
+ ///
+ /// Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs.
+ ///
+ [Input("cohort")]
+ public Input? Cohort { get; set; }
+
///
/// Optional custom container image for the job runtime environment. If not specified, a default container image will be used.
///
diff --git a/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigAutotuningConfigArgs.cs b/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigAutotuningConfigArgs.cs
new file mode 100644
index 0000000000..b864499cb7
--- /dev/null
+++ b/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigAutotuningConfigArgs.cs
@@ -0,0 +1,33 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Dataproc.Inputs
+{
+
+ public sealed class BatchRuntimeConfigAutotuningConfigArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("scenarios")]
+ private InputList? _scenarios;
+
+ ///
+ /// Optional. Scenarios for which tunings are applied.
+ /// Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`.
+ ///
+ public InputList Scenarios
+ {
+ get => _scenarios ?? (_scenarios = new InputList());
+ set => _scenarios = value;
+ }
+
+ public BatchRuntimeConfigAutotuningConfigArgs()
+ {
+ }
+ public static new BatchRuntimeConfigAutotuningConfigArgs Empty => new BatchRuntimeConfigAutotuningConfigArgs();
+ }
+}
diff --git a/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigAutotuningConfigGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigAutotuningConfigGetArgs.cs
new file mode 100644
index 0000000000..e1861b2bb3
--- /dev/null
+++ b/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigAutotuningConfigGetArgs.cs
@@ -0,0 +1,33 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Dataproc.Inputs
+{
+
+ public sealed class BatchRuntimeConfigAutotuningConfigGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("scenarios")]
+ private InputList? _scenarios;
+
+ ///
+ /// Optional. Scenarios for which tunings are applied.
+ /// Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`.
+ ///
+ public InputList Scenarios
+ {
+ get => _scenarios ?? (_scenarios = new InputList());
+ set => _scenarios = value;
+ }
+
+ public BatchRuntimeConfigAutotuningConfigGetArgs()
+ {
+ }
+ public static new BatchRuntimeConfigAutotuningConfigGetArgs Empty => new BatchRuntimeConfigAutotuningConfigGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigGetArgs.cs
index f938349e41..8d463853dc 100644
--- a/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigGetArgs.cs
+++ b/sdk/dotnet/Dataproc/Inputs/BatchRuntimeConfigGetArgs.cs
@@ -12,6 +12,19 @@ namespace Pulumi.Gcp.Dataproc.Inputs
public sealed class BatchRuntimeConfigGetArgs : global::Pulumi.ResourceArgs
{
+ ///
+ /// Optional. Autotuning configuration of the workload.
+ /// Structure is documented below.
+ ///
+ [Input("autotuningConfig")]
+ public Input? AutotuningConfig { get; set; }
+
+ ///
+ /// Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs.
+ ///
+ [Input("cohort")]
+ public Input? Cohort { get; set; }
+
///
/// Optional custom container image for the job runtime environment. If not specified, a default container image will be used.
///
diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigArgs.cs
index 352150775d..6be23ed8dd 100644
--- a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigArgs.cs
+++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigArgs.cs
@@ -12,6 +12,12 @@ namespace Pulumi.Gcp.Dataproc.Inputs
public sealed class ClusterClusterConfigGceClusterConfigArgs : global::Pulumi.ResourceArgs
{
+ ///
+ /// Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute)
+ ///
+ [Input("confidentialInstanceConfig")]
+ public Input? ConfidentialInstanceConfig { get; set; }
+
///
/// By default, clusters are not restricted to internal IP addresses,
/// and will have ephemeral external IP addresses assigned to each instance. If set to true, all
diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs.cs
new file mode 100644
index 0000000000..466169ac39
--- /dev/null
+++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs.cs
@@ -0,0 +1,26 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Dataproc.Inputs
+{
+
+ public sealed class ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Defines whether the instance should have confidential compute enabled.
+ ///
+ [Input("enableConfidentialCompute")]
+ public Input? EnableConfidentialCompute { get; set; }
+
+ public ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs()
+ {
+ }
+ public static new ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs Empty => new ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs();
+ }
+}
diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigGetArgs.cs
new file mode 100644
index 0000000000..25d6e64f15
--- /dev/null
+++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigGetArgs.cs
@@ -0,0 +1,26 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Dataproc.Inputs
+{
+
+ public sealed class ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Defines whether the instance should have confidential compute enabled.
+ ///
+ [Input("enableConfidentialCompute")]
+ public Input? EnableConfidentialCompute { get; set; }
+
+ public ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigGetArgs()
+ {
+ }
+ public static new ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigGetArgs Empty => new ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigGetArgs.cs
index 297171d192..c00e9b4bc6 100644
--- a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigGetArgs.cs
+++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigGetArgs.cs
@@ -12,6 +12,12 @@ namespace Pulumi.Gcp.Dataproc.Inputs
public sealed class ClusterClusterConfigGceClusterConfigGetArgs : global::Pulumi.ResourceArgs
{
+ ///
+ /// Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute)
+ ///
+ [Input("confidentialInstanceConfig")]
+ public Input? ConfidentialInstanceConfig { get; set; }
+
///
/// By default, clusters are not restricted to internal IP addresses,
/// and will have ephemeral external IP addresses assigned to each instance. If set to true, all
diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs.cs
index 3e538e4ef7..82bf41977c 100644
--- a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs.cs
+++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs.cs
@@ -36,6 +36,12 @@ public InputList _instanceSelectionResults = value;
}
+ ///
+ /// Defines how Dataproc should create VMs with a mixture of provisioning models.
+ ///
+ [Input("provisioningModelMix")]
+ public Input? ProvisioningModelMix { get; set; }
+
public ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs()
{
}
diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyGetArgs.cs
index 3912ebfae2..cb6b5f9c64 100644
--- a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyGetArgs.cs
+++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyGetArgs.cs
@@ -36,6 +36,12 @@ public InputList _instanceSelectionResults = value;
}
+ ///
+ /// Defines how Dataproc should create VMs with a mixture of provisioning models.
+ ///
+ [Input("provisioningModelMix")]
+ public Input? ProvisioningModelMix { get; set; }
+
public ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyGetArgs()
{
}
diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs.cs
new file mode 100644
index 0000000000..08a71b469a
--- /dev/null
+++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs.cs
@@ -0,0 +1,32 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Dataproc.Inputs
+{
+
+ public sealed class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need.
+ ///
+ [Input("standardCapacityBase")]
+ public Input? StandardCapacityBase { get; set; }
+
+ ///
+ /// The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs.
+ ///
+ [Input("standardCapacityPercentAboveBase")]
+ public Input? StandardCapacityPercentAboveBase { get; set; }
+
+ public ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs()
+ {
+ }
+ public static new ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs Empty => new ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs();
+ }
+}
diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixGetArgs.cs
new file mode 100644
index 0000000000..eb8da49a09
--- /dev/null
+++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixGetArgs.cs
@@ -0,0 +1,32 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Dataproc.Inputs
+{
+
+ public sealed class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need.
+ ///
+ [Input("standardCapacityBase")]
+ public Input? StandardCapacityBase { get; set; }
+
+ ///
+ /// The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs.
+ ///
+ [Input("standardCapacityPercentAboveBase")]
+ public Input? StandardCapacityPercentAboveBase { get; set; }
+
+ public ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixGetArgs()
+ {
+ }
+ public static new ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixGetArgs Empty => new ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Dataproc/Outputs/BatchRuntimeConfig.cs b/sdk/dotnet/Dataproc/Outputs/BatchRuntimeConfig.cs
index 765bb59c65..e33557a333 100644
--- a/sdk/dotnet/Dataproc/Outputs/BatchRuntimeConfig.cs
+++ b/sdk/dotnet/Dataproc/Outputs/BatchRuntimeConfig.cs
@@ -13,6 +13,15 @@ namespace Pulumi.Gcp.Dataproc.Outputs
[OutputType]
public sealed class BatchRuntimeConfig
{
+ ///
+ /// Optional. Autotuning configuration of the workload.
+ /// Structure is documented below.
+ ///
+ public readonly Outputs.BatchRuntimeConfigAutotuningConfig? AutotuningConfig;
+ ///
+ /// Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs.
+ ///
+ public readonly string? Cohort;
///
/// Optional custom container image for the job runtime environment. If not specified, a default container image will be used.
///
@@ -33,6 +42,10 @@ public sealed class BatchRuntimeConfig
[OutputConstructor]
private BatchRuntimeConfig(
+ Outputs.BatchRuntimeConfigAutotuningConfig? autotuningConfig,
+
+ string? cohort,
+
string? containerImage,
ImmutableDictionary? effectiveProperties,
@@ -41,6 +54,8 @@ private BatchRuntimeConfig(
string? version)
{
+ AutotuningConfig = autotuningConfig;
+ Cohort = cohort;
ContainerImage = containerImage;
EffectiveProperties = effectiveProperties;
Properties = properties;
diff --git a/sdk/dotnet/Dataproc/Outputs/BatchRuntimeConfigAutotuningConfig.cs b/sdk/dotnet/Dataproc/Outputs/BatchRuntimeConfigAutotuningConfig.cs
new file mode 100644
index 0000000000..c038425682
--- /dev/null
+++ b/sdk/dotnet/Dataproc/Outputs/BatchRuntimeConfigAutotuningConfig.cs
@@ -0,0 +1,28 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Dataproc.Outputs
+{
+
+ [OutputType]
+ public sealed class BatchRuntimeConfigAutotuningConfig
+ {
+ ///
+ /// Optional. Scenarios for which tunings are applied.
+ /// Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`.
+ ///
+ public readonly ImmutableArray Scenarios;
+
+ [OutputConstructor]
+ private BatchRuntimeConfigAutotuningConfig(ImmutableArray scenarios)
+ {
+ Scenarios = scenarios;
+ }
+ }
+}
diff --git a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfig.cs b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfig.cs
index 1bdad14999..a37a504fb7 100644
--- a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfig.cs
+++ b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfig.cs
@@ -13,6 +13,10 @@ namespace Pulumi.Gcp.Dataproc.Outputs
[OutputType]
public sealed class ClusterClusterConfigGceClusterConfig
{
+ ///
+ /// Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute)
+ ///
+ public readonly Outputs.ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig? ConfidentialInstanceConfig;
///
/// By default, clusters are not restricted to internal IP addresses,
/// and will have ephemeral external IP addresses assigned to each instance. If set to true, all
@@ -82,6 +86,8 @@ public sealed class ClusterClusterConfigGceClusterConfig
[OutputConstructor]
private ClusterClusterConfigGceClusterConfig(
+ Outputs.ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig? confidentialInstanceConfig,
+
bool? internalIpOnly,
ImmutableDictionary? metadata,
@@ -104,6 +110,7 @@ private ClusterClusterConfigGceClusterConfig(
string? zone)
{
+ ConfidentialInstanceConfig = confidentialInstanceConfig;
InternalIpOnly = internalIpOnly;
Metadata = metadata;
Network = network;
diff --git a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig.cs b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig.cs
new file mode 100644
index 0000000000..c03b971162
--- /dev/null
+++ b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig.cs
@@ -0,0 +1,27 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Dataproc.Outputs
+{
+
+ [OutputType]
+ public sealed class ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig
+ {
+ ///
+ /// Defines whether the instance should have confidential compute enabled.
+ ///
+ public readonly bool? EnableConfidentialCompute;
+
+ [OutputConstructor]
+ private ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig(bool? enableConfidentialCompute)
+ {
+ EnableConfidentialCompute = enableConfidentialCompute;
+ }
+ }
+}
diff --git a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy.cs b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy.cs
index d5d1a6b07c..e820755889 100644
--- a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy.cs
+++ b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy.cs
@@ -21,15 +21,22 @@ public sealed class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibili
/// A list of instance selection results in the group.
///
public readonly ImmutableArray InstanceSelectionResults;
+ ///
+ /// Defines how Dataproc should create VMs with a mixture of provisioning models.
+ ///
+ public readonly Outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix? ProvisioningModelMix;
[OutputConstructor]
private ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy(
ImmutableArray instanceSelectionLists,
- ImmutableArray instanceSelectionResults)
+ ImmutableArray instanceSelectionResults,
+
+ Outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix? provisioningModelMix)
{
InstanceSelectionLists = instanceSelectionLists;
InstanceSelectionResults = instanceSelectionResults;
+ ProvisioningModelMix = provisioningModelMix;
}
}
}
diff --git a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix.cs b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix.cs
new file mode 100644
index 0000000000..7856f0fd39
--- /dev/null
+++ b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix.cs
@@ -0,0 +1,35 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Dataproc.Outputs
+{
+
+ [OutputType]
+ public sealed class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix
+ {
+ ///
+ /// The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need.
+ ///
+ public readonly int? StandardCapacityBase;
+ ///
+ /// The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs.
+ ///
+ public readonly int? StandardCapacityPercentAboveBase;
+
+ [OutputConstructor]
+ private ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix(
+ int? standardCapacityBase,
+
+ int? standardCapacityPercentAboveBase)
+ {
+ StandardCapacityBase = standardCapacityBase;
+ StandardCapacityPercentAboveBase = standardCapacityPercentAboveBase;
+ }
+ }
+}
diff --git a/sdk/dotnet/Diagflow/Inputs/CxFlowAdvancedSettingsSpeechSettingsArgs.cs b/sdk/dotnet/Diagflow/Inputs/CxFlowAdvancedSettingsSpeechSettingsArgs.cs
index 0a2bc07d9a..33165708dc 100644
--- a/sdk/dotnet/Diagflow/Inputs/CxFlowAdvancedSettingsSpeechSettingsArgs.cs
+++ b/sdk/dotnet/Diagflow/Inputs/CxFlowAdvancedSettingsSpeechSettingsArgs.cs
@@ -39,7 +39,7 @@ public InputMap Models
public Input? NoSpeechTimeout { get; set; }
///
- /// Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value.
+ /// Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value.
///
[Input("useTimeoutBasedEndpointing")]
public Input? UseTimeoutBasedEndpointing { get; set; }
diff --git a/sdk/dotnet/Diagflow/Inputs/CxFlowAdvancedSettingsSpeechSettingsGetArgs.cs b/sdk/dotnet/Diagflow/Inputs/CxFlowAdvancedSettingsSpeechSettingsGetArgs.cs
index 78b3825c3d..293a4b74d0 100644
--- a/sdk/dotnet/Diagflow/Inputs/CxFlowAdvancedSettingsSpeechSettingsGetArgs.cs
+++ b/sdk/dotnet/Diagflow/Inputs/CxFlowAdvancedSettingsSpeechSettingsGetArgs.cs
@@ -39,7 +39,7 @@ public InputMap Models
public Input? NoSpeechTimeout { get; set; }
///
- /// Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value.
+ /// Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value.
///
[Input("useTimeoutBasedEndpointing")]
public Input? UseTimeoutBasedEndpointing { get; set; }
diff --git a/sdk/dotnet/Diagflow/Outputs/CxFlowAdvancedSettingsSpeechSettings.cs b/sdk/dotnet/Diagflow/Outputs/CxFlowAdvancedSettingsSpeechSettings.cs
index b88e3e099d..0a5561e01a 100644
--- a/sdk/dotnet/Diagflow/Outputs/CxFlowAdvancedSettingsSpeechSettings.cs
+++ b/sdk/dotnet/Diagflow/Outputs/CxFlowAdvancedSettingsSpeechSettings.cs
@@ -28,7 +28,7 @@ public sealed class CxFlowAdvancedSettingsSpeechSettings
///
public readonly string? NoSpeechTimeout;
///
- /// Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value.
+ /// Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value.
///
public readonly bool? UseTimeoutBasedEndpointing;
diff --git a/sdk/dotnet/DiscoveryEngine/SearchEngine.cs b/sdk/dotnet/DiscoveryEngine/SearchEngine.cs
index fbf8486cde..addda2c224 100644
--- a/sdk/dotnet/DiscoveryEngine/SearchEngine.cs
+++ b/sdk/dotnet/DiscoveryEngine/SearchEngine.cs
@@ -126,7 +126,7 @@ public partial class SearchEngine : global::Pulumi.CustomResource
///
/// The industry vertical that the engine registers. The restriction of the Engine industry vertical is based on DataStore:
/// If unspecified, default to GENERIC. Vertical on Engine has to match vertical of the DataStore liniked to the engine.
- /// Default value: "GENERIC" Possible values: ["GENERIC", "MEDIA"]
+ /// Default value: "GENERIC" Possible values: ["GENERIC", "MEDIA", "HEALTHCARE_FHIR"]
///
[Output("industryVertical")]
public Output IndustryVertical { get; private set; } = null!;
@@ -247,7 +247,7 @@ public InputList DataStoreIds
///
/// The industry vertical that the engine registers. The restriction of the Engine industry vertical is based on DataStore:
/// If unspecified, default to GENERIC. Vertical on Engine has to match vertical of the DataStore liniked to the engine.
- /// Default value: "GENERIC" Possible values: ["GENERIC", "MEDIA"]
+ /// Default value: "GENERIC" Possible values: ["GENERIC", "MEDIA", "HEALTHCARE_FHIR"]
///
[Input("industryVertical")]
public Input? IndustryVertical { get; set; }
@@ -321,7 +321,7 @@ public InputList DataStoreIds
///
/// The industry vertical that the engine registers. The restriction of the Engine industry vertical is based on DataStore:
/// If unspecified, default to GENERIC. Vertical on Engine has to match vertical of the DataStore liniked to the engine.
- /// Default value: "GENERIC" Possible values: ["GENERIC", "MEDIA"]
+ /// Default value: "GENERIC" Possible values: ["GENERIC", "MEDIA", "HEALTHCARE_FHIR"]
///
[Input("industryVertical")]
public Input? IndustryVertical { get; set; }
diff --git a/sdk/dotnet/Firebaserules/Release.cs b/sdk/dotnet/Firebaserules/Release.cs
index 52a0345aec..a7c9270166 100644
--- a/sdk/dotnet/Firebaserules/Release.cs
+++ b/sdk/dotnet/Firebaserules/Release.cs
@@ -14,6 +14,76 @@ namespace Pulumi.Gcp.Firebaserules
/// * [Get started with Firebase Security Rules](https://firebase.google.com/docs/rules/get-started)
/// ## Example Usage
///
+ /// ### Firestore_release
+ /// Creates a Firebase Rules Release to the default Cloud Firestore instance
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var firestore = new Gcp.Firebaserules.Ruleset("firestore", new()
+ /// {
+ /// Project = "my-project-name",
+ /// Source = new Gcp.Firebaserules.Inputs.RulesetSourceArgs
+ /// {
+ /// Files = new[]
+ /// {
+ /// new Gcp.Firebaserules.Inputs.RulesetSourceFileArgs
+ /// {
+ /// Content = "service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }",
+ /// Name = "firestore.rules",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var primary = new Gcp.Firebaserules.Release("primary", new()
+ /// {
+ /// Name = "cloud.firestore",
+ /// Project = "my-project-name",
+ /// RulesetName = firestore.Name.Apply(name => $"projects/my-project-name/rulesets/{name}"),
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ### Firestore_release_additional
+ /// Creates a Firebase Rules Release to an additional Cloud Firestore instance
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var firestore = new Gcp.Firebaserules.Ruleset("firestore", new()
+ /// {
+ /// Project = "my-project-name",
+ /// Source = new Gcp.Firebaserules.Inputs.RulesetSourceArgs
+ /// {
+ /// Files = new[]
+ /// {
+ /// new Gcp.Firebaserules.Inputs.RulesetSourceFileArgs
+ /// {
+ /// Content = "service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }",
+ /// Name = "firestore.rules",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var primary = new Gcp.Firebaserules.Release("primary", new()
+ /// {
+ /// Name = "cloud.firestore/database",
+ /// Project = "my-project-name",
+ /// RulesetName = firestore.Name.Apply(name => $"projects/my-project-name/rulesets/{name}"),
+ /// });
+ ///
+ /// });
+ /// ```
/// ## Import
///
/// Release can be imported using any of these accepted formats:
diff --git a/sdk/dotnet/Firestore/Field.cs b/sdk/dotnet/Firestore/Field.cs
index ca9f68c64d..e661ca2a29 100644
--- a/sdk/dotnet/Firestore/Field.cs
+++ b/sdk/dotnet/Firestore/Field.cs
@@ -51,7 +51,7 @@ namespace Pulumi.Gcp.Firestore
/// {
/// Project = "my-project-name",
/// Database = database.Name,
- /// Collection = "chatrooms__16511",
+ /// Collection = "chatrooms__8493",
/// FieldId = "basic",
/// IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs
/// {
@@ -128,7 +128,7 @@ namespace Pulumi.Gcp.Firestore
/// {
/// Project = "my-project-name",
/// Database = database.Name,
- /// Collection = "chatrooms__8493",
+ /// Collection = "chatrooms__9106",
/// FieldId = "field_with_same_configuration_as_ancestor",
/// IndexConfig = new Gcp.Firestore.Inputs.FieldIndexConfigArgs
/// {
diff --git a/sdk/dotnet/Gemini/CodeRepositoryIndex.cs b/sdk/dotnet/Gemini/CodeRepositoryIndex.cs
new file mode 100644
index 0000000000..c29e1398c7
--- /dev/null
+++ b/sdk/dotnet/Gemini/CodeRepositoryIndex.cs
@@ -0,0 +1,355 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini
+{
+ ///
+ /// ## Example Usage
+ ///
+ /// ### Gemini Code Repository Index Basic
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var example = new Gcp.Gemini.CodeRepositoryIndex("example", new()
+ /// {
+ /// Location = "us-central1",
+ /// CodeRepositoryIndexId = "",
+ /// KmsKey = "projects/projectExample/locations/locationExample/keyRings/keyRingExample/cryptoKeys/cryptoKeyExample",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// ## Import
+ ///
+ /// CodeRepositoryIndex can be imported using any of these accepted formats:
+ ///
+ /// * `projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index_id}}`
+ ///
+ /// * `{{project}}/{{location}}/{{code_repository_index_id}}`
+ ///
+ /// * `{{location}}/{{code_repository_index_id}}`
+ ///
+ /// When using the `pulumi import` command, CodeRepositoryIndex can be imported using one of the formats above. For example:
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex default projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index_id}}
+ /// ```
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex default {{project}}/{{location}}/{{code_repository_index_id}}
+ /// ```
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex default {{location}}/{{code_repository_index_id}}
+ /// ```
+ ///
+ [GcpResourceType("gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex")]
+ public partial class CodeRepositoryIndex : global::Pulumi.CustomResource
+ {
+ ///
+ /// Required. Id of the Code Repository Index.
+ ///
+ ///
+ /// - - -
+ ///
+ [Output("codeRepositoryIndexId")]
+ public Output CodeRepositoryIndexId { get; private set; } = null!;
+
+ ///
+ /// Output only. Create time stamp.
+ ///
+ [Output("createTime")]
+ public Output CreateTime { get; private set; } = null!;
+
+ ///
+ /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
+ ///
+ [Output("effectiveLabels")]
+ public Output> EffectiveLabels { get; private set; } = null!;
+
+ ///
+ /// Optional. Immutable. Customer-managed encryption key name, in the format
+ /// projects/*/locations/*/keyRings/*/cryptoKeys/*.
+ ///
+ [Output("kmsKey")]
+ public Output KmsKey { get; private set; } = null!;
+
+ ///
+ /// Optional. Labels as key value pairs.
+ /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
+ /// Please refer to the field `effective_labels` for all of the labels present on the resource.
+ ///
+ [Output("labels")]
+ public Output?> Labels { get; private set; } = null!;
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`.
+ ///
+ [Output("location")]
+ public Output Location { get; private set; } = null!;
+
+ ///
+ /// Immutable. Identifier. Name of Code Repository Index.
+ ///
+ [Output("name")]
+ public Output Name { get; private set; } = null!;
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the provider project is used.
+ ///
+ [Output("project")]
+ public Output Project { get; private set; } = null!;
+
+ ///
+ /// The combination of labels configured directly on the resource
+ /// and default labels configured on the provider.
+ ///
+ [Output("pulumiLabels")]
+ public Output> PulumiLabels { get; private set; } = null!;
+
+ ///
+ /// Output only. Code Repository Index instance State.
+ /// Possible values:
+ /// STATE_UNSPECIFIED
+ /// CREATING
+ /// ACTIVE
+ /// DELETING
+ /// SUSPENDED
+ ///
+ [Output("state")]
+ public Output State { get; private set; } = null!;
+
+ ///
+ /// Output only. Update time stamp.
+ ///
+ [Output("updateTime")]
+ public Output UpdateTime { get; private set; } = null!;
+
+
+ ///
+ /// Create a CodeRepositoryIndex resource with the given unique name, arguments, and options.
+ ///
+ ///
+ /// The unique name of the resource
+ /// The arguments used to populate this resource's properties
+ /// A bag of options that control this resource's behavior
+ public CodeRepositoryIndex(string name, CodeRepositoryIndexArgs args, CustomResourceOptions? options = null)
+ : base("gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex", name, args ?? new CodeRepositoryIndexArgs(), MakeResourceOptions(options, ""))
+ {
+ }
+
+ private CodeRepositoryIndex(string name, Input id, CodeRepositoryIndexState? state = null, CustomResourceOptions? options = null)
+ : base("gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex", name, state, MakeResourceOptions(options, id))
+ {
+ }
+
+ private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id)
+ {
+ var defaultOptions = new CustomResourceOptions
+ {
+ Version = Utilities.Version,
+ AdditionalSecretOutputs =
+ {
+ "effectiveLabels",
+ "pulumiLabels",
+ },
+ };
+ var merged = CustomResourceOptions.Merge(defaultOptions, options);
+ // Override the ID if one was specified for consistency with other language SDKs.
+ merged.Id = id ?? merged.Id;
+ return merged;
+ }
+ ///
+ /// Get an existing CodeRepositoryIndex resource's state with the given name, ID, and optional extra
+ /// properties used to qualify the lookup.
+ ///
+ ///
+ /// The unique name of the resulting resource.
+ /// The unique provider ID of the resource to lookup.
+ /// Any extra arguments used during the lookup.
+ /// A bag of options that control this resource's behavior
+ public static CodeRepositoryIndex Get(string name, Input id, CodeRepositoryIndexState? state = null, CustomResourceOptions? options = null)
+ {
+ return new CodeRepositoryIndex(name, id, state, options);
+ }
+ }
+
+ public sealed class CodeRepositoryIndexArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Required. Id of the Code Repository Index.
+ ///
+ ///
+ /// - - -
+ ///
+ [Input("codeRepositoryIndexId", required: true)]
+ public Input CodeRepositoryIndexId { get; set; } = null!;
+
+ ///
+ /// Optional. Immutable. Customer-managed encryption key name, in the format
+ /// projects/*/locations/*/keyRings/*/cryptoKeys/*.
+ ///
+ [Input("kmsKey")]
+ public Input? KmsKey { get; set; }
+
+ [Input("labels")]
+ private InputMap? _labels;
+
+ ///
+ /// Optional. Labels as key value pairs.
+ /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
+ /// Please refer to the field `effective_labels` for all of the labels present on the resource.
+ ///
+ public InputMap Labels
+ {
+ get => _labels ?? (_labels = new InputMap());
+ set => _labels = value;
+ }
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`.
+ ///
+ [Input("location", required: true)]
+ public Input Location { get; set; } = null!;
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the provider project is used.
+ ///
+ [Input("project")]
+ public Input? Project { get; set; }
+
+ public CodeRepositoryIndexArgs()
+ {
+ }
+ public static new CodeRepositoryIndexArgs Empty => new CodeRepositoryIndexArgs();
+ }
+
+ public sealed class CodeRepositoryIndexState : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Required. Id of the Code Repository Index.
+ ///
+ ///
+ /// - - -
+ ///
+ [Input("codeRepositoryIndexId")]
+ public Input? CodeRepositoryIndexId { get; set; }
+
+ ///
+ /// Output only. Create time stamp.
+ ///
+ [Input("createTime")]
+ public Input? CreateTime { get; set; }
+
+ [Input("effectiveLabels")]
+ private InputMap? _effectiveLabels;
+
+ ///
+ /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
+ ///
+ public InputMap EffectiveLabels
+ {
+ get => _effectiveLabels ?? (_effectiveLabels = new InputMap());
+ set
+ {
+ var emptySecret = Output.CreateSecret(ImmutableDictionary.Create());
+ _effectiveLabels = Output.All(value, emptySecret).Apply(v => v[0]);
+ }
+ }
+
+ ///
+ /// Optional. Immutable. Customer-managed encryption key name, in the format
+ /// projects/*/locations/*/keyRings/*/cryptoKeys/*.
+ ///
+ [Input("kmsKey")]
+ public Input? KmsKey { get; set; }
+
+ [Input("labels")]
+ private InputMap? _labels;
+
+ ///
+ /// Optional. Labels as key value pairs.
+ /// **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
+ /// Please refer to the field `effective_labels` for all of the labels present on the resource.
+ ///
+ public InputMap Labels
+ {
+ get => _labels ?? (_labels = new InputMap());
+ set => _labels = value;
+ }
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`.
+ ///
+ [Input("location")]
+ public Input? Location { get; set; }
+
+ ///
+ /// Immutable. Identifier. Name of Code Repository Index.
+ ///
+ [Input("name")]
+ public Input? Name { get; set; }
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the provider project is used.
+ ///
+ [Input("project")]
+ public Input? Project { get; set; }
+
+ [Input("pulumiLabels")]
+ private InputMap? _pulumiLabels;
+
+ ///
+ /// The combination of labels configured directly on the resource
+ /// and default labels configured on the provider.
+ ///
+ public InputMap PulumiLabels
+ {
+ get => _pulumiLabels ?? (_pulumiLabels = new InputMap());
+ set
+ {
+ var emptySecret = Output.CreateSecret(ImmutableDictionary.Create());
+ _pulumiLabels = Output.All(value, emptySecret).Apply(v => v[0]);
+ }
+ }
+
+ ///
+ /// Output only. Code Repository Index instance State.
+ /// Possible values:
+ /// STATE_UNSPECIFIED
+ /// CREATING
+ /// ACTIVE
+ /// DELETING
+ /// SUSPENDED
+ ///
+ [Input("state")]
+ public Input? State { get; set; }
+
+ ///
+ /// Output only. Update time stamp.
+ ///
+ [Input("updateTime")]
+ public Input? UpdateTime { get; set; }
+
+ public CodeRepositoryIndexState()
+ {
+ }
+ public static new CodeRepositoryIndexState Empty => new CodeRepositoryIndexState();
+ }
+}
diff --git a/sdk/dotnet/Gemini/GetRepositoryGroupIamPolicy.cs b/sdk/dotnet/Gemini/GetRepositoryGroupIamPolicy.cs
new file mode 100644
index 0000000000..c34de72104
--- /dev/null
+++ b/sdk/dotnet/Gemini/GetRepositoryGroupIamPolicy.cs
@@ -0,0 +1,127 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini
+{
+ public static class GetRepositoryGroupIamPolicy
+ {
+ public static Task InvokeAsync(GetRepositoryGroupIamPolicyArgs args, InvokeOptions? options = null)
+ => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy", args ?? new GetRepositoryGroupIamPolicyArgs(), options.WithDefaults());
+
+ public static Output Invoke(GetRepositoryGroupIamPolicyInvokeArgs args, InvokeOptions? options = null)
+ => global::Pulumi.Deployment.Instance.Invoke("gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy", args ?? new GetRepositoryGroupIamPolicyInvokeArgs(), options.WithDefaults());
+ }
+
+
+ public sealed class GetRepositoryGroupIamPolicyArgs : global::Pulumi.InvokeArgs
+ {
+ [Input("codeRepositoryIndex", required: true)]
+ public string CodeRepositoryIndex { get; set; } = null!;
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,
+ /// the value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no
+ /// location is specified, it is taken from the provider configuration.
+ ///
+ [Input("location")]
+ public string? Location { get; set; }
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.
+ ///
+ [Input("project")]
+ public string? Project { get; set; }
+
+ [Input("repositoryGroupId", required: true)]
+ public string RepositoryGroupId { get; set; } = null!;
+
+ public GetRepositoryGroupIamPolicyArgs()
+ {
+ }
+ public static new GetRepositoryGroupIamPolicyArgs Empty => new GetRepositoryGroupIamPolicyArgs();
+ }
+
+ public sealed class GetRepositoryGroupIamPolicyInvokeArgs : global::Pulumi.InvokeArgs
+ {
+ [Input("codeRepositoryIndex", required: true)]
+ public Input CodeRepositoryIndex { get; set; } = null!;
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,
+ /// the value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no
+ /// location is specified, it is taken from the provider configuration.
+ ///
+ [Input("location")]
+ public Input? Location { get; set; }
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.
+ ///
+ [Input("project")]
+ public Input? Project { get; set; }
+
+ [Input("repositoryGroupId", required: true)]
+ public Input RepositoryGroupId { get; set; } = null!;
+
+ public GetRepositoryGroupIamPolicyInvokeArgs()
+ {
+ }
+ public static new GetRepositoryGroupIamPolicyInvokeArgs Empty => new GetRepositoryGroupIamPolicyInvokeArgs();
+ }
+
+
+ [OutputType]
+ public sealed class GetRepositoryGroupIamPolicyResult
+ {
+ public readonly string CodeRepositoryIndex;
+ ///
+ /// (Computed) The etag of the IAM policy.
+ ///
+ public readonly string Etag;
+ ///
+ /// The provider-assigned unique ID for this managed resource.
+ ///
+ public readonly string Id;
+ public readonly string Location;
+ ///
+ /// (Required only by `gcp.gemini.RepositoryGroupIamPolicy`) The policy data generated by
+ /// a `gcp.organizations.getIAMPolicy` data source.
+ ///
+ public readonly string PolicyData;
+ public readonly string Project;
+ public readonly string RepositoryGroupId;
+
+ [OutputConstructor]
+ private GetRepositoryGroupIamPolicyResult(
+ string codeRepositoryIndex,
+
+ string etag,
+
+ string id,
+
+ string location,
+
+ string policyData,
+
+ string project,
+
+ string repositoryGroupId)
+ {
+ CodeRepositoryIndex = codeRepositoryIndex;
+ Etag = etag;
+ Id = id;
+ Location = location;
+ PolicyData = policyData;
+ Project = project;
+ RepositoryGroupId = repositoryGroupId;
+ }
+ }
+}
diff --git a/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamBindingConditionArgs.cs b/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamBindingConditionArgs.cs
new file mode 100644
index 0000000000..7016b92f49
--- /dev/null
+++ b/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamBindingConditionArgs.cs
@@ -0,0 +1,29 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini.Inputs
+{
+
+ public sealed class RepositoryGroupIamBindingConditionArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("description")]
+ public Input? Description { get; set; }
+
+ [Input("expression", required: true)]
+ public Input Expression { get; set; } = null!;
+
+ [Input("title", required: true)]
+ public Input Title { get; set; } = null!;
+
+ public RepositoryGroupIamBindingConditionArgs()
+ {
+ }
+ public static new RepositoryGroupIamBindingConditionArgs Empty => new RepositoryGroupIamBindingConditionArgs();
+ }
+}
diff --git a/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamBindingConditionGetArgs.cs b/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamBindingConditionGetArgs.cs
new file mode 100644
index 0000000000..6aa5bd5e23
--- /dev/null
+++ b/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamBindingConditionGetArgs.cs
@@ -0,0 +1,29 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini.Inputs
+{
+
+ public sealed class RepositoryGroupIamBindingConditionGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("description")]
+ public Input? Description { get; set; }
+
+ [Input("expression", required: true)]
+ public Input Expression { get; set; } = null!;
+
+ [Input("title", required: true)]
+ public Input Title { get; set; } = null!;
+
+ public RepositoryGroupIamBindingConditionGetArgs()
+ {
+ }
+ public static new RepositoryGroupIamBindingConditionGetArgs Empty => new RepositoryGroupIamBindingConditionGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamMemberConditionArgs.cs b/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamMemberConditionArgs.cs
new file mode 100644
index 0000000000..fb046d781a
--- /dev/null
+++ b/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamMemberConditionArgs.cs
@@ -0,0 +1,29 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini.Inputs
+{
+
+ public sealed class RepositoryGroupIamMemberConditionArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("description")]
+ public Input? Description { get; set; }
+
+ [Input("expression", required: true)]
+ public Input Expression { get; set; } = null!;
+
+ [Input("title", required: true)]
+ public Input Title { get; set; } = null!;
+
+ public RepositoryGroupIamMemberConditionArgs()
+ {
+ }
+ public static new RepositoryGroupIamMemberConditionArgs Empty => new RepositoryGroupIamMemberConditionArgs();
+ }
+}
diff --git a/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamMemberConditionGetArgs.cs b/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamMemberConditionGetArgs.cs
new file mode 100644
index 0000000000..e3c61c9824
--- /dev/null
+++ b/sdk/dotnet/Gemini/Inputs/RepositoryGroupIamMemberConditionGetArgs.cs
@@ -0,0 +1,29 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini.Inputs
+{
+
+ public sealed class RepositoryGroupIamMemberConditionGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("description")]
+ public Input? Description { get; set; }
+
+ [Input("expression", required: true)]
+ public Input Expression { get; set; } = null!;
+
+ [Input("title", required: true)]
+ public Input Title { get; set; } = null!;
+
+ public RepositoryGroupIamMemberConditionGetArgs()
+ {
+ }
+ public static new RepositoryGroupIamMemberConditionGetArgs Empty => new RepositoryGroupIamMemberConditionGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Gemini/Inputs/RepositoryGroupRepositoryArgs.cs b/sdk/dotnet/Gemini/Inputs/RepositoryGroupRepositoryArgs.cs
new file mode 100644
index 0000000000..d4db421543
--- /dev/null
+++ b/sdk/dotnet/Gemini/Inputs/RepositoryGroupRepositoryArgs.cs
@@ -0,0 +1,36 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini.Inputs
+{
+
+ public sealed class RepositoryGroupRepositoryArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Required. The Git branch pattern used for indexing in RE2 syntax.
+ /// See https://github.com/google/re2/wiki/syntax for syntax.
+ ///
+ /// - - -
+ ///
+ [Input("branchPattern", required: true)]
+ public Input BranchPattern { get; set; } = null!;
+
+ ///
+ /// Required. The DeveloperConnect repository full resource name, relative resource name
+ /// or resource URL to be indexed.
+ ///
+ [Input("resource", required: true)]
+ public Input Resource { get; set; } = null!;
+
+ public RepositoryGroupRepositoryArgs()
+ {
+ }
+ public static new RepositoryGroupRepositoryArgs Empty => new RepositoryGroupRepositoryArgs();
+ }
+}
diff --git a/sdk/dotnet/Gemini/Inputs/RepositoryGroupRepositoryGetArgs.cs b/sdk/dotnet/Gemini/Inputs/RepositoryGroupRepositoryGetArgs.cs
new file mode 100644
index 0000000000..1a1da37041
--- /dev/null
+++ b/sdk/dotnet/Gemini/Inputs/RepositoryGroupRepositoryGetArgs.cs
@@ -0,0 +1,36 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini.Inputs
+{
+
+ public sealed class RepositoryGroupRepositoryGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Required. The Git branch pattern used for indexing in RE2 syntax.
+ /// See https://github.com/google/re2/wiki/syntax for syntax.
+ ///
+ /// - - -
+ ///
+ [Input("branchPattern", required: true)]
+ public Input BranchPattern { get; set; } = null!;
+
+ ///
+ /// Required. The DeveloperConnect repository full resource name, relative resource name
+ /// or resource URL to be indexed.
+ ///
+ [Input("resource", required: true)]
+ public Input Resource { get; set; } = null!;
+
+ public RepositoryGroupRepositoryGetArgs()
+ {
+ }
+ public static new RepositoryGroupRepositoryGetArgs Empty => new RepositoryGroupRepositoryGetArgs();
+ }
+}
diff --git a/sdk/dotnet/Gemini/Outputs/RepositoryGroupIamBindingCondition.cs b/sdk/dotnet/Gemini/Outputs/RepositoryGroupIamBindingCondition.cs
new file mode 100644
index 0000000000..8ed74406bf
--- /dev/null
+++ b/sdk/dotnet/Gemini/Outputs/RepositoryGroupIamBindingCondition.cs
@@ -0,0 +1,33 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini.Outputs
+{
+
+ [OutputType]
+ public sealed class RepositoryGroupIamBindingCondition
+ {
+ public readonly string? Description;
+ public readonly string Expression;
+ public readonly string Title;
+
+ [OutputConstructor]
+ private RepositoryGroupIamBindingCondition(
+ string? description,
+
+ string expression,
+
+ string title)
+ {
+ Description = description;
+ Expression = expression;
+ Title = title;
+ }
+ }
+}
diff --git a/sdk/dotnet/Gemini/Outputs/RepositoryGroupIamMemberCondition.cs b/sdk/dotnet/Gemini/Outputs/RepositoryGroupIamMemberCondition.cs
new file mode 100644
index 0000000000..d89961024c
--- /dev/null
+++ b/sdk/dotnet/Gemini/Outputs/RepositoryGroupIamMemberCondition.cs
@@ -0,0 +1,33 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini.Outputs
+{
+
+ [OutputType]
+ public sealed class RepositoryGroupIamMemberCondition
+ {
+ public readonly string? Description;
+ public readonly string Expression;
+ public readonly string Title;
+
+ [OutputConstructor]
+ private RepositoryGroupIamMemberCondition(
+ string? description,
+
+ string expression,
+
+ string title)
+ {
+ Description = description;
+ Expression = expression;
+ Title = title;
+ }
+ }
+}
diff --git a/sdk/dotnet/Gemini/Outputs/RepositoryGroupRepository.cs b/sdk/dotnet/Gemini/Outputs/RepositoryGroupRepository.cs
new file mode 100644
index 0000000000..d7e8af0a2a
--- /dev/null
+++ b/sdk/dotnet/Gemini/Outputs/RepositoryGroupRepository.cs
@@ -0,0 +1,39 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini.Outputs
+{
+
+ [OutputType]
+ public sealed class RepositoryGroupRepository
+ {
+ ///
+ /// Required. The Git branch pattern used for indexing in RE2 syntax.
+ /// See https://github.com/google/re2/wiki/syntax for syntax.
+ ///
+ /// - - -
+ ///
+ public readonly string BranchPattern;
+ ///
+ /// Required. The DeveloperConnect repository full resource name, relative resource name
+ /// or resource URL to be indexed.
+ ///
+ public readonly string Resource;
+
+ [OutputConstructor]
+ private RepositoryGroupRepository(
+ string branchPattern,
+
+ string resource)
+ {
+ BranchPattern = branchPattern;
+ Resource = resource;
+ }
+ }
+}
diff --git a/sdk/dotnet/Gemini/README.md b/sdk/dotnet/Gemini/README.md
new file mode 100644
index 0000000000..061b113996
--- /dev/null
+++ b/sdk/dotnet/Gemini/README.md
@@ -0,0 +1 @@
+A Pulumi package for creating and managing Google Cloud Platform resources.
diff --git a/sdk/dotnet/Gemini/RepositoryGroup.cs b/sdk/dotnet/Gemini/RepositoryGroup.cs
new file mode 100644
index 0000000000..8b3bfa1174
--- /dev/null
+++ b/sdk/dotnet/Gemini/RepositoryGroup.cs
@@ -0,0 +1,317 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini
+{
+ ///
+ /// ## Example Usage
+ ///
+ /// ## Import
+ ///
+ /// RepositoryGroup can be imported using any of these accepted formats:
+ ///
+ /// * `projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}`
+ ///
+ /// * `{{project}}/{{location}}/{{code_repository_index}}/{{repository_group_id}}`
+ ///
+ /// * `{{location}}/{{code_repository_index}}/{{repository_group_id}}`
+ ///
+ /// When using the `pulumi import` command, RepositoryGroup can be imported using one of the formats above. For example:
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/repositoryGroup:RepositoryGroup default projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}
+ /// ```
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/repositoryGroup:RepositoryGroup default {{project}}/{{location}}/{{code_repository_index}}/{{repository_group_id}}
+ /// ```
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/repositoryGroup:RepositoryGroup default {{location}}/{{code_repository_index}}/{{repository_group_id}}
+ /// ```
+ ///
+ [GcpResourceType("gcp:gemini/repositoryGroup:RepositoryGroup")]
+ public partial class RepositoryGroup : global::Pulumi.CustomResource
+ {
+ ///
+ /// Required. Id of the Code Repository Index.
+ ///
+ [Output("codeRepositoryIndex")]
+ public Output CodeRepositoryIndex { get; private set; } = null!;
+
+ ///
+ /// Output only. Create time stamp
+ ///
+ [Output("createTime")]
+ public Output CreateTime { get; private set; } = null!;
+
+ ///
+ /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
+ ///
+ [Output("effectiveLabels")]
+ public Output> EffectiveLabels { get; private set; } = null!;
+
+ ///
+ /// Optional. Labels as key value pairs **Note**: This field is non-authoritative, and will only manage the labels present
+ /// in your configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.
+ ///
+ [Output("labels")]
+ public Output?> Labels { get; private set; } = null!;
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`.
+ ///
+ [Output("location")]
+ public Output Location { get; private set; } = null!;
+
+ ///
+ /// Immutable. Identifier. name of resource
+ ///
+ [Output("name")]
+ public Output Name { get; private set; } = null!;
+
+ [Output("project")]
+ public Output Project { get; private set; } = null!;
+
+ ///
+ /// The combination of labels configured directly on the resource
+ /// and default labels configured on the provider.
+ ///
+ [Output("pulumiLabels")]
+ public Output> PulumiLabels { get; private set; } = null!;
+
+ ///
+ /// Required. List of repositories to group
+ /// Structure is documented below.
+ ///
+ [Output("repositories")]
+ public Output> Repositories { get; private set; } = null!;
+
+ ///
+ /// Required. Id of the Repository Group.
+ ///
+ [Output("repositoryGroupId")]
+ public Output RepositoryGroupId { get; private set; } = null!;
+
+ ///
+ /// Output only. Update time stamp
+ ///
+ [Output("updateTime")]
+ public Output UpdateTime { get; private set; } = null!;
+
+
+ ///
+ /// Create a RepositoryGroup resource with the given unique name, arguments, and options.
+ ///
+ ///
+ /// The unique name of the resource
+ /// The arguments used to populate this resource's properties
+ /// A bag of options that control this resource's behavior
+ public RepositoryGroup(string name, RepositoryGroupArgs args, CustomResourceOptions? options = null)
+ : base("gcp:gemini/repositoryGroup:RepositoryGroup", name, args ?? new RepositoryGroupArgs(), MakeResourceOptions(options, ""))
+ {
+ }
+
+ private RepositoryGroup(string name, Input id, RepositoryGroupState? state = null, CustomResourceOptions? options = null)
+ : base("gcp:gemini/repositoryGroup:RepositoryGroup", name, state, MakeResourceOptions(options, id))
+ {
+ }
+
+ private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id)
+ {
+ var defaultOptions = new CustomResourceOptions
+ {
+ Version = Utilities.Version,
+ AdditionalSecretOutputs =
+ {
+ "effectiveLabels",
+ "pulumiLabels",
+ },
+ };
+ var merged = CustomResourceOptions.Merge(defaultOptions, options);
+ // Override the ID if one was specified for consistency with other language SDKs.
+ merged.Id = id ?? merged.Id;
+ return merged;
+ }
+ ///
+ /// Get an existing RepositoryGroup resource's state with the given name, ID, and optional extra
+ /// properties used to qualify the lookup.
+ ///
+ ///
+ /// The unique name of the resulting resource.
+ /// The unique provider ID of the resource to lookup.
+ /// Any extra arguments used during the lookup.
+ /// A bag of options that control this resource's behavior
+ public static RepositoryGroup Get(string name, Input id, RepositoryGroupState? state = null, CustomResourceOptions? options = null)
+ {
+ return new RepositoryGroup(name, id, state, options);
+ }
+ }
+
+ public sealed class RepositoryGroupArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Required. Id of the Code Repository Index.
+ ///
+ [Input("codeRepositoryIndex", required: true)]
+ public Input CodeRepositoryIndex { get; set; } = null!;
+
+ [Input("labels")]
+ private InputMap? _labels;
+
+ ///
+ /// Optional. Labels as key value pairs **Note**: This field is non-authoritative, and will only manage the labels present
+ /// in your configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.
+ ///
+ public InputMap Labels
+ {
+ get => _labels ?? (_labels = new InputMap());
+ set => _labels = value;
+ }
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`.
+ ///
+ [Input("location", required: true)]
+ public Input Location { get; set; } = null!;
+
+ [Input("project")]
+ public Input? Project { get; set; }
+
+ [Input("repositories", required: true)]
+ private InputList? _repositories;
+
+ ///
+ /// Required. List of repositories to group
+ /// Structure is documented below.
+ ///
+ public InputList Repositories
+ {
+ get => _repositories ?? (_repositories = new InputList());
+ set => _repositories = value;
+ }
+
+ ///
+ /// Required. Id of the Repository Group.
+ ///
+ [Input("repositoryGroupId", required: true)]
+ public Input RepositoryGroupId { get; set; } = null!;
+
+ public RepositoryGroupArgs()
+ {
+ }
+ public static new RepositoryGroupArgs Empty => new RepositoryGroupArgs();
+ }
+
+ public sealed class RepositoryGroupState : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Required. Id of the Code Repository Index.
+ ///
+ [Input("codeRepositoryIndex")]
+ public Input? CodeRepositoryIndex { get; set; }
+
+ ///
+ /// Output only. Create time stamp
+ ///
+ [Input("createTime")]
+ public Input? CreateTime { get; set; }
+
+ [Input("effectiveLabels")]
+ private InputMap? _effectiveLabels;
+
+ ///
+ /// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
+ ///
+ public InputMap EffectiveLabels
+ {
+ get => _effectiveLabels ?? (_effectiveLabels = new InputMap());
+ set
+ {
+ var emptySecret = Output.CreateSecret(ImmutableDictionary.Create());
+ _effectiveLabels = Output.All(value, emptySecret).Apply(v => v[0]);
+ }
+ }
+
+ [Input("labels")]
+ private InputMap? _labels;
+
+ ///
+ /// Optional. Labels as key value pairs **Note**: This field is non-authoritative, and will only manage the labels present
+ /// in your configuration. Please refer to the field 'effective_labels' for all of the labels present on the resource.
+ ///
+ public InputMap Labels
+ {
+ get => _labels ?? (_labels = new InputMap());
+ set => _labels = value;
+ }
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`.
+ ///
+ [Input("location")]
+ public Input? Location { get; set; }
+
+ ///
+ /// Immutable. Identifier. name of resource
+ ///
+ [Input("name")]
+ public Input? Name { get; set; }
+
+ [Input("project")]
+ public Input? Project { get; set; }
+
+ [Input("pulumiLabels")]
+ private InputMap? _pulumiLabels;
+
+ ///
+ /// The combination of labels configured directly on the resource
+ /// and default labels configured on the provider.
+ ///
+ public InputMap PulumiLabels
+ {
+ get => _pulumiLabels ?? (_pulumiLabels = new InputMap());
+ set
+ {
+ var emptySecret = Output.CreateSecret(ImmutableDictionary.Create());
+ _pulumiLabels = Output.All(value, emptySecret).Apply(v => v[0]);
+ }
+ }
+
+ [Input("repositories")]
+ private InputList? _repositories;
+
+ ///
+ /// Required. List of repositories to group
+ /// Structure is documented below.
+ ///
+ public InputList Repositories
+ {
+ get => _repositories ?? (_repositories = new InputList());
+ set => _repositories = value;
+ }
+
+ ///
+ /// Required. Id of the Repository Group.
+ ///
+ [Input("repositoryGroupId")]
+ public Input? RepositoryGroupId { get; set; }
+
+ ///
+ /// Output only. Update time stamp
+ ///
+ [Input("updateTime")]
+ public Input? UpdateTime { get; set; }
+
+ public RepositoryGroupState()
+ {
+ }
+ public static new RepositoryGroupState Empty => new RepositoryGroupState();
+ }
+}
diff --git a/sdk/dotnet/Gemini/RepositoryGroupIamBinding.cs b/sdk/dotnet/Gemini/RepositoryGroupIamBinding.cs
new file mode 100644
index 0000000000..b76ac2ca3e
--- /dev/null
+++ b/sdk/dotnet/Gemini/RepositoryGroupIamBinding.cs
@@ -0,0 +1,281 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini
+{
+ ///
+ /// ## Import
+ ///
+ /// For all import syntaxes, the "resource in question" can take any of the following forms:
+ ///
+ /// * projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}
+ ///
+ /// * {{project}}/{{location}}/{{code_repository_index}}/{{repository_group_id}}
+ ///
+ /// * {{location}}/{{code_repository_index}}/{{repository_group_id}}
+ ///
+ /// * {{repository_group_id}}
+ ///
+ /// Any variables not passed in the import command will be taken from the provider configuration.
+ ///
+ /// Gemini for Google Cloud repositorygroup IAM resources can be imported using the resource identifiers, role, and member.
+ ///
+ /// IAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding editor "projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser user:jane@example.com"
+ /// ```
+ ///
+ /// IAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding editor "projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser"
+ /// ```
+ ///
+ /// IAM policy imports use the identifier of the resource in question, e.g.
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding editor projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}
+ /// ```
+ ///
+ /// -> **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the
+ ///
+ /// full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.
+ ///
+ [GcpResourceType("gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding")]
+ public partial class RepositoryGroupIamBinding : global::Pulumi.CustomResource
+ {
+ [Output("codeRepositoryIndex")]
+ public Output CodeRepositoryIndex { get; private set; } = null!;
+
+ [Output("condition")]
+ public Output Condition { get; private set; } = null!;
+
+ ///
+ /// (Computed) The etag of the IAM policy.
+ ///
+ [Output("etag")]
+ public Output Etag { get; private set; } = null!;
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,
+ /// the value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no
+ /// location is specified, it is taken from the provider configuration.
+ ///
+ [Output("location")]
+ public Output Location { get; private set; } = null!;
+
+ ///
+ /// Identities that will be granted the privilege in `role`.
+ /// Each entry can have one of the following values:
+ /// * **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.
+ /// * **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.
+ /// * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.
+ /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.
+ /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.
+ /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.
+ /// * **projectOwner:projectid**: Owners of the given project. For example, "projectOwner:my-example-project"
+ /// * **projectEditor:projectid**: Editors of the given project. For example, "projectEditor:my-example-project"
+ /// * **projectViewer:projectid**: Viewers of the given project. For example, "projectViewer:my-example-project"
+ ///
+ [Output("members")]
+ public Output> Members { get; private set; } = null!;
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.
+ ///
+ [Output("project")]
+ public Output Project { get; private set; } = null!;
+
+ [Output("repositoryGroupId")]
+ public Output RepositoryGroupId { get; private set; } = null!;
+
+ ///
+ /// The role that should be applied. Only one
+ /// `gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format
+ /// `[projects|organizations]/{parent-name}/roles/{role-name}`.
+ ///
+ [Output("role")]
+ public Output Role { get; private set; } = null!;
+
+
+ ///
+ /// Create a RepositoryGroupIamBinding resource with the given unique name, arguments, and options.
+ ///
+ ///
+ /// The unique name of the resource
+ /// The arguments used to populate this resource's properties
+ /// A bag of options that control this resource's behavior
+ public RepositoryGroupIamBinding(string name, RepositoryGroupIamBindingArgs args, CustomResourceOptions? options = null)
+ : base("gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding", name, args ?? new RepositoryGroupIamBindingArgs(), MakeResourceOptions(options, ""))
+ {
+ }
+
+ private RepositoryGroupIamBinding(string name, Input id, RepositoryGroupIamBindingState? state = null, CustomResourceOptions? options = null)
+ : base("gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding", name, state, MakeResourceOptions(options, id))
+ {
+ }
+
+ private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id)
+ {
+ var defaultOptions = new CustomResourceOptions
+ {
+ Version = Utilities.Version,
+ };
+ var merged = CustomResourceOptions.Merge(defaultOptions, options);
+ // Override the ID if one was specified for consistency with other language SDKs.
+ merged.Id = id ?? merged.Id;
+ return merged;
+ }
+ ///
+ /// Get an existing RepositoryGroupIamBinding resource's state with the given name, ID, and optional extra
+ /// properties used to qualify the lookup.
+ ///
+ ///
+ /// The unique name of the resulting resource.
+ /// The unique provider ID of the resource to lookup.
+ /// Any extra arguments used during the lookup.
+ /// A bag of options that control this resource's behavior
+ public static RepositoryGroupIamBinding Get(string name, Input id, RepositoryGroupIamBindingState? state = null, CustomResourceOptions? options = null)
+ {
+ return new RepositoryGroupIamBinding(name, id, state, options);
+ }
+ }
+
+ public sealed class RepositoryGroupIamBindingArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("codeRepositoryIndex", required: true)]
+ public Input CodeRepositoryIndex { get; set; } = null!;
+
+ [Input("condition")]
+ public Input? Condition { get; set; }
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,
+ /// the value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no
+ /// location is specified, it is taken from the provider configuration.
+ ///
+ [Input("location")]
+ public Input? Location { get; set; }
+
+ [Input("members", required: true)]
+ private InputList? _members;
+
+ ///
+ /// Identities that will be granted the privilege in `role`.
+ /// Each entry can have one of the following values:
+ /// * **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.
+ /// * **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.
+ /// * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.
+ /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.
+ /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.
+ /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.
+ /// * **projectOwner:projectid**: Owners of the given project. For example, "projectOwner:my-example-project"
+ /// * **projectEditor:projectid**: Editors of the given project. For example, "projectEditor:my-example-project"
+ /// * **projectViewer:projectid**: Viewers of the given project. For example, "projectViewer:my-example-project"
+ ///
+ public InputList Members
+ {
+ get => _members ?? (_members = new InputList());
+ set => _members = value;
+ }
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.
+ ///
+ [Input("project")]
+ public Input? Project { get; set; }
+
+ [Input("repositoryGroupId", required: true)]
+ public Input RepositoryGroupId { get; set; } = null!;
+
+ ///
+ /// The role that should be applied. Only one
+ /// `gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format
+ /// `[projects|organizations]/{parent-name}/roles/{role-name}`.
+ ///
+ [Input("role", required: true)]
+ public Input Role { get; set; } = null!;
+
+ public RepositoryGroupIamBindingArgs()
+ {
+ }
+ public static new RepositoryGroupIamBindingArgs Empty => new RepositoryGroupIamBindingArgs();
+ }
+
+ public sealed class RepositoryGroupIamBindingState : global::Pulumi.ResourceArgs
+ {
+ [Input("codeRepositoryIndex")]
+ public Input? CodeRepositoryIndex { get; set; }
+
+ [Input("condition")]
+ public Input? Condition { get; set; }
+
+ ///
+ /// (Computed) The etag of the IAM policy.
+ ///
+ [Input("etag")]
+ public Input? Etag { get; set; }
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,
+ /// the value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no
+ /// location is specified, it is taken from the provider configuration.
+ ///
+ [Input("location")]
+ public Input? Location { get; set; }
+
+ [Input("members")]
+ private InputList? _members;
+
+ ///
+ /// Identities that will be granted the privilege in `role`.
+ /// Each entry can have one of the following values:
+ /// * **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.
+ /// * **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.
+ /// * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.
+ /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.
+ /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.
+ /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.
+ /// * **projectOwner:projectid**: Owners of the given project. For example, "projectOwner:my-example-project"
+ /// * **projectEditor:projectid**: Editors of the given project. For example, "projectEditor:my-example-project"
+ /// * **projectViewer:projectid**: Viewers of the given project. For example, "projectViewer:my-example-project"
+ ///
+ public InputList Members
+ {
+ get => _members ?? (_members = new InputList());
+ set => _members = value;
+ }
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.
+ ///
+ [Input("project")]
+ public Input? Project { get; set; }
+
+ [Input("repositoryGroupId")]
+ public Input? RepositoryGroupId { get; set; }
+
+ ///
+ /// The role that should be applied. Only one
+ /// `gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format
+ /// `[projects|organizations]/{parent-name}/roles/{role-name}`.
+ ///
+ [Input("role")]
+ public Input? Role { get; set; }
+
+ public RepositoryGroupIamBindingState()
+ {
+ }
+ public static new RepositoryGroupIamBindingState Empty => new RepositoryGroupIamBindingState();
+ }
+}
diff --git a/sdk/dotnet/Gemini/RepositoryGroupIamMember.cs b/sdk/dotnet/Gemini/RepositoryGroupIamMember.cs
new file mode 100644
index 0000000000..d92cfd1afb
--- /dev/null
+++ b/sdk/dotnet/Gemini/RepositoryGroupIamMember.cs
@@ -0,0 +1,269 @@
+// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+using System;
+using System.Collections.Generic;
+using System.Collections.Immutable;
+using System.Threading.Tasks;
+using Pulumi.Serialization;
+
+namespace Pulumi.Gcp.Gemini
+{
+ ///
+ /// ## Import
+ ///
+ /// For all import syntaxes, the "resource in question" can take any of the following forms:
+ ///
+ /// * projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}
+ ///
+ /// * {{project}}/{{location}}/{{code_repository_index}}/{{repository_group_id}}
+ ///
+ /// * {{location}}/{{code_repository_index}}/{{repository_group_id}}
+ ///
+ /// * {{repository_group_id}}
+ ///
+ /// Any variables not passed in the import command will be taken from the provider configuration.
+ ///
+ /// Gemini for Google Cloud repositorygroup IAM resources can be imported using the resource identifiers, role, and member.
+ ///
+ /// IAM member imports use space-delimited identifiers: the resource in question, the role, and the member identity, e.g.
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember editor "projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser user:jane@example.com"
+ /// ```
+ ///
+ /// IAM binding imports use space-delimited identifiers: the resource in question and the role, e.g.
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember editor "projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser"
+ /// ```
+ ///
+ /// IAM policy imports use the identifier of the resource in question, e.g.
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember editor projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}}
+ /// ```
+ ///
+ /// -> **Custom Roles** If you're importing a IAM resource with a custom role, make sure to use the
+ ///
+ /// full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`.
+ ///
+ [GcpResourceType("gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember")]
+ public partial class RepositoryGroupIamMember : global::Pulumi.CustomResource
+ {
+ [Output("codeRepositoryIndex")]
+ public Output CodeRepositoryIndex { get; private set; } = null!;
+
+ [Output("condition")]
+ public Output Condition { get; private set; } = null!;
+
+ ///
+ /// (Computed) The etag of the IAM policy.
+ ///
+ [Output("etag")]
+ public Output Etag { get; private set; } = null!;
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,
+ /// the value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no
+ /// location is specified, it is taken from the provider configuration.
+ ///
+ [Output("location")]
+ public Output Location { get; private set; } = null!;
+
+ ///
+ /// Identities that will be granted the privilege in `role`.
+ /// Each entry can have one of the following values:
+ /// * **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.
+ /// * **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.
+ /// * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.
+ /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.
+ /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.
+ /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.
+ /// * **projectOwner:projectid**: Owners of the given project. For example, "projectOwner:my-example-project"
+ /// * **projectEditor:projectid**: Editors of the given project. For example, "projectEditor:my-example-project"
+ /// * **projectViewer:projectid**: Viewers of the given project. For example, "projectViewer:my-example-project"
+ ///
+ [Output("member")]
+ public Output Member { get; private set; } = null!;
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.
+ ///
+ [Output("project")]
+ public Output Project { get; private set; } = null!;
+
+ [Output("repositoryGroupId")]
+ public Output RepositoryGroupId { get; private set; } = null!;
+
+ ///
+ /// The role that should be applied. Only one
+ /// `gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format
+ /// `[projects|organizations]/{parent-name}/roles/{role-name}`.
+ ///
+ [Output("role")]
+ public Output Role { get; private set; } = null!;
+
+
+ ///
+ /// Create a RepositoryGroupIamMember resource with the given unique name, arguments, and options.
+ ///
+ ///
+ /// The unique name of the resource
+ /// The arguments used to populate this resource's properties
+ /// A bag of options that control this resource's behavior
+ public RepositoryGroupIamMember(string name, RepositoryGroupIamMemberArgs args, CustomResourceOptions? options = null)
+ : base("gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember", name, args ?? new RepositoryGroupIamMemberArgs(), MakeResourceOptions(options, ""))
+ {
+ }
+
+ private RepositoryGroupIamMember(string name, Input id, RepositoryGroupIamMemberState? state = null, CustomResourceOptions? options = null)
+ : base("gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember", name, state, MakeResourceOptions(options, id))
+ {
+ }
+
+ private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id)
+ {
+ var defaultOptions = new CustomResourceOptions
+ {
+ Version = Utilities.Version,
+ };
+ var merged = CustomResourceOptions.Merge(defaultOptions, options);
+ // Override the ID if one was specified for consistency with other language SDKs.
+ merged.Id = id ?? merged.Id;
+ return merged;
+ }
+ ///
+ /// Get an existing RepositoryGroupIamMember resource's state with the given name, ID, and optional extra
+ /// properties used to qualify the lookup.
+ ///
+ ///
+ /// The unique name of the resulting resource.
+ /// The unique provider ID of the resource to lookup.
+ /// Any extra arguments used during the lookup.
+ /// A bag of options that control this resource's behavior
+ public static RepositoryGroupIamMember Get(string name, Input id, RepositoryGroupIamMemberState? state = null, CustomResourceOptions? options = null)
+ {
+ return new RepositoryGroupIamMember(name, id, state, options);
+ }
+ }
+
+ public sealed class RepositoryGroupIamMemberArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("codeRepositoryIndex", required: true)]
+ public Input CodeRepositoryIndex { get; set; } = null!;
+
+ [Input("condition")]
+ public Input? Condition { get; set; }
+
+ ///
+ /// The location of the Code Repository Index, for example `us-central1`. Used to find the parent resource to bind the IAM policy to. If not specified,
+ /// the value will be parsed from the identifier of the parent resource. If no location is provided in the parent identifier and no
+ /// location is specified, it is taken from the provider configuration.
+ ///
+ [Input("location")]
+ public Input? Location { get; set; }
+
+ ///
+ /// Identities that will be granted the privilege in `role`.
+ /// Each entry can have one of the following values:
+ /// * **allUsers**: A special identifier that represents anyone who is on the internet; with or without a Google account.
+ /// * **allAuthenticatedUsers**: A special identifier that represents anyone who is authenticated with a Google account or a service account.
+ /// * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.
+ /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.
+ /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.
+ /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.
+ /// * **projectOwner:projectid**: Owners of the given project. For example, "projectOwner:my-example-project"
+ /// * **projectEditor:projectid**: Editors of the given project. For example, "projectEditor:my-example-project"
+ /// * **projectViewer:projectid**: Viewers of the given project. For example, "projectViewer:my-example-project"
+ ///
+ [Input("member", required: true)]
+ public Input Member { get; set; } = null!;
+
+ ///
+ /// The ID of the project in which the resource belongs.
+ /// If it is not provided, the project will be parsed from the identifier of the parent resource. If no project is provided in the parent identifier and no project is specified, the provider project is used.
+ ///
+ [Input("project")]
+ public Input? Project { get; set; }
+
+ [Input("repositoryGroupId", required: true)]
+ public Input RepositoryGroupId { get; set; } = null!;
+
+ ///
+ /// The role that should be applied. Only one
+ /// `gcp.gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format
+ /// `[projects|organizations]/{parent-name}/roles/{role-name}`.
+ ///
+ [Input("role", required: true)]
+ public Input Role { get; set; } = null!;
+
+ public RepositoryGroupIamMemberArgs()
+ {
+ }
+ public static new RepositoryGroupIamMemberArgs Empty => new RepositoryGroupIamMemberArgs();
+ }
+
+ public sealed class RepositoryGroupIamMemberState : global::Pulumi.ResourceArgs
+ {
+ [Input("codeRepositoryIndex")]
+ public Input