diff --git a/patches/0001-Allow-disabling-the-partner-name.patch b/patches/0001-Allow-disabling-the-partner-name.patch index 827fdc328b..05db7c4ebd 100644 --- a/patches/0001-Allow-disabling-the-partner-name.patch +++ b/patches/0001-Allow-disabling-the-partner-name.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Allow disabling the partner name Add options to set or disable partner name. diff --git a/google-beta/provider/provider.go b/google-beta/provider/provider.go -index b23f8b0d0..4861208ef 100644 +index 16a0bcf26..8f31ba934 100644 --- a/google-beta/provider/provider.go +++ b/google-beta/provider/provider.go -@@ -122,6 +122,19 @@ func Provider() *schema.Provider { +@@ -125,6 +125,19 @@ func Provider() *schema.Provider { Optional: true, }, @@ -29,7 +29,7 @@ index b23f8b0d0..4861208ef 100644 "request_reason": { Type: schema.TypeString, Optional: true, -@@ -935,6 +948,21 @@ func ProviderConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr +@@ -943,6 +956,21 @@ func ProviderConfigure(ctx context.Context, d *schema.ResourceData, p *schema.Pr UserAgent: p.UserAgent("terraform-provider-google-beta", version.ProviderVersion), } diff --git a/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch b/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch index 431bfb376f..f5228bd710 100644 --- a/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch +++ b/patches/0002-Add-nil-checks-for-sql-database-instance-flattening.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add nil checks for sql database instance flattening diff --git a/google-beta/services/sql/resource_sql_database_instance.go b/google-beta/services/sql/resource_sql_database_instance.go -index 34aa20f72..af14d90a7 100644 +index f4b874dc3..7d6b2c6e0 100644 --- a/google-beta/services/sql/resource_sql_database_instance.go +++ b/google-beta/services/sql/resource_sql_database_instance.go -@@ -2179,6 +2179,10 @@ func resourceSqlDatabaseInstanceImport(d *schema.ResourceData, meta interface{}) +@@ -2180,6 +2180,10 @@ func resourceSqlDatabaseInstanceImport(d *schema.ResourceData, meta interface{}) } func flattenSettings(settings *sqladmin.Settings, d *schema.ResourceData) []map[string]interface{} { @@ -19,7 +19,7 @@ index 34aa20f72..af14d90a7 100644 data := map[string]interface{}{ "version": settings.SettingsVersion, "tier": settings.Tier, -@@ -2269,6 +2273,10 @@ func flattenDataCacheConfig(d *sqladmin.DataCacheConfig) []map[string]interface{ +@@ -2270,6 +2274,10 @@ func flattenDataCacheConfig(d *sqladmin.DataCacheConfig) []map[string]interface{ } func flattenBackupConfiguration(backupConfiguration *sqladmin.BackupConfiguration) []map[string]interface{} { @@ -30,7 +30,7 @@ index 34aa20f72..af14d90a7 100644 data := map[string]interface{}{ "binary_log_enabled": backupConfiguration.BinaryLogEnabled, "enabled": backupConfiguration.Enabled, -@@ -2361,6 +2369,10 @@ func flattenDatabaseFlags(databaseFlags []*sqladmin.DatabaseFlags) []map[string] +@@ -2362,6 +2370,10 @@ func flattenDatabaseFlags(databaseFlags []*sqladmin.DatabaseFlags) []map[string] } func flattenIpConfiguration(ipConfiguration *sqladmin.IpConfiguration, d *schema.ResourceData) interface{} { @@ -41,7 +41,7 @@ index 34aa20f72..af14d90a7 100644 data := map[string]interface{}{ "ipv4_enabled": ipConfiguration.Ipv4Enabled, "private_network": ipConfiguration.PrivateNetwork, -@@ -2423,6 +2435,10 @@ func flattenAuthorizedNetworks(entries []*sqladmin.AclEntry) interface{} { +@@ -2424,6 +2436,10 @@ func flattenAuthorizedNetworks(entries []*sqladmin.AclEntry) interface{} { } func flattenLocationPreference(locationPreference *sqladmin.LocationPreference) interface{} { @@ -52,7 +52,7 @@ index 34aa20f72..af14d90a7 100644 data := map[string]interface{}{ "follow_gae_application": locationPreference.FollowGaeApplication, "zone": locationPreference.Zone, -@@ -2433,6 +2449,10 @@ func flattenLocationPreference(locationPreference *sqladmin.LocationPreference) +@@ -2434,6 +2450,10 @@ func flattenLocationPreference(locationPreference *sqladmin.LocationPreference) } func flattenMaintenanceWindow(maintenanceWindow *sqladmin.MaintenanceWindow) interface{} { @@ -63,7 +63,7 @@ index 34aa20f72..af14d90a7 100644 data := map[string]interface{}{ "day": maintenanceWindow.Day, "hour": maintenanceWindow.Hour, -@@ -2508,6 +2528,10 @@ func flattenServerCaCerts(caCerts []*sqladmin.SslCert) []map[string]interface{} +@@ -2509,6 +2529,10 @@ func flattenServerCaCerts(caCerts []*sqladmin.SslCert) []map[string]interface{} } func flattenInsightsConfig(insightsConfig *sqladmin.InsightsConfig) interface{} { diff --git a/patches/0004-website-docs-d-tweaks.patch b/patches/0004-website-docs-d-tweaks.patch index aaedc53025..4ef0eb4c08 100644 --- a/patches/0004-website-docs-d-tweaks.patch +++ b/patches/0004-website-docs-d-tweaks.patch @@ -397,7 +397,7 @@ index 67ad0b8ea..285ef9cd8 100644 -See [google_runtimeconfig_variable](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/runtimeconfig_variable#argument-reference) resource for details of the available attributes. +See google_runtimeconfig_variable resource for details of the available attributes. diff --git a/website/docs/d/service_account_id_token.html.markdown b/website/docs/d/service_account_id_token.html.markdown -index 733ba1cc4..13605b227 100644 +index 845f692d3..8b602f986 100644 --- a/website/docs/d/service_account_id_token.html.markdown +++ b/website/docs/d/service_account_id_token.html.markdown @@ -12,7 +12,7 @@ For more information see @@ -413,8 +413,8 @@ index 733ba1cc4..13605b227 100644 ``` ## Example Usage - Service Account Impersonation. -- `google_service_account_access_token` will use background impersonated credentials provided by [google_service_account_access_token](https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/service_account_access_token). -+ `google_service_account_access_token` will use background impersonated credentials provided by `google_service_account_access_token`. +- `google_service_account_id_token` will use background impersonated credentials provided by [google_service_account_access_token](https://registry.terraform.io/providers/hashicorp/google/latest/docs/data-sources/service_account_access_token). ++ `google_service_account_id_token` will use background impersonated credentials provided by `google_service_account_access_token`. Note: to use the following, you must grant `target_service_account` the `roles/iam.serviceAccountTokenCreator` role on itself. diff --git a/patches/0005-docs-patching.patch b/patches/0005-docs-patching.patch index 86b93bf370..9b2edbcb5a 100644 --- a/patches/0005-docs-patching.patch +++ b/patches/0005-docs-patching.patch @@ -494,7 +494,7 @@ index c3e738686..4ab0fb25d 100644 * `project` - (Optional) The ID of the project in which the resource belongs. If it is not provided, the provider project is used. diff --git a/website/docs/r/composer_environment.html.markdown b/website/docs/r/composer_environment.html.markdown -index 35740d97b..dc6a608d7 100644 +index 8f560d4f6..72c5979c7 100644 --- a/website/docs/r/composer_environment.html.markdown +++ b/website/docs/r/composer_environment.html.markdown @@ -31,24 +31,21 @@ To get more information about Environments, see: @@ -605,7 +605,7 @@ index a6bbbfa4b..92a6811de 100644 ## Example Usage - Backend Service Signed Url Key diff --git a/website/docs/r/compute_disk.html.markdown b/website/docs/r/compute_disk.html.markdown -index ffd957ef2..97eab8598 100644 +index c1e22cb37..a200b4164 100644 --- a/website/docs/r/compute_disk.html.markdown +++ b/website/docs/r/compute_disk.html.markdown @@ -43,9 +43,6 @@ To get more information about Disk, see: @@ -618,7 +618,7 @@ index ffd957ef2..97eab8598 100644
-@@ -171,7 +168,7 @@ The following arguments are supported: +@@ -197,7 +194,7 @@ The following arguments are supported: If you specify this field along with `image` or `snapshot`, the value must not be less than the size of the image or the size of the snapshot. @@ -669,7 +669,7 @@ index df91843c5..40b452e03 100644 ## Attributes Reference diff --git a/website/docs/r/compute_instance.html.markdown b/website/docs/r/compute_instance.html.markdown -index 1521b7ee2..d4d63ec45 100644 +index acd46bad2..47060bb12 100644 --- a/website/docs/r/compute_instance.html.markdown +++ b/website/docs/r/compute_instance.html.markdown @@ -140,7 +140,7 @@ The following arguments are supported: @@ -825,7 +825,7 @@ index c7a253e6d..fd7c0580c 100644 ## Attributes Reference diff --git a/website/docs/r/compute_instance_template.html.markdown b/website/docs/r/compute_instance_template.html.markdown -index a2621e9d9..011ad3702 100644 +index 88a604fa4..9c8259586 100644 --- a/website/docs/r/compute_instance_template.html.markdown +++ b/website/docs/r/compute_instance_template.html.markdown @@ -183,12 +183,11 @@ resource "google_compute_instance_template" "foobar" { @@ -1090,7 +1090,7 @@ index 3c624d8fc..a7a982c18 100644 ## Example Usage diff --git a/website/docs/r/compute_region_disk.html.markdown b/website/docs/r/compute_region_disk.html.markdown -index 9df790d20..723d71634 100644 +index bd0efd39e..261d60ba0 100644 --- a/website/docs/r/compute_region_disk.html.markdown +++ b/website/docs/r/compute_region_disk.html.markdown @@ -43,9 +43,8 @@ To get more information about RegionDisk, see: @@ -1131,7 +1131,7 @@ index db7f57628..dceb98ac2 100644 ```hcl diff --git a/website/docs/r/compute_region_instance_group_manager.html.markdown b/website/docs/r/compute_region_instance_group_manager.html.markdown -index 465bfb373..af3c606c4 100644 +index 9becef0fe..4d17cf1e7 100644 --- a/website/docs/r/compute_region_instance_group_manager.html.markdown +++ b/website/docs/r/compute_region_instance_group_manager.html.markdown @@ -166,7 +166,7 @@ The following arguments are supported: @@ -1144,7 +1144,7 @@ index 465bfb373..af3c606c4 100644 * `wait_for_instances_status` - (Optional) When used with `wait_for_instances` it specifies the status to wait for. diff --git a/website/docs/r/compute_region_network_endpoint_group.html.markdown b/website/docs/r/compute_region_network_endpoint_group.html.markdown -index d3bc3d4d0..c3ac4fa42 100644 +index f240f0708..40f39cf11 100644 --- a/website/docs/r/compute_region_network_endpoint_group.html.markdown +++ b/website/docs/r/compute_region_network_endpoint_group.html.markdown @@ -23,11 +23,6 @@ description: |- @@ -1463,7 +1463,7 @@ index 000000000..62d6db522 + +This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override). diff --git a/website/docs/r/compute_security_policy.html.markdown b/website/docs/r/compute_security_policy.html.markdown -index 00c73a545..4ff6df593 100644 +index 9b1aaa175..e9bfaf572 100644 --- a/website/docs/r/compute_security_policy.html.markdown +++ b/website/docs/r/compute_security_policy.html.markdown @@ -10,7 +10,7 @@ A Security Policy defines an IP blacklist or whitelist that protects load balanc @@ -1523,7 +1523,7 @@ index e96d17f09..bbd005a6a 100644 resource "google_compute_ssl_certificate" "default" { name_prefix = "my-certificate-" diff --git a/website/docs/r/compute_subnetwork.html.markdown b/website/docs/r/compute_subnetwork.html.markdown -index 70ca4fdf5..b666f220d 100644 +index 2818f72b0..93b55e24e 100644 --- a/website/docs/r/compute_subnetwork.html.markdown +++ b/website/docs/r/compute_subnetwork.html.markdown @@ -391,9 +391,6 @@ The following arguments are supported: @@ -1581,7 +1581,7 @@ index f18c91533..924ad4cc0 100644
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? 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; } + + /// + /// 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")] + public Input? Member { 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")] + 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 RepositoryGroupIamMemberState() + { + } + public static new RepositoryGroupIamMemberState Empty => new RepositoryGroupIamMemberState(); + } +} diff --git a/sdk/dotnet/Gemini/RepositoryGroupIamPolicy.cs b/sdk/dotnet/Gemini/RepositoryGroupIamPolicy.cs new file mode 100644 index 0000000000..c716e8f548 --- /dev/null +++ b/sdk/dotnet/Gemini/RepositoryGroupIamPolicy.cs @@ -0,0 +1,209 @@ +// *** 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy")] + public partial class RepositoryGroupIamPolicy : global::Pulumi.CustomResource + { + [Output("codeRepositoryIndex")] + public Output CodeRepositoryIndex { 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!; + + /// + /// The policy data generated by + /// a `gcp.organizations.getIAMPolicy` data source. + /// + [Output("policyData")] + public Output PolicyData { 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!; + + + /// + /// Create a RepositoryGroupIamPolicy 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 RepositoryGroupIamPolicy(string name, RepositoryGroupIamPolicyArgs args, CustomResourceOptions? options = null) + : base("gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy", name, args ?? new RepositoryGroupIamPolicyArgs(), MakeResourceOptions(options, "")) + { + } + + private RepositoryGroupIamPolicy(string name, Input id, RepositoryGroupIamPolicyState? state = null, CustomResourceOptions? options = null) + : base("gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy", 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 RepositoryGroupIamPolicy 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 RepositoryGroupIamPolicy Get(string name, Input id, RepositoryGroupIamPolicyState? state = null, CustomResourceOptions? options = null) + { + return new RepositoryGroupIamPolicy(name, id, state, options); + } + } + + public sealed class RepositoryGroupIamPolicyArgs : global::Pulumi.ResourceArgs + { + [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 policy data generated by + /// a `gcp.organizations.getIAMPolicy` data source. + /// + [Input("policyData", required: true)] + public Input PolicyData { 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!; + + public RepositoryGroupIamPolicyArgs() + { + } + public static new RepositoryGroupIamPolicyArgs Empty => new RepositoryGroupIamPolicyArgs(); + } + + public sealed class RepositoryGroupIamPolicyState : global::Pulumi.ResourceArgs + { + [Input("codeRepositoryIndex")] + public Input? CodeRepositoryIndex { 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; } + + /// + /// The policy data generated by + /// a `gcp.organizations.getIAMPolicy` data source. + /// + [Input("policyData")] + public Input? PolicyData { 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")] + public Input? RepositoryGroupId { get; set; } + + public RepositoryGroupIamPolicyState() + { + } + public static new RepositoryGroupIamPolicyState Empty => new RepositoryGroupIamPolicyState(); + } +} diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.cs index 1cd86a3b6c..c9f139ae76 100644 --- a/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.cs +++ b/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.cs @@ -14,7 +14,7 @@ public sealed class FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControl { /// /// Configures the manner in which the template library is installed on the cluster. - /// Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + /// Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. /// [Input("installation")] public Input? Installation { get; set; } diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryGetArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryGetArgs.cs index c620da6ac2..6754535fc5 100644 --- a/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryGetArgs.cs +++ b/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryGetArgs.cs @@ -14,7 +14,7 @@ public sealed class FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControl { /// /// Configures the manner in which the template library is installed on the cluster. - /// Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + /// Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. /// [Input("installation")] public Input? Installation { get; set; } diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncArgs.cs index 282e1dc372..7f96111460 100644 --- a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncArgs.cs +++ b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncArgs.cs @@ -25,7 +25,7 @@ public sealed class FeatureMembershipConfigmanagementConfigSyncArgs : global::Pu public Input? Git { get; set; } /// - /// 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. + /// 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. /// [Input("metricsGcpServiceAccountEmail")] public Input? MetricsGcpServiceAccountEmail { get; set; } @@ -39,7 +39,7 @@ public sealed class FeatureMembershipConfigmanagementConfigSyncArgs : global::Pu public Input? Oci { get; set; } /// - /// 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. + /// 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. /// [Input("preventDrift")] public Input? PreventDrift { get; set; } @@ -50,6 +50,12 @@ public sealed class FeatureMembershipConfigmanagementConfigSyncArgs : global::Pu [Input("sourceFormat")] public Input? SourceFormat { get; set; } + /// + /// 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`. + /// + [Input("stopSyncing")] + public Input? StopSyncing { get; set; } + public FeatureMembershipConfigmanagementConfigSyncArgs() { } diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncGetArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncGetArgs.cs index d2c710d801..9216168c15 100644 --- a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncGetArgs.cs +++ b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncGetArgs.cs @@ -25,7 +25,7 @@ public sealed class FeatureMembershipConfigmanagementConfigSyncGetArgs : global: public Input? Git { get; set; } /// - /// 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. + /// 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. /// [Input("metricsGcpServiceAccountEmail")] public Input? MetricsGcpServiceAccountEmail { get; set; } @@ -39,7 +39,7 @@ public sealed class FeatureMembershipConfigmanagementConfigSyncGetArgs : global: public Input? Oci { get; set; } /// - /// 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. + /// 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. /// [Input("preventDrift")] public Input? PreventDrift { get; set; } @@ -50,6 +50,12 @@ public sealed class FeatureMembershipConfigmanagementConfigSyncGetArgs : global: [Input("sourceFormat")] public Input? SourceFormat { get; set; } + /// + /// 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`. + /// + [Input("stopSyncing")] + public Input? StopSyncing { get; set; } + public FeatureMembershipConfigmanagementConfigSyncGetArgs() { } diff --git a/sdk/dotnet/GkeHub/MembershipBinding.cs b/sdk/dotnet/GkeHub/MembershipBinding.cs index 10e91f2dea..5e521c406b 100644 --- a/sdk/dotnet/GkeHub/MembershipBinding.cs +++ b/sdk/dotnet/GkeHub/MembershipBinding.cs @@ -42,7 +42,7 @@ namespace Pulumi.Gcp.GkeHub /// /// var membership = new Gcp.GkeHub.Membership("membership", new() /// { - /// MembershipId = "tf-test-membership_9106", + /// MembershipId = "tf-test-membership_27169", /// Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs /// { /// GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs @@ -60,12 +60,12 @@ namespace Pulumi.Gcp.GkeHub /// /// var scope = new Gcp.GkeHub.Scope("scope", new() /// { - /// ScopeId = "tf-test-scope_27169", + /// ScopeId = "tf-test-scope_75223", /// }); /// /// var membershipBinding = new Gcp.GkeHub.MembershipBinding("membership_binding", new() /// { - /// MembershipBindingId = "tf-test-membership-binding_75223", + /// MembershipBindingId = "tf-test-membership-binding_41819", /// Scope = scope.Name, /// MembershipId = membership.MembershipId, /// Location = "global", diff --git a/sdk/dotnet/GkeHub/MembershipRbacRoleBinding.cs b/sdk/dotnet/GkeHub/MembershipRbacRoleBinding.cs index 527be8eab4..829089fb24 100644 --- a/sdk/dotnet/GkeHub/MembershipRbacRoleBinding.cs +++ b/sdk/dotnet/GkeHub/MembershipRbacRoleBinding.cs @@ -34,7 +34,7 @@ namespace Pulumi.Gcp.GkeHub /// /// var membership = new Gcp.GkeHub.Membership("membership", new() /// { - /// MembershipId = "tf-test-membership_41819", + /// MembershipId = "tf-test-membership_75092", /// Endpoint = new Gcp.GkeHub.Inputs.MembershipEndpointArgs /// { /// GkeCluster = new Gcp.GkeHub.Inputs.MembershipEndpointGkeClusterArgs @@ -54,7 +54,7 @@ namespace Pulumi.Gcp.GkeHub /// /// var membershipRbacRoleBinding = new Gcp.GkeHub.MembershipRbacRoleBinding("membership_rbac_role_binding", new() /// { - /// MembershipRbacRoleBindingId = "tf-test-membership-rbac-role-binding_75092", + /// MembershipRbacRoleBindingId = "tf-test-membership-rbac-role-binding_2605", /// MembershipId = membership.MembershipId, /// User = $"service-{project.Apply(getProjectResult => getProjectResult.Number)}@gcp-sa-anthossupport.iam.gserviceaccount.com", /// Role = new Gcp.GkeHub.Inputs.MembershipRbacRoleBindingRoleArgs diff --git a/sdk/dotnet/GkeHub/Namespace.cs b/sdk/dotnet/GkeHub/Namespace.cs index dcb13ec57d..cc333b64de 100644 --- a/sdk/dotnet/GkeHub/Namespace.cs +++ b/sdk/dotnet/GkeHub/Namespace.cs @@ -32,12 +32,12 @@ namespace Pulumi.Gcp.GkeHub /// { /// var scope = new Gcp.GkeHub.Scope("scope", new() /// { - /// ScopeId = "tf-test-scope_2605", + /// ScopeId = "tf-test-scope_34535", /// }); /// /// var @namespace = new Gcp.GkeHub.Namespace("namespace", new() /// { - /// ScopeNamespaceId = "tf-test-namespace_34535", + /// ScopeNamespaceId = "tf-test-namespace_22375", /// ScopeId = scope.ScopeId, /// Scope = scope.Name, /// NamespaceLabels = diff --git a/sdk/dotnet/GkeHub/Outputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary.cs b/sdk/dotnet/GkeHub/Outputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary.cs index bee8708545..786b8a91d6 100644 --- a/sdk/dotnet/GkeHub/Outputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary.cs +++ b/sdk/dotnet/GkeHub/Outputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary.cs @@ -15,7 +15,7 @@ public sealed class FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControl { /// /// Configures the manner in which the template library is installed on the cluster. - /// Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + /// Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. /// public readonly string? Installation; diff --git a/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagementConfigSync.cs b/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagementConfigSync.cs index 79a95b8543..5a138f8b42 100644 --- a/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagementConfigSync.cs +++ b/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagementConfigSync.cs @@ -22,7 +22,7 @@ public sealed class FeatureMembershipConfigmanagementConfigSync /// public readonly Outputs.FeatureMembershipConfigmanagementConfigSyncGit? Git; /// - /// 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. + /// 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. /// public readonly string? MetricsGcpServiceAccountEmail; /// @@ -32,13 +32,17 @@ public sealed class FeatureMembershipConfigmanagementConfigSync /// public readonly Outputs.FeatureMembershipConfigmanagementConfigSyncOci? Oci; /// - /// 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. + /// 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. /// public readonly bool? PreventDrift; /// /// Specifies whether the Config Sync Repo is in "hierarchical" or "unstructured" mode. /// public readonly string? SourceFormat; + /// + /// 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`. + /// + public readonly bool? StopSyncing; [OutputConstructor] private FeatureMembershipConfigmanagementConfigSync( @@ -52,7 +56,9 @@ private FeatureMembershipConfigmanagementConfigSync( bool? preventDrift, - string? sourceFormat) + string? sourceFormat, + + bool? stopSyncing) { Enabled = enabled; Git = git; @@ -60,6 +66,7 @@ private FeatureMembershipConfigmanagementConfigSync( Oci = oci; PreventDrift = preventDrift; SourceFormat = sourceFormat; + StopSyncing = stopSyncing; } } } diff --git a/sdk/dotnet/GkeHub/ScopeRbacRoleBinding.cs b/sdk/dotnet/GkeHub/ScopeRbacRoleBinding.cs index 7a45ab5a97..e68dceffee 100644 --- a/sdk/dotnet/GkeHub/ScopeRbacRoleBinding.cs +++ b/sdk/dotnet/GkeHub/ScopeRbacRoleBinding.cs @@ -32,12 +32,12 @@ namespace Pulumi.Gcp.GkeHub /// { /// var scope = new Gcp.GkeHub.Scope("scope", new() /// { - /// ScopeId = "tf-test-scope_22375", + /// ScopeId = "tf-test-scope_29439", /// }); /// /// var scopeRbacRoleBinding = new Gcp.GkeHub.ScopeRbacRoleBinding("scope_rbac_role_binding", new() /// { - /// ScopeRbacRoleBindingId = "tf-test-scope-rbac-role-binding_29439", + /// ScopeRbacRoleBindingId = "tf-test-scope-rbac-role-binding_87786", /// ScopeId = scope.ScopeId, /// User = "test-email@gmail.com", /// Role = new Gcp.GkeHub.Inputs.ScopeRbacRoleBindingRoleArgs diff --git a/sdk/dotnet/Iam/FoldersPolicyBinding.cs b/sdk/dotnet/Iam/FoldersPolicyBinding.cs index cdf8baf2ae..2d8dcf7af7 100644 --- a/sdk/dotnet/Iam/FoldersPolicyBinding.cs +++ b/sdk/dotnet/Iam/FoldersPolicyBinding.cs @@ -10,6 +10,14 @@ namespace Pulumi.Gcp.Iam { /// + /// A policy binding to a folder + /// + /// To get more information about FoldersPolicyBinding, see: + /// + /// * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/folders.locations.policyBindings) + /// * How-to Guides + /// * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + /// /// ## Example Usage /// /// ### Iam Folders Policy Binding diff --git a/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingConditionArgs.cs b/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingConditionArgs.cs new file mode 100644 index 0000000000..5c6f92f209 --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingConditionArgs.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.Iam.Inputs +{ + + public sealed class ProjectsPolicyBindingConditionArgs : global::Pulumi.ResourceArgs + { + /// + /// Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// + [Input("expression")] + public Input? Expression { get; set; } + + /// + /// Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// 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. + /// + [Input("title")] + public Input? Title { get; set; } + + public ProjectsPolicyBindingConditionArgs() + { + } + public static new ProjectsPolicyBindingConditionArgs Empty => new ProjectsPolicyBindingConditionArgs(); + } +} diff --git a/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingConditionGetArgs.cs b/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingConditionGetArgs.cs new file mode 100644 index 0000000000..a374adaf78 --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingConditionGetArgs.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.Iam.Inputs +{ + + public sealed class ProjectsPolicyBindingConditionGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// + [Input("expression")] + public Input? Expression { get; set; } + + /// + /// Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// 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. + /// + [Input("title")] + public Input? Title { get; set; } + + public ProjectsPolicyBindingConditionGetArgs() + { + } + public static new ProjectsPolicyBindingConditionGetArgs Empty => new ProjectsPolicyBindingConditionGetArgs(); + } +} diff --git a/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingTargetArgs.cs b/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingTargetArgs.cs new file mode 100644 index 0000000000..4c1cdbf112 --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingTargetArgs.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.Iam.Inputs +{ + + public sealed class ProjectsPolicyBindingTargetArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. Immutable. The resource name of the policy to be bound. + /// The binding parent and policy must belong to the same Organization (or Project). + /// + /// - - - + /// + [Input("principalSet")] + public Input? PrincipalSet { get; set; } + + public ProjectsPolicyBindingTargetArgs() + { + } + public static new ProjectsPolicyBindingTargetArgs Empty => new ProjectsPolicyBindingTargetArgs(); + } +} diff --git a/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingTargetGetArgs.cs b/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingTargetGetArgs.cs new file mode 100644 index 0000000000..ce938d07c0 --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/ProjectsPolicyBindingTargetGetArgs.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.Iam.Inputs +{ + + public sealed class ProjectsPolicyBindingTargetGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. Immutable. The resource name of the policy to be bound. + /// The binding parent and policy must belong to the same Organization (or Project). + /// + /// - - - + /// + [Input("principalSet")] + public Input? PrincipalSet { get; set; } + + public ProjectsPolicyBindingTargetGetArgs() + { + } + public static new ProjectsPolicyBindingTargetGetArgs Empty => new ProjectsPolicyBindingTargetGetArgs(); + } +} diff --git a/sdk/dotnet/Iam/OrganizationsPolicyBinding.cs b/sdk/dotnet/Iam/OrganizationsPolicyBinding.cs index 8a090ea02e..a28c416dd6 100644 --- a/sdk/dotnet/Iam/OrganizationsPolicyBinding.cs +++ b/sdk/dotnet/Iam/OrganizationsPolicyBinding.cs @@ -10,6 +10,14 @@ namespace Pulumi.Gcp.Iam { /// + /// A policy binding to an organizations + /// + /// To get more information about OrganizationsPolicyBinding, see: + /// + /// * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.policyBindings) + /// * How-to Guides + /// * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + /// /// ## Example Usage /// /// ### Iam Organizations Policy Binding diff --git a/sdk/dotnet/Iam/Outputs/ProjectsPolicyBindingCondition.cs b/sdk/dotnet/Iam/Outputs/ProjectsPolicyBindingCondition.cs new file mode 100644 index 0000000000..4d5a4f69c4 --- /dev/null +++ b/sdk/dotnet/Iam/Outputs/ProjectsPolicyBindingCondition.cs @@ -0,0 +1,49 @@ +// *** 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.Iam.Outputs +{ + + [OutputType] + public sealed class ProjectsPolicyBindingCondition + { + /// + /// Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + /// + public readonly string? Description; + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// + public readonly string? Expression; + /// + /// Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + /// + public readonly string? Location; + /// + /// 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. + /// + public readonly string? Title; + + [OutputConstructor] + private ProjectsPolicyBindingCondition( + string? description, + + string? expression, + + string? location, + + string? title) + { + Description = description; + Expression = expression; + Location = location; + Title = title; + } + } +} diff --git a/sdk/dotnet/Iam/Outputs/ProjectsPolicyBindingTarget.cs b/sdk/dotnet/Iam/Outputs/ProjectsPolicyBindingTarget.cs new file mode 100644 index 0000000000..f5ec2b6a57 --- /dev/null +++ b/sdk/dotnet/Iam/Outputs/ProjectsPolicyBindingTarget.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.Iam.Outputs +{ + + [OutputType] + public sealed class ProjectsPolicyBindingTarget + { + /// + /// Required. Immutable. The resource name of the policy to be bound. + /// The binding parent and policy must belong to the same Organization (or Project). + /// + /// - - - + /// + public readonly string? PrincipalSet; + + [OutputConstructor] + private ProjectsPolicyBindingTarget(string? principalSet) + { + PrincipalSet = principalSet; + } + } +} diff --git a/sdk/dotnet/Iam/PrincipalAccessBoundaryPolicy.cs b/sdk/dotnet/Iam/PrincipalAccessBoundaryPolicy.cs index 6374949d17..ec42df56a6 100644 --- a/sdk/dotnet/Iam/PrincipalAccessBoundaryPolicy.cs +++ b/sdk/dotnet/Iam/PrincipalAccessBoundaryPolicy.cs @@ -10,6 +10,14 @@ namespace Pulumi.Gcp.Iam { /// + /// An IAM Principal Access Boundary Policy resource + /// + /// To get more information about PrincipalAccessBoundaryPolicy, see: + /// + /// * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.principalAccessBoundaryPolicies) + /// * How-to Guides + /// * [Create and apply Principal Access Boundaries](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create) + /// /// ## Example Usage /// /// ### Iam Principal Access Boundary Policy diff --git a/sdk/dotnet/Iam/ProjectsPolicyBinding.cs b/sdk/dotnet/Iam/ProjectsPolicyBinding.cs new file mode 100644 index 0000000000..b14c9cc218 --- /dev/null +++ b/sdk/dotnet/Iam/ProjectsPolicyBinding.cs @@ -0,0 +1,436 @@ +// *** 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.Iam +{ + /// + /// A policy binding to a Project + /// + /// To get more information about ProjectsPolicyBinding, see: + /// + /// * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/projects.locations.policyBindings) + /// * How-to Guides + /// * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + /// + /// ## Example Usage + /// + /// ### Iam Projects Policy Binding + /// + /// ```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 pabPolicy = new Gcp.Iam.PrincipalAccessBoundaryPolicy("pab_policy", new() + /// { + /// Organization = "123456789", + /// Location = "global", + /// DisplayName = "test project binding", + /// PrincipalAccessBoundaryPolicyId = "my-pab-policy", + /// }); + /// + /// var my_project_binding = new Gcp.Iam.ProjectsPolicyBinding("my-project-binding", new() + /// { + /// Project = project.Apply(getProjectResult => getProjectResult.ProjectId), + /// Location = "global", + /// DisplayName = "test project binding", + /// PolicyKind = "PRINCIPAL_ACCESS_BOUNDARY", + /// PolicyBindingId = "test-project-binding", + /// Policy = pabPolicy.PrincipalAccessBoundaryPolicyId.Apply(principalAccessBoundaryPolicyId => $"organizations/123456789/locations/global/principalAccessBoundaryPolicies/{principalAccessBoundaryPolicyId}"), + /// Target = new Gcp.Iam.Inputs.ProjectsPolicyBindingTargetArgs + /// { + /// PrincipalSet = $"//cloudresourcemanager.googleapis.com/projects/{project.Apply(getProjectResult => getProjectResult.ProjectId)}", + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ProjectsPolicyBinding can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}}` + /// + /// * `{{project}}/{{location}}/{{policy_binding_id}}` + /// + /// * `{{location}}/{{policy_binding_id}}` + /// + /// When using the `pulumi import` command, ProjectsPolicyBinding can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{project}}/{{location}}/{{policy_binding_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{location}}/{{policy_binding_id}} + /// ``` + /// + [GcpResourceType("gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding")] + public partial class ProjectsPolicyBinding : global::Pulumi.CustomResource + { + /// + /// Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + /// limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + /// configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + /// + [Output("annotations")] + public Output?> Annotations { get; private set; } = null!; + + /// + /// Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + /// syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + /// size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + /// 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + /// expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + /// \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + /// != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + /// with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + /// functions that may be referenced within an expression are determined by the service that evaluates it. See the service + /// documentation for additional information. + /// + [Output("condition")] + public Output Condition { get; private set; } = null!; + + /// + /// Output only. The time when the policy binding was created. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// Optional. The description of the policy binding. Must be less than or equal to 63 characters. + /// + [Output("displayName")] + public Output DisplayName { get; private set; } = null!; + + [Output("effectiveAnnotations")] + public Output> EffectiveAnnotations { get; private set; } = null!; + + /// + /// Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + /// + [Output("etag")] + public Output Etag { get; private set; } = null!; + + /// + /// The location of the Policy Binding + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + /// + [Output("policy")] + public Output Policy { get; private set; } = null!; + + /// + /// The Policy Binding ID. + /// + [Output("policyBindingId")] + public Output PolicyBindingId { get; private set; } = null!; + + /// + /// Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + /// be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + /// PRINCIPAL_ACCESS_BOUNDARY ACCESS + /// + [Output("policyKind")] + public Output PolicyKind { get; private set; } = null!; + + /// + /// Output only. The globally unique ID of the policy to be bound. + /// + [Output("policyUid")] + public Output PolicyUid { get; private set; } = null!; + + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + /// Structure is documented below. + /// + [Output("target")] + public Output Target { get; private set; } = null!; + + /// + /// Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + /// + [Output("uid")] + public Output Uid { get; private set; } = null!; + + /// + /// Output only. The time when the policy binding was most recently updated. + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a ProjectsPolicyBinding 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 ProjectsPolicyBinding(string name, ProjectsPolicyBindingArgs args, CustomResourceOptions? options = null) + : base("gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding", name, args ?? new ProjectsPolicyBindingArgs(), MakeResourceOptions(options, "")) + { + } + + private ProjectsPolicyBinding(string name, Input id, ProjectsPolicyBindingState? state = null, CustomResourceOptions? options = null) + : base("gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding", 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 ProjectsPolicyBinding 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 ProjectsPolicyBinding Get(string name, Input id, ProjectsPolicyBindingState? state = null, CustomResourceOptions? options = null) + { + return new ProjectsPolicyBinding(name, id, state, options); + } + } + + public sealed class ProjectsPolicyBindingArgs : global::Pulumi.ResourceArgs + { + [Input("annotations")] + private InputMap? _annotations; + + /// + /// Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + /// limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + /// configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + /// + public InputMap Annotations + { + get => _annotations ?? (_annotations = new InputMap()); + set => _annotations = value; + } + + /// + /// Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + /// syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + /// size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + /// 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + /// expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + /// \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + /// != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + /// with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + /// functions that may be referenced within an expression are determined by the service that evaluates it. See the service + /// documentation for additional information. + /// + [Input("condition")] + public Input? Condition { get; set; } + + /// + /// Optional. The description of the policy binding. Must be less than or equal to 63 characters. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + /// + /// The location of the Policy Binding + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + /// + /// The Policy Binding ID. + /// + [Input("policyBindingId", required: true)] + public Input PolicyBindingId { get; set; } = null!; + + /// + /// Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + /// be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + /// PRINCIPAL_ACCESS_BOUNDARY ACCESS + /// + [Input("policyKind")] + public Input? PolicyKind { get; set; } + + [Input("project")] + public Input? Project { get; set; } + + /// + /// Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + /// Structure is documented below. + /// + [Input("target", required: true)] + public Input Target { get; set; } = null!; + + public ProjectsPolicyBindingArgs() + { + } + public static new ProjectsPolicyBindingArgs Empty => new ProjectsPolicyBindingArgs(); + } + + public sealed class ProjectsPolicyBindingState : global::Pulumi.ResourceArgs + { + [Input("annotations")] + private InputMap? _annotations; + + /// + /// Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + /// limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + /// configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + /// + public InputMap Annotations + { + get => _annotations ?? (_annotations = new InputMap()); + set => _annotations = value; + } + + /// + /// Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + /// syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + /// size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + /// 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + /// expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + /// \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + /// != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + /// with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + /// functions that may be referenced within an expression are determined by the service that evaluates it. See the service + /// documentation for additional information. + /// + [Input("condition")] + public Input? Condition { get; set; } + + /// + /// Output only. The time when the policy binding was created. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + /// + /// Optional. The description of the policy binding. Must be less than or equal to 63 characters. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + [Input("effectiveAnnotations")] + private InputMap? _effectiveAnnotations; + public InputMap EffectiveAnnotations + { + get => _effectiveAnnotations ?? (_effectiveAnnotations = new InputMap()); + set => _effectiveAnnotations = value; + } + + /// + /// Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + /// + [Input("etag")] + public Input? Etag { get; set; } + + /// + /// The location of the Policy Binding + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + /// + [Input("policy")] + public Input? Policy { get; set; } + + /// + /// The Policy Binding ID. + /// + [Input("policyBindingId")] + public Input? PolicyBindingId { get; set; } + + /// + /// Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + /// be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + /// PRINCIPAL_ACCESS_BOUNDARY ACCESS + /// + [Input("policyKind")] + public Input? PolicyKind { get; set; } + + /// + /// Output only. The globally unique ID of the policy to be bound. + /// + [Input("policyUid")] + public Input? PolicyUid { get; set; } + + [Input("project")] + public Input? Project { get; set; } + + /// + /// Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + /// Structure is documented below. + /// + [Input("target")] + public Input? Target { get; set; } + + /// + /// Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + /// + [Input("uid")] + public Input? Uid { get; set; } + + /// + /// Output only. The time when the policy binding was most recently updated. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public ProjectsPolicyBindingState() + { + } + public static new ProjectsPolicyBindingState Empty => new ProjectsPolicyBindingState(); + } +} diff --git a/sdk/dotnet/Iap/TunnelDestGroup.cs b/sdk/dotnet/Iap/TunnelDestGroup.cs index 71e7b9ffb4..3136c397f6 100644 --- a/sdk/dotnet/Iap/TunnelDestGroup.cs +++ b/sdk/dotnet/Iap/TunnelDestGroup.cs @@ -33,7 +33,7 @@ namespace Pulumi.Gcp.Iap /// var destGroup = new Gcp.Iap.TunnelDestGroup("dest_group", new() /// { /// Region = "us-central1", - /// GroupName = "testgroup_87786", + /// GroupName = "testgroup_2067", /// Cidrs = new[] /// { /// "10.1.0.0/16", diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionAuthConfigAdditionalVariableArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionAuthConfigAdditionalVariableArgs.cs index c32390b35e..ce9b7a98c2 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionAuthConfigAdditionalVariableArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionAuthConfigAdditionalVariableArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionAuthConfigAdditionalVariableArgs : global::Pulumi. public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionAuthConfigAdditionalVariableGetArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionAuthConfigAdditionalVariableGetArgs.cs index b2f7603eb5..884d5ca2b8 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionAuthConfigAdditionalVariableGetArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionAuthConfigAdditionalVariableGetArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionAuthConfigAdditionalVariableGetArgs : global::Pulu public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionConfigVariableArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionConfigVariableArgs.cs index 9fb62aa64b..4fd335d7e9 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionConfigVariableArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionConfigVariableArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionConfigVariableArgs : global::Pulumi.ResourceArgs public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionConfigVariableGetArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionConfigVariableGetArgs.cs index de0f4216a3..f48f4da191 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionConfigVariableGetArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionConfigVariableGetArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionConfigVariableGetArgs : global::Pulumi.ResourceArg public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAdditionalVariableArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAdditionalVariableArgs.cs index afaa8f8245..824a97b00c 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAdditionalVariableArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAdditionalVariableArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionEventingConfigAdditionalVariableArgs : global::Pul public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAdditionalVariableGetArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAdditionalVariableGetArgs.cs index 43d53ad0a8..c0022debef 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAdditionalVariableGetArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAdditionalVariableGetArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionEventingConfigAdditionalVariableGetArgs : global:: public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAuthConfigAdditionalVariableArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAuthConfigAdditionalVariableArgs.cs index fa5bc736fa..c03803524d 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAuthConfigAdditionalVariableArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAuthConfigAdditionalVariableArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionEventingConfigAuthConfigAdditionalVariableArgs : g public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAuthConfigAdditionalVariableGetArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAuthConfigAdditionalVariableGetArgs.cs index d01b12b76e..c91f220eb1 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAuthConfigAdditionalVariableGetArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionEventingConfigAuthConfigAdditionalVariableGetArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionEventingConfigAuthConfigAdditionalVariableGetArgs public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionSslConfigAdditionalVariableArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionSslConfigAdditionalVariableArgs.cs index 2f87f7ad70..4df550e651 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionSslConfigAdditionalVariableArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionSslConfigAdditionalVariableArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionSslConfigAdditionalVariableArgs : global::Pulumi.R public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionSslConfigAdditionalVariableGetArgs.cs b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionSslConfigAdditionalVariableGetArgs.cs index 37073740e6..862ae0bf85 100644 --- a/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionSslConfigAdditionalVariableGetArgs.cs +++ b/sdk/dotnet/IntegrationConnectors/Inputs/ConnectionSslConfigAdditionalVariableGetArgs.cs @@ -19,7 +19,7 @@ public sealed class ConnectionSslConfigAdditionalVariableGetArgs : global::Pulum public Input? BooleanValue { get; set; } /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// [Input("encryptionKeyValue")] diff --git a/sdk/dotnet/IntegrationConnectors/ManagedZone.cs b/sdk/dotnet/IntegrationConnectors/ManagedZone.cs index adbdd35209..b9742a4423 100644 --- a/sdk/dotnet/IntegrationConnectors/ManagedZone.cs +++ b/sdk/dotnet/IntegrationConnectors/ManagedZone.cs @@ -32,8 +32,8 @@ namespace Pulumi.Gcp.IntegrationConnectors /// { /// var targetProject = new Gcp.Organizations.Project("target_project", new() /// { - /// ProjectId = "tf-test_2067", - /// Name = "tf-test_40785", + /// ProjectId = "tf-test_40785", + /// Name = "tf-test_79169", /// OrgId = "123456789", /// BillingAccount = "000000-0000000-0000000-000000", /// DeletionPolicy = "DELETE", @@ -75,8 +75,8 @@ namespace Pulumi.Gcp.IntegrationConnectors /// /// var zone = new Gcp.Dns.ManagedZone("zone", new() /// { - /// Name = "tf-test-dns_79169", - /// DnsName = "private_56529.example.com.", + /// Name = "tf-test-dns_56529", + /// DnsName = "private_75413.example.com.", /// Visibility = "private", /// PrivateVisibilityConfig = new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigArgs /// { diff --git a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionAuthConfigAdditionalVariable.cs b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionAuthConfigAdditionalVariable.cs index c9bfdbed80..b498d93432 100644 --- a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionAuthConfigAdditionalVariable.cs +++ b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionAuthConfigAdditionalVariable.cs @@ -18,7 +18,7 @@ public sealed class ConnectionAuthConfigAdditionalVariable /// public readonly bool? BooleanValue; /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// public readonly Outputs.ConnectionAuthConfigAdditionalVariableEncryptionKeyValue? EncryptionKeyValue; diff --git a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionConfigVariable.cs b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionConfigVariable.cs index e8d97bf03f..6cdb93f2e4 100644 --- a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionConfigVariable.cs +++ b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionConfigVariable.cs @@ -18,7 +18,7 @@ public sealed class ConnectionConfigVariable /// public readonly bool? BooleanValue; /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// public readonly Outputs.ConnectionConfigVariableEncryptionKeyValue? EncryptionKeyValue; diff --git a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionEventingConfigAdditionalVariable.cs b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionEventingConfigAdditionalVariable.cs index 93642dd204..d7a5f7fb44 100644 --- a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionEventingConfigAdditionalVariable.cs +++ b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionEventingConfigAdditionalVariable.cs @@ -18,7 +18,7 @@ public sealed class ConnectionEventingConfigAdditionalVariable /// public readonly bool? BooleanValue; /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// public readonly Outputs.ConnectionEventingConfigAdditionalVariableEncryptionKeyValue? EncryptionKeyValue; diff --git a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionEventingConfigAuthConfigAdditionalVariable.cs b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionEventingConfigAuthConfigAdditionalVariable.cs index c9bb745e0c..d779fd75ad 100644 --- a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionEventingConfigAuthConfigAdditionalVariable.cs +++ b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionEventingConfigAuthConfigAdditionalVariable.cs @@ -18,7 +18,7 @@ public sealed class ConnectionEventingConfigAuthConfigAdditionalVariable /// public readonly bool? BooleanValue; /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// public readonly Outputs.ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValue? EncryptionKeyValue; diff --git a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionSslConfigAdditionalVariable.cs b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionSslConfigAdditionalVariable.cs index 416210114e..4d5b6fd2df 100644 --- a/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionSslConfigAdditionalVariable.cs +++ b/sdk/dotnet/IntegrationConnectors/Outputs/ConnectionSslConfigAdditionalVariable.cs @@ -18,7 +18,7 @@ public sealed class ConnectionSslConfigAdditionalVariable /// public readonly bool? BooleanValue; /// - /// Encription key value of configVariable. + /// Encryption key value of configVariable. /// Structure is documented below. /// public readonly Outputs.ConnectionSslConfigAdditionalVariableEncryptionKeyValue? EncryptionKeyValue; diff --git a/sdk/dotnet/Monitoring/Inputs/AlertPolicyConditionConditionPrometheusQueryLanguageArgs.cs b/sdk/dotnet/Monitoring/Inputs/AlertPolicyConditionConditionPrometheusQueryLanguageArgs.cs index 443a77ff6e..f71a68422f 100644 --- a/sdk/dotnet/Monitoring/Inputs/AlertPolicyConditionConditionPrometheusQueryLanguageArgs.cs +++ b/sdk/dotnet/Monitoring/Inputs/AlertPolicyConditionConditionPrometheusQueryLanguageArgs.cs @@ -22,12 +22,13 @@ public sealed class AlertPolicyConditionConditionPrometheusQueryLanguageArgs : g /// in the future. /// This field is optional. If this field is not empty, then it must be a /// valid Prometheus label name. - /// - /// - - - /// [Input("alertRule")] public Input? AlertRule { get; set; } + [Input("disableMetricValidation")] + public Input? DisableMetricValidation { get; set; } + /// /// Alerts are considered firing once their PromQL expression evaluated /// to be "true" for this long. Alerts whose PromQL expression was not diff --git a/sdk/dotnet/Monitoring/Inputs/AlertPolicyConditionConditionPrometheusQueryLanguageGetArgs.cs b/sdk/dotnet/Monitoring/Inputs/AlertPolicyConditionConditionPrometheusQueryLanguageGetArgs.cs index 46e7bd4622..891c4c78f1 100644 --- a/sdk/dotnet/Monitoring/Inputs/AlertPolicyConditionConditionPrometheusQueryLanguageGetArgs.cs +++ b/sdk/dotnet/Monitoring/Inputs/AlertPolicyConditionConditionPrometheusQueryLanguageGetArgs.cs @@ -22,12 +22,13 @@ public sealed class AlertPolicyConditionConditionPrometheusQueryLanguageGetArgs /// in the future. /// This field is optional. If this field is not empty, then it must be a /// valid Prometheus label name. - /// - /// - - - /// [Input("alertRule")] public Input? AlertRule { get; set; } + [Input("disableMetricValidation")] + public Input? DisableMetricValidation { get; set; } + /// /// Alerts are considered firing once their PromQL expression evaluated /// to be "true" for this long. Alerts whose PromQL expression was not diff --git a/sdk/dotnet/Monitoring/Outputs/AlertPolicyConditionConditionPrometheusQueryLanguage.cs b/sdk/dotnet/Monitoring/Outputs/AlertPolicyConditionConditionPrometheusQueryLanguage.cs index b65a776e7e..c18c13fa8e 100644 --- a/sdk/dotnet/Monitoring/Outputs/AlertPolicyConditionConditionPrometheusQueryLanguage.cs +++ b/sdk/dotnet/Monitoring/Outputs/AlertPolicyConditionConditionPrometheusQueryLanguage.cs @@ -23,10 +23,9 @@ public sealed class AlertPolicyConditionConditionPrometheusQueryLanguage /// in the future. /// This field is optional. If this field is not empty, then it must be a /// valid Prometheus label name. - /// - /// - - - /// public readonly string? AlertRule; + public readonly bool? DisableMetricValidation; /// /// Alerts are considered firing once their PromQL expression evaluated /// to be "true" for this long. Alerts whose PromQL expression was not @@ -72,6 +71,8 @@ public sealed class AlertPolicyConditionConditionPrometheusQueryLanguage private AlertPolicyConditionConditionPrometheusQueryLanguage( string? alertRule, + bool? disableMetricValidation, + string? duration, string? evaluationInterval, @@ -83,6 +84,7 @@ private AlertPolicyConditionConditionPrometheusQueryLanguage( string? ruleGroup) { AlertRule = alertRule; + DisableMetricValidation = disableMetricValidation; Duration = duration; EvaluationInterval = evaluationInterval; Labels = labels; diff --git a/sdk/dotnet/Netapp/ActiveDirectory.cs b/sdk/dotnet/Netapp/ActiveDirectory.cs index 9abb2ffbf8..9d4beda110 100644 --- a/sdk/dotnet/Netapp/ActiveDirectory.cs +++ b/sdk/dotnet/Netapp/ActiveDirectory.cs @@ -154,7 +154,7 @@ public partial class ActiveDirectory : global::Pulumi.CustomResource public Output EncryptDcConnections { get; private set; } = null!; /// - /// Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + /// Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 /// [Output("kdcHostname")] public Output KdcHostname { get; private set; } = null!; @@ -372,7 +372,7 @@ public InputList BackupOperators public Input? EncryptDcConnections { get; set; } /// - /// Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + /// Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 /// [Input("kdcHostname")] public Input? KdcHostname { get; set; } @@ -570,7 +570,7 @@ public InputMap EffectiveLabels public Input? EncryptDcConnections { get; set; } /// - /// Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + /// Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 /// [Input("kdcHostname")] public Input? KdcHostname { get; set; } diff --git a/sdk/dotnet/Netapp/Inputs/VolumeExportPolicyRuleArgs.cs b/sdk/dotnet/Netapp/Inputs/VolumeExportPolicyRuleArgs.cs index 136d7fb8e2..7fa5bf8250 100644 --- a/sdk/dotnet/Netapp/Inputs/VolumeExportPolicyRuleArgs.cs +++ b/sdk/dotnet/Netapp/Inputs/VolumeExportPolicyRuleArgs.cs @@ -20,7 +20,7 @@ public sealed class VolumeExportPolicyRuleArgs : global::Pulumi.ResourceArgs public Input? AccessType { get; set; } /// - /// Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + /// Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. /// [Input("allowedClients")] public Input? AllowedClients { get; set; } diff --git a/sdk/dotnet/Netapp/Inputs/VolumeExportPolicyRuleGetArgs.cs b/sdk/dotnet/Netapp/Inputs/VolumeExportPolicyRuleGetArgs.cs index 034fe9127a..ad6f40e14d 100644 --- a/sdk/dotnet/Netapp/Inputs/VolumeExportPolicyRuleGetArgs.cs +++ b/sdk/dotnet/Netapp/Inputs/VolumeExportPolicyRuleGetArgs.cs @@ -20,7 +20,7 @@ public sealed class VolumeExportPolicyRuleGetArgs : global::Pulumi.ResourceArgs public Input? AccessType { get; set; } /// - /// Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + /// Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. /// [Input("allowedClients")] public Input? AllowedClients { get; set; } diff --git a/sdk/dotnet/Netapp/Outputs/VolumeExportPolicyRule.cs b/sdk/dotnet/Netapp/Outputs/VolumeExportPolicyRule.cs index 270a498848..03c459a5c0 100644 --- a/sdk/dotnet/Netapp/Outputs/VolumeExportPolicyRule.cs +++ b/sdk/dotnet/Netapp/Outputs/VolumeExportPolicyRule.cs @@ -19,7 +19,7 @@ public sealed class VolumeExportPolicyRule /// public readonly string? AccessType; /// - /// Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + /// Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. /// public readonly string? AllowedClients; /// diff --git a/sdk/dotnet/Netapp/Volume.cs b/sdk/dotnet/Netapp/Volume.cs index e70eefa401..8725b36335 100644 --- a/sdk/dotnet/Netapp/Volume.cs +++ b/sdk/dotnet/Netapp/Volume.cs @@ -288,7 +288,7 @@ public partial class Volume : global::Pulumi.CustomResource public Output SecurityStyle { get; private set; } = null!; /// - /// Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + /// Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. /// [Output("serviceLevel")] public Output ServiceLevel { get; private set; } = null!; @@ -333,7 +333,7 @@ public partial class Volume : global::Pulumi.CustomResource public Output StateDetails { get; private set; } = null!; /// - /// Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + /// Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. /// [Output("storagePool")] public Output StoragePool { get; private set; } = null!; @@ -580,7 +580,7 @@ public InputList SmbSettings public Input? SnapshotPolicy { get; set; } /// - /// Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + /// Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. /// [Input("storagePool", required: true)] public Input StoragePool { get; set; } = null!; @@ -845,7 +845,7 @@ public InputList RestrictedActions public Input? SecurityStyle { get; set; } /// - /// Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + /// Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. /// [Input("serviceLevel")] public Input? ServiceLevel { get; set; } @@ -896,7 +896,7 @@ public InputList SmbSettings public Input? StateDetails { get; set; } /// - /// Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + /// Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. /// [Input("storagePool")] public Input? StoragePool { get; set; } diff --git a/sdk/dotnet/NetworkConnectivity/Spoke.cs b/sdk/dotnet/NetworkConnectivity/Spoke.cs index cbe4956942..f2846b03fe 100644 --- a/sdk/dotnet/NetworkConnectivity/Spoke.cs +++ b/sdk/dotnet/NetworkConnectivity/Spoke.cs @@ -86,13 +86,13 @@ namespace Pulumi.Gcp.NetworkConnectivity /// { /// var network = new Gcp.Compute.Network("network", new() /// { - /// Name = "tf-test-network_75413", + /// Name = "tf-test-network_55138", /// AutoCreateSubnetworks = false, /// }); /// /// var subnetwork = new Gcp.Compute.Subnetwork("subnetwork", new() /// { - /// Name = "tf-test-subnet_55138", + /// Name = "tf-test-subnet_37559", /// IpCidrRange = "10.0.0.0/28", /// Region = "us-central1", /// Network = network.SelfLink, @@ -100,7 +100,7 @@ namespace Pulumi.Gcp.NetworkConnectivity /// /// var instance = new Gcp.Compute.Instance("instance", new() /// { - /// Name = "tf-test-instance_37559", + /// Name = "tf-test-instance_91980", /// MachineType = "e2-medium", /// CanIpForward = true, /// Zone = "us-central1-a", @@ -130,7 +130,7 @@ namespace Pulumi.Gcp.NetworkConnectivity /// /// var basicHub = new Gcp.NetworkConnectivity.Hub("basic_hub", new() /// { - /// Name = "tf-test-hub_91980", + /// Name = "tf-test-hub_37118", /// Description = "A sample hub", /// Labels = /// { @@ -140,7 +140,7 @@ namespace Pulumi.Gcp.NetworkConnectivity /// /// var primary = new Gcp.NetworkConnectivity.Spoke("primary", new() /// { - /// Name = "tf-test-name_37118", + /// Name = "tf-test-name_80332", /// Location = "us-central1", /// Description = "A sample spoke with a linked routher appliance instance", /// Labels = diff --git a/sdk/dotnet/NetworkSecurity/Inputs/MirroringDeploymentGroupConnectedEndpointGroupArgs.cs b/sdk/dotnet/NetworkSecurity/Inputs/MirroringDeploymentGroupConnectedEndpointGroupArgs.cs new file mode 100644 index 0000000000..6b0b40519b --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/Inputs/MirroringDeploymentGroupConnectedEndpointGroupArgs.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.NetworkSecurity.Inputs +{ + + public sealed class MirroringDeploymentGroupConnectedEndpointGroupArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// Output only. A connected mirroring endpoint group. + /// + [Input("name")] + public Input? Name { get; set; } + + public MirroringDeploymentGroupConnectedEndpointGroupArgs() + { + } + public static new MirroringDeploymentGroupConnectedEndpointGroupArgs Empty => new MirroringDeploymentGroupConnectedEndpointGroupArgs(); + } +} diff --git a/sdk/dotnet/NetworkSecurity/Inputs/MirroringDeploymentGroupConnectedEndpointGroupGetArgs.cs b/sdk/dotnet/NetworkSecurity/Inputs/MirroringDeploymentGroupConnectedEndpointGroupGetArgs.cs new file mode 100644 index 0000000000..c9a559766b --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/Inputs/MirroringDeploymentGroupConnectedEndpointGroupGetArgs.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.NetworkSecurity.Inputs +{ + + public sealed class MirroringDeploymentGroupConnectedEndpointGroupGetArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// Output only. A connected mirroring endpoint group. + /// + [Input("name")] + public Input? Name { get; set; } + + public MirroringDeploymentGroupConnectedEndpointGroupGetArgs() + { + } + public static new MirroringDeploymentGroupConnectedEndpointGroupGetArgs Empty => new MirroringDeploymentGroupConnectedEndpointGroupGetArgs(); + } +} diff --git a/sdk/dotnet/NetworkSecurity/Inputs/MirroringEndpointGroupAssociationLocationsDetailArgs.cs b/sdk/dotnet/NetworkSecurity/Inputs/MirroringEndpointGroupAssociationLocationsDetailArgs.cs new file mode 100644 index 0000000000..bf55e6c7c7 --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/Inputs/MirroringEndpointGroupAssociationLocationsDetailArgs.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.NetworkSecurity.Inputs +{ + + public sealed class MirroringEndpointGroupAssociationLocationsDetailArgs : global::Pulumi.ResourceArgs + { + /// + /// 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`. + /// + /// + /// - - - + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// (Output) + /// Output only. The association state in this location. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// OUT_OF_SYNC + /// + [Input("state")] + public Input? State { get; set; } + + public MirroringEndpointGroupAssociationLocationsDetailArgs() + { + } + public static new MirroringEndpointGroupAssociationLocationsDetailArgs Empty => new MirroringEndpointGroupAssociationLocationsDetailArgs(); + } +} diff --git a/sdk/dotnet/NetworkSecurity/Inputs/MirroringEndpointGroupAssociationLocationsDetailGetArgs.cs b/sdk/dotnet/NetworkSecurity/Inputs/MirroringEndpointGroupAssociationLocationsDetailGetArgs.cs new file mode 100644 index 0000000000..5ecf22eb43 --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/Inputs/MirroringEndpointGroupAssociationLocationsDetailGetArgs.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.NetworkSecurity.Inputs +{ + + public sealed class MirroringEndpointGroupAssociationLocationsDetailGetArgs : global::Pulumi.ResourceArgs + { + /// + /// 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`. + /// + /// + /// - - - + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// (Output) + /// Output only. The association state in this location. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// OUT_OF_SYNC + /// + [Input("state")] + public Input? State { get; set; } + + public MirroringEndpointGroupAssociationLocationsDetailGetArgs() + { + } + public static new MirroringEndpointGroupAssociationLocationsDetailGetArgs Empty => new MirroringEndpointGroupAssociationLocationsDetailGetArgs(); + } +} diff --git a/sdk/dotnet/NetworkSecurity/MirroringDeployment.cs b/sdk/dotnet/NetworkSecurity/MirroringDeployment.cs new file mode 100644 index 0000000000..0c45644d60 --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/MirroringDeployment.cs @@ -0,0 +1,462 @@ +// *** 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.NetworkSecurity +{ + /// + /// ## Example Usage + /// + /// ### Network Security Mirroring Deployment Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var network = new Gcp.Compute.Network("network", new() + /// { + /// Name = "example-network", + /// AutoCreateSubnetworks = false, + /// }); + /// + /// var subnetwork = new Gcp.Compute.Subnetwork("subnetwork", new() + /// { + /// Name = "example-subnet", + /// Region = "us-central1", + /// IpCidrRange = "10.1.0.0/16", + /// Network = network.Name, + /// }); + /// + /// var healthCheck = new Gcp.Compute.RegionHealthCheck("health_check", new() + /// { + /// Name = "example-hc", + /// Region = "us-central1", + /// HttpHealthCheck = new Gcp.Compute.Inputs.RegionHealthCheckHttpHealthCheckArgs + /// { + /// Port = 80, + /// }, + /// }); + /// + /// var backendService = new Gcp.Compute.RegionBackendService("backend_service", new() + /// { + /// Name = "example-bs", + /// Region = "us-central1", + /// HealthChecks = healthCheck.Id, + /// Protocol = "UDP", + /// LoadBalancingScheme = "INTERNAL", + /// }); + /// + /// var forwardingRule = new Gcp.Compute.ForwardingRule("forwarding_rule", new() + /// { + /// Name = "example-fwr", + /// Region = "us-central1", + /// Network = network.Name, + /// Subnetwork = subnetwork.Name, + /// BackendService = backendService.Id, + /// LoadBalancingScheme = "INTERNAL", + /// Ports = new[] + /// { + /// "6081", + /// }, + /// IpProtocol = "UDP", + /// IsMirroringCollector = true, + /// }); + /// + /// var deploymentGroup = new Gcp.NetworkSecurity.MirroringDeploymentGroup("deployment_group", new() + /// { + /// MirroringDeploymentGroupId = "example-dg", + /// Location = "global", + /// Network = network.Id, + /// }); + /// + /// var @default = new Gcp.NetworkSecurity.MirroringDeployment("default", new() + /// { + /// MirroringDeploymentId = "example-deployment", + /// Location = "us-central1-a", + /// ForwardingRule = forwardingRule.Id, + /// MirroringDeploymentGroup = deploymentGroup.Id, + /// Labels = + /// { + /// { "foo", "bar" }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// MirroringDeployment can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}}` + /// + /// * `{{project}}/{{location}}/{{mirroring_deployment_id}}` + /// + /// * `{{location}}/{{mirroring_deployment_id}}` + /// + /// When using the `pulumi import` command, MirroringDeployment can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{project}}/{{location}}/{{mirroring_deployment_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{location}}/{{mirroring_deployment_id}} + /// ``` + /// + [GcpResourceType("gcp:networksecurity/mirroringDeployment:MirroringDeployment")] + public partial class MirroringDeployment : global::Pulumi.CustomResource + { + /// + /// Output only. [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!; + + /// + /// Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + /// to. Format is: + /// projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + /// + [Output("forwardingRule")] + public Output ForwardingRule { 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!; + + /// + /// 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`. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + /// `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + /// + [Output("mirroringDeploymentGroup")] + public Output MirroringDeploymentGroup { get; private set; } = null!; + + /// + /// Required. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_deployment_id from the method_signature of Create RPC + /// + /// + /// - - - + /// + [Output("mirroringDeploymentId")] + public Output MirroringDeploymentId { get; private set; } = null!; + + /// + /// Immutable. Identifier. The name of the MirroringDeployment. + /// + [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. Whether reconciling is in progress, recommended per + /// https://google.aip.dev/128. + /// + [Output("reconciling")] + public Output Reconciling { get; private set; } = null!; + + /// + /// Output only. Current state of the deployment. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// CREATING + /// DELETING + /// OUT_OF_SYNC + /// DELETE_FAILED + /// + [Output("state")] + public Output State { get; private set; } = null!; + + /// + /// Output only. [Output only] Update time stamp + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a MirroringDeployment 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 MirroringDeployment(string name, MirroringDeploymentArgs args, CustomResourceOptions? options = null) + : base("gcp:networksecurity/mirroringDeployment:MirroringDeployment", name, args ?? new MirroringDeploymentArgs(), MakeResourceOptions(options, "")) + { + } + + private MirroringDeployment(string name, Input id, MirroringDeploymentState? state = null, CustomResourceOptions? options = null) + : base("gcp:networksecurity/mirroringDeployment:MirroringDeployment", 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 MirroringDeployment 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 MirroringDeployment Get(string name, Input id, MirroringDeploymentState? state = null, CustomResourceOptions? options = null) + { + return new MirroringDeployment(name, id, state, options); + } + } + + public sealed class MirroringDeploymentArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + /// to. Format is: + /// projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + /// + [Input("forwardingRule", required: true)] + public Input ForwardingRule { 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; + } + + /// + /// 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`. + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + /// `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + /// + [Input("mirroringDeploymentGroup", required: true)] + public Input MirroringDeploymentGroup { get; set; } = null!; + + /// + /// Required. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_deployment_id from the method_signature of Create RPC + /// + /// + /// - - - + /// + [Input("mirroringDeploymentId", required: true)] + public Input MirroringDeploymentId { 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 MirroringDeploymentArgs() + { + } + public static new MirroringDeploymentArgs Empty => new MirroringDeploymentArgs(); + } + + public sealed class MirroringDeploymentState : global::Pulumi.ResourceArgs + { + /// + /// Output only. [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]); + } + } + + /// + /// Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + /// to. Format is: + /// projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + /// + [Input("forwardingRule")] + public Input? ForwardingRule { 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; + } + + /// + /// 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`. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + /// `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + /// + [Input("mirroringDeploymentGroup")] + public Input? MirroringDeploymentGroup { get; set; } + + /// + /// Required. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_deployment_id from the method_signature of Create RPC + /// + /// + /// - - - + /// + [Input("mirroringDeploymentId")] + public Input? MirroringDeploymentId { get; set; } + + /// + /// Immutable. Identifier. The name of the MirroringDeployment. + /// + [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. Whether reconciling is in progress, recommended per + /// https://google.aip.dev/128. + /// + [Input("reconciling")] + public Input? Reconciling { get; set; } + + /// + /// Output only. Current state of the deployment. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// CREATING + /// DELETING + /// OUT_OF_SYNC + /// DELETE_FAILED + /// + [Input("state")] + public Input? State { get; set; } + + /// + /// Output only. [Output only] Update time stamp + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public MirroringDeploymentState() + { + } + public static new MirroringDeploymentState Empty => new MirroringDeploymentState(); + } +} diff --git a/sdk/dotnet/NetworkSecurity/MirroringDeploymentGroup.cs b/sdk/dotnet/NetworkSecurity/MirroringDeploymentGroup.cs new file mode 100644 index 0000000000..da5cba1951 --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/MirroringDeploymentGroup.cs @@ -0,0 +1,405 @@ +// *** 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.NetworkSecurity +{ + /// + /// ## Example Usage + /// + /// ### Network Security Mirroring Deployment Group Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var network = new Gcp.Compute.Network("network", new() + /// { + /// Name = "example-network", + /// AutoCreateSubnetworks = false, + /// }); + /// + /// var @default = new Gcp.NetworkSecurity.MirroringDeploymentGroup("default", new() + /// { + /// MirroringDeploymentGroupId = "example-dg", + /// Location = "global", + /// Network = network.Id, + /// Labels = + /// { + /// { "foo", "bar" }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// MirroringDeploymentGroup can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}}` + /// + /// * `{{project}}/{{location}}/{{mirroring_deployment_group_id}}` + /// + /// * `{{location}}/{{mirroring_deployment_group_id}}` + /// + /// When using the `pulumi import` command, MirroringDeploymentGroup can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{project}}/{{location}}/{{mirroring_deployment_group_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{location}}/{{mirroring_deployment_group_id}} + /// ``` + /// + [GcpResourceType("gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup")] + public partial class MirroringDeploymentGroup : global::Pulumi.CustomResource + { + /// + /// Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + /// Structure is documented below. + /// + [Output("connectedEndpointGroups")] + public Output> ConnectedEndpointGroups { get; private set; } = null!; + + /// + /// Output only. [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!; + + /// + /// 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`. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// Required. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_deployment_group_id from the method_signature of Create RPC + /// + /// + /// - - - + /// + [Output("mirroringDeploymentGroupId")] + public Output MirroringDeploymentGroupId { get; private set; } = null!; + + /// + /// (Output) + /// Output only. A connected mirroring endpoint group. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Required. Immutable. The network that is being used for the deployment. Format is: + /// projects/{project}/global/networks/{network}. + /// + [Output("network")] + public Output Network { 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. Whether reconciling is in progress, recommended per + /// https://google.aip.dev/128. + /// + [Output("reconciling")] + public Output Reconciling { get; private set; } = null!; + + /// + /// Output only. Current state of the deployment group. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// CREATING + /// DELETING + /// + [Output("state")] + public Output State { get; private set; } = null!; + + /// + /// Output only. [Output only] Update time stamp + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a MirroringDeploymentGroup 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 MirroringDeploymentGroup(string name, MirroringDeploymentGroupArgs args, CustomResourceOptions? options = null) + : base("gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup", name, args ?? new MirroringDeploymentGroupArgs(), MakeResourceOptions(options, "")) + { + } + + private MirroringDeploymentGroup(string name, Input id, MirroringDeploymentGroupState? state = null, CustomResourceOptions? options = null) + : base("gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup", 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 MirroringDeploymentGroup 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 MirroringDeploymentGroup Get(string name, Input id, MirroringDeploymentGroupState? state = null, CustomResourceOptions? options = null) + { + return new MirroringDeploymentGroup(name, id, state, options); + } + } + + public sealed class MirroringDeploymentGroupArgs : global::Pulumi.ResourceArgs + { + [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; + } + + /// + /// 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`. + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// Required. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_deployment_group_id from the method_signature of Create RPC + /// + /// + /// - - - + /// + [Input("mirroringDeploymentGroupId", required: true)] + public Input MirroringDeploymentGroupId { get; set; } = null!; + + /// + /// Required. Immutable. The network that is being used for the deployment. Format is: + /// projects/{project}/global/networks/{network}. + /// + [Input("network", required: true)] + public Input Network { 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 MirroringDeploymentGroupArgs() + { + } + public static new MirroringDeploymentGroupArgs Empty => new MirroringDeploymentGroupArgs(); + } + + public sealed class MirroringDeploymentGroupState : global::Pulumi.ResourceArgs + { + [Input("connectedEndpointGroups")] + private InputList? _connectedEndpointGroups; + + /// + /// Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + /// Structure is documented below. + /// + public InputList ConnectedEndpointGroups + { + get => _connectedEndpointGroups ?? (_connectedEndpointGroups = new InputList()); + set => _connectedEndpointGroups = value; + } + + /// + /// Output only. [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; + } + + /// + /// 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`. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Required. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_deployment_group_id from the method_signature of Create RPC + /// + /// + /// - - - + /// + [Input("mirroringDeploymentGroupId")] + public Input? MirroringDeploymentGroupId { get; set; } + + /// + /// (Output) + /// Output only. A connected mirroring endpoint group. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Required. Immutable. The network that is being used for the deployment. Format is: + /// projects/{project}/global/networks/{network}. + /// + [Input("network")] + public Input? Network { 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. Whether reconciling is in progress, recommended per + /// https://google.aip.dev/128. + /// + [Input("reconciling")] + public Input? Reconciling { get; set; } + + /// + /// Output only. Current state of the deployment group. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// CREATING + /// DELETING + /// + [Input("state")] + public Input? State { get; set; } + + /// + /// Output only. [Output only] Update time stamp + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public MirroringDeploymentGroupState() + { + } + public static new MirroringDeploymentGroupState Empty => new MirroringDeploymentGroupState(); + } +} diff --git a/sdk/dotnet/NetworkSecurity/MirroringEndpointGroup.cs b/sdk/dotnet/NetworkSecurity/MirroringEndpointGroup.cs new file mode 100644 index 0000000000..d2f9b77440 --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/MirroringEndpointGroup.cs @@ -0,0 +1,397 @@ +// *** 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.NetworkSecurity +{ + /// + /// ## Example Usage + /// + /// ### Network Security Mirroring Endpoint Group Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var network = new Gcp.Compute.Network("network", new() + /// { + /// Name = "example-network", + /// AutoCreateSubnetworks = false, + /// }); + /// + /// var deploymentGroup = new Gcp.NetworkSecurity.MirroringDeploymentGroup("deployment_group", new() + /// { + /// MirroringDeploymentGroupId = "example-dg", + /// Location = "global", + /// Network = network.Id, + /// }); + /// + /// var @default = new Gcp.NetworkSecurity.MirroringEndpointGroup("default", new() + /// { + /// MirroringEndpointGroupId = "example-eg", + /// Location = "global", + /// MirroringDeploymentGroup = deploymentGroup.Id, + /// Labels = + /// { + /// { "foo", "bar" }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// MirroringEndpointGroup can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}}` + /// + /// * `{{project}}/{{location}}/{{mirroring_endpoint_group_id}}` + /// + /// * `{{location}}/{{mirroring_endpoint_group_id}}` + /// + /// When using the `pulumi import` command, MirroringEndpointGroup can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{project}}/{{location}}/{{mirroring_endpoint_group_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{location}}/{{mirroring_endpoint_group_id}} + /// ``` + /// + [GcpResourceType("gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup")] + public partial class MirroringEndpointGroup : global::Pulumi.CustomResource + { + /// + /// Output only. [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!; + + /// + /// 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`. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + /// is: + /// `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + /// + [Output("mirroringDeploymentGroup")] + public Output MirroringDeploymentGroup { get; private set; } = null!; + + /// + /// Required. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_endpoint_group_id from the method_signature of Create RPC + /// + /// + /// - - - + /// + [Output("mirroringEndpointGroupId")] + public Output MirroringEndpointGroupId { get; private set; } = null!; + + /// + /// Immutable. Identifier. The name of the MirroringEndpointGroup. + /// + [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. Whether reconciling is in progress, recommended per + /// https://google.aip.dev/128. + /// + [Output("reconciling")] + public Output Reconciling { get; private set; } = null!; + + /// + /// Output only. Current state of the endpoint group. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// CLOSED + /// CREATING + /// DELETING + /// OUT_OF_SYNC + /// + [Output("state")] + public Output State { get; private set; } = null!; + + /// + /// Output only. [Output only] Update time stamp + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a MirroringEndpointGroup 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 MirroringEndpointGroup(string name, MirroringEndpointGroupArgs args, CustomResourceOptions? options = null) + : base("gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup", name, args ?? new MirroringEndpointGroupArgs(), MakeResourceOptions(options, "")) + { + } + + private MirroringEndpointGroup(string name, Input id, MirroringEndpointGroupState? state = null, CustomResourceOptions? options = null) + : base("gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup", 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 MirroringEndpointGroup 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 MirroringEndpointGroup Get(string name, Input id, MirroringEndpointGroupState? state = null, CustomResourceOptions? options = null) + { + return new MirroringEndpointGroup(name, id, state, options); + } + } + + public sealed class MirroringEndpointGroupArgs : global::Pulumi.ResourceArgs + { + [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; + } + + /// + /// 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`. + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + /// is: + /// `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + /// + [Input("mirroringDeploymentGroup", required: true)] + public Input MirroringDeploymentGroup { get; set; } = null!; + + /// + /// Required. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_endpoint_group_id from the method_signature of Create RPC + /// + /// + /// - - - + /// + [Input("mirroringEndpointGroupId", required: true)] + public Input MirroringEndpointGroupId { 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 MirroringEndpointGroupArgs() + { + } + public static new MirroringEndpointGroupArgs Empty => new MirroringEndpointGroupArgs(); + } + + public sealed class MirroringEndpointGroupState : global::Pulumi.ResourceArgs + { + /// + /// Output only. [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; + } + + /// + /// 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`. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + /// is: + /// `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + /// + [Input("mirroringDeploymentGroup")] + public Input? MirroringDeploymentGroup { get; set; } + + /// + /// Required. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_endpoint_group_id from the method_signature of Create RPC + /// + /// + /// - - - + /// + [Input("mirroringEndpointGroupId")] + public Input? MirroringEndpointGroupId { get; set; } + + /// + /// Immutable. Identifier. The name of the MirroringEndpointGroup. + /// + [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. Whether reconciling is in progress, recommended per + /// https://google.aip.dev/128. + /// + [Input("reconciling")] + public Input? Reconciling { get; set; } + + /// + /// Output only. Current state of the endpoint group. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// CLOSED + /// CREATING + /// DELETING + /// OUT_OF_SYNC + /// + [Input("state")] + public Input? State { get; set; } + + /// + /// Output only. [Output only] Update time stamp + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public MirroringEndpointGroupState() + { + } + public static new MirroringEndpointGroupState Empty => new MirroringEndpointGroupState(); + } +} diff --git a/sdk/dotnet/NetworkSecurity/MirroringEndpointGroupAssociation.cs b/sdk/dotnet/NetworkSecurity/MirroringEndpointGroupAssociation.cs new file mode 100644 index 0000000000..f13354c2ed --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/MirroringEndpointGroupAssociation.cs @@ -0,0 +1,451 @@ +// *** 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.NetworkSecurity +{ + /// + /// ## Example Usage + /// + /// ### Network Security Mirroring Endpoint Group Association Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var producerNetwork = new Gcp.Compute.Network("producer_network", new() + /// { + /// Name = "example-prod-network", + /// AutoCreateSubnetworks = false, + /// }); + /// + /// var consumerNetwork = new Gcp.Compute.Network("consumer_network", new() + /// { + /// Name = "example-cons-network", + /// AutoCreateSubnetworks = false, + /// }); + /// + /// var deploymentGroup = new Gcp.NetworkSecurity.MirroringDeploymentGroup("deployment_group", new() + /// { + /// MirroringDeploymentGroupId = "example-dg", + /// Location = "global", + /// Network = producerNetwork.Id, + /// }); + /// + /// var endpointGroup = new Gcp.NetworkSecurity.MirroringEndpointGroup("endpoint_group", new() + /// { + /// MirroringEndpointGroupId = "example-eg", + /// Location = "global", + /// MirroringDeploymentGroup = deploymentGroup.Id, + /// }); + /// + /// var @default = new Gcp.NetworkSecurity.MirroringEndpointGroupAssociation("default", new() + /// { + /// MirroringEndpointGroupAssociationId = "example-ega", + /// Location = "global", + /// Network = consumerNetwork.Id, + /// MirroringEndpointGroup = endpointGroup.Id, + /// Labels = + /// { + /// { "foo", "bar" }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// MirroringEndpointGroupAssociation can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}}` + /// + /// * `{{project}}/{{location}}/{{mirroring_endpoint_group_association_id}}` + /// + /// * `{{location}}/{{mirroring_endpoint_group_association_id}}` + /// + /// When using the `pulumi import` command, MirroringEndpointGroupAssociation can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{project}}/{{location}}/{{mirroring_endpoint_group_association_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{location}}/{{mirroring_endpoint_group_association_id}} + /// ``` + /// + [GcpResourceType("gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation")] + public partial class MirroringEndpointGroupAssociation : global::Pulumi.CustomResource + { + /// + /// Output only. [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!; + + /// + /// 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`. + /// + /// + /// - - - + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// Output only. The list of locations that this association is in and its details. + /// Structure is documented below. + /// + [Output("locationsDetails")] + public Output> LocationsDetails { get; private set; } = null!; + + /// + /// Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + /// is: + /// `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + /// + [Output("mirroringEndpointGroup")] + public Output MirroringEndpointGroup { get; private set; } = null!; + + /// + /// Optional. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_endpoint_group_association_id from the method_signature of Create + /// RPC + /// + [Output("mirroringEndpointGroupAssociationId")] + public Output MirroringEndpointGroupAssociationId { get; private set; } = null!; + + /// + /// Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Required. Immutable. The VPC network associated. Format: + /// projects/{project}/global/networks/{network}. + /// + [Output("network")] + public Output Network { 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. Whether reconciling is in progress, recommended per + /// https://google.aip.dev/128. + /// + [Output("reconciling")] + public Output Reconciling { get; private set; } = null!; + + /// + /// (Output) + /// Output only. The association state in this location. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// OUT_OF_SYNC + /// + [Output("state")] + public Output State { get; private set; } = null!; + + /// + /// Output only. [Output only] Update time stamp + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a MirroringEndpointGroupAssociation 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 MirroringEndpointGroupAssociation(string name, MirroringEndpointGroupAssociationArgs args, CustomResourceOptions? options = null) + : base("gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation", name, args ?? new MirroringEndpointGroupAssociationArgs(), MakeResourceOptions(options, "")) + { + } + + private MirroringEndpointGroupAssociation(string name, Input id, MirroringEndpointGroupAssociationState? state = null, CustomResourceOptions? options = null) + : base("gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation", 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 MirroringEndpointGroupAssociation 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 MirroringEndpointGroupAssociation Get(string name, Input id, MirroringEndpointGroupAssociationState? state = null, CustomResourceOptions? options = null) + { + return new MirroringEndpointGroupAssociation(name, id, state, options); + } + } + + public sealed class MirroringEndpointGroupAssociationArgs : global::Pulumi.ResourceArgs + { + [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; + } + + /// + /// 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`. + /// + /// + /// - - - + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + /// is: + /// `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + /// + [Input("mirroringEndpointGroup", required: true)] + public Input MirroringEndpointGroup { get; set; } = null!; + + /// + /// Optional. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_endpoint_group_association_id from the method_signature of Create + /// RPC + /// + [Input("mirroringEndpointGroupAssociationId")] + public Input? MirroringEndpointGroupAssociationId { get; set; } + + /// + /// Required. Immutable. The VPC network associated. Format: + /// projects/{project}/global/networks/{network}. + /// + [Input("network", required: true)] + public Input Network { 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 MirroringEndpointGroupAssociationArgs() + { + } + public static new MirroringEndpointGroupAssociationArgs Empty => new MirroringEndpointGroupAssociationArgs(); + } + + public sealed class MirroringEndpointGroupAssociationState : global::Pulumi.ResourceArgs + { + /// + /// Output only. [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; + } + + /// + /// 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`. + /// + /// + /// - - - + /// + [Input("location")] + public Input? Location { get; set; } + + [Input("locationsDetails")] + private InputList? _locationsDetails; + + /// + /// Output only. The list of locations that this association is in and its details. + /// Structure is documented below. + /// + public InputList LocationsDetails + { + get => _locationsDetails ?? (_locationsDetails = new InputList()); + set => _locationsDetails = value; + } + + /// + /// Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + /// is: + /// `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + /// + [Input("mirroringEndpointGroup")] + public Input? MirroringEndpointGroup { get; set; } + + /// + /// Optional. Id of the requesting object + /// If auto-generating Id server-side, remove this field and + /// mirroring_endpoint_group_association_id from the method_signature of Create + /// RPC + /// + [Input("mirroringEndpointGroupAssociationId")] + public Input? MirroringEndpointGroupAssociationId { get; set; } + + /// + /// Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Required. Immutable. The VPC network associated. Format: + /// projects/{project}/global/networks/{network}. + /// + [Input("network")] + public Input? Network { 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. Whether reconciling is in progress, recommended per + /// https://google.aip.dev/128. + /// + [Input("reconciling")] + public Input? Reconciling { get; set; } + + /// + /// (Output) + /// Output only. The association state in this location. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// OUT_OF_SYNC + /// + [Input("state")] + public Input? State { get; set; } + + /// + /// Output only. [Output only] Update time stamp + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public MirroringEndpointGroupAssociationState() + { + } + public static new MirroringEndpointGroupAssociationState Empty => new MirroringEndpointGroupAssociationState(); + } +} diff --git a/sdk/dotnet/NetworkSecurity/Outputs/MirroringDeploymentGroupConnectedEndpointGroup.cs b/sdk/dotnet/NetworkSecurity/Outputs/MirroringDeploymentGroupConnectedEndpointGroup.cs new file mode 100644 index 0000000000..2218ea4648 --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/Outputs/MirroringDeploymentGroupConnectedEndpointGroup.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.NetworkSecurity.Outputs +{ + + [OutputType] + public sealed class MirroringDeploymentGroupConnectedEndpointGroup + { + /// + /// (Output) + /// Output only. A connected mirroring endpoint group. + /// + public readonly string? Name; + + [OutputConstructor] + private MirroringDeploymentGroupConnectedEndpointGroup(string? name) + { + Name = name; + } + } +} diff --git a/sdk/dotnet/NetworkSecurity/Outputs/MirroringEndpointGroupAssociationLocationsDetail.cs b/sdk/dotnet/NetworkSecurity/Outputs/MirroringEndpointGroupAssociationLocationsDetail.cs new file mode 100644 index 0000000000..bee2875528 --- /dev/null +++ b/sdk/dotnet/NetworkSecurity/Outputs/MirroringEndpointGroupAssociationLocationsDetail.cs @@ -0,0 +1,43 @@ +// *** 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.NetworkSecurity.Outputs +{ + + [OutputType] + public sealed class MirroringEndpointGroupAssociationLocationsDetail + { + /// + /// 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`. + /// + /// + /// - - - + /// + public readonly string? Location; + /// + /// (Output) + /// Output only. The association state in this location. + /// Possible values: + /// STATE_UNSPECIFIED + /// ACTIVE + /// OUT_OF_SYNC + /// + public readonly string? State; + + [OutputConstructor] + private MirroringEndpointGroupAssociationLocationsDetail( + string? location, + + string? state) + { + Location = location; + State = state; + } + } +} diff --git a/sdk/dotnet/OracleDatabase/AutonomousDatabase.cs b/sdk/dotnet/OracleDatabase/AutonomousDatabase.cs index 7e69a98c18..b51fd8c96b 100644 --- a/sdk/dotnet/OracleDatabase/AutonomousDatabase.cs +++ b/sdk/dotnet/OracleDatabase/AutonomousDatabase.cs @@ -53,6 +53,7 @@ namespace Pulumi.Gcp.OracleDatabase /// DbWorkload = "OLTP", /// LicenseType = "LICENSE_INCLUDED", /// }, + /// DeletionProtection = true, /// }); /// /// }); @@ -113,6 +114,7 @@ namespace Pulumi.Gcp.OracleDatabase /// PrivateEndpointIp = "10.5.0.11", /// PrivateEndpointLabel = "testhost", /// }, + /// DeletionProtection = true, /// }); /// /// }); @@ -180,6 +182,9 @@ public partial class AutonomousDatabase : global::Pulumi.CustomResource [Output("database")] public Output Database { get; private set; } = null!; + [Output("deletionProtection")] + public Output DeletionProtection { get; private set; } = null!; + /// /// The display name for the Autonomous Database. The name does not have to be unique within your project. /// @@ -324,6 +329,9 @@ public sealed class AutonomousDatabaseArgs : global::Pulumi.ResourceArgs [Input("database", required: true)] public Input Database { get; set; } = null!; + [Input("deletionProtection")] + public Input? DeletionProtection { get; set; } + /// /// The display name for the Autonomous Database. The name does not have to be unique within your project. /// @@ -410,6 +418,9 @@ public sealed class AutonomousDatabaseState : global::Pulumi.ResourceArgs [Input("database")] public Input? Database { get; set; } + [Input("deletionProtection")] + public Input? DeletionProtection { get; set; } + /// /// The display name for the Autonomous Database. The name does not have to be unique within your project. /// diff --git a/sdk/dotnet/OracleDatabase/CloudExadataInfrastructure.cs b/sdk/dotnet/OracleDatabase/CloudExadataInfrastructure.cs index 8f7b368445..3cdabc604c 100644 --- a/sdk/dotnet/OracleDatabase/CloudExadataInfrastructure.cs +++ b/sdk/dotnet/OracleDatabase/CloudExadataInfrastructure.cs @@ -42,6 +42,7 @@ namespace Pulumi.Gcp.OracleDatabase /// ComputeCount = 2, /// StorageCount = 3, /// }, + /// DeletionProtection = true, /// }); /// /// }); @@ -108,6 +109,7 @@ namespace Pulumi.Gcp.OracleDatabase /// { /// { "label-one", "value-one" }, /// }, + /// DeletionProtection = true, /// }); /// /// }); @@ -158,6 +160,9 @@ public partial class CloudExadataInfrastructure : global::Pulumi.CustomResource [Output("createTime")] public Output CreateTime { get; private set; } = null!; + [Output("deletionProtection")] + public Output DeletionProtection { get; private set; } = null!; + /// /// User friendly name for this resource. /// @@ -288,6 +293,9 @@ public sealed class CloudExadataInfrastructureArgs : global::Pulumi.ResourceArgs [Input("cloudExadataInfrastructureId", required: true)] public Input CloudExadataInfrastructureId { get; set; } = null!; + [Input("deletionProtection")] + public Input? DeletionProtection { get; set; } + /// /// User friendly name for this resource. /// @@ -360,6 +368,9 @@ public sealed class CloudExadataInfrastructureState : global::Pulumi.ResourceArg [Input("createTime")] public Input? CreateTime { get; set; } + [Input("deletionProtection")] + public Input? DeletionProtection { get; set; } + /// /// User friendly name for this resource. /// diff --git a/sdk/dotnet/OracleDatabase/CloudVmCluster.cs b/sdk/dotnet/OracleDatabase/CloudVmCluster.cs index 0858787940..317b672634 100644 --- a/sdk/dotnet/OracleDatabase/CloudVmCluster.cs +++ b/sdk/dotnet/OracleDatabase/CloudVmCluster.cs @@ -42,6 +42,7 @@ namespace Pulumi.Gcp.OracleDatabase /// ComputeCount = 2, /// StorageCount = 3, /// }, + /// DeletionProtection = true, /// }); /// /// var @default = Gcp.Compute.GetNetwork.Invoke(new() @@ -71,6 +72,7 @@ namespace Pulumi.Gcp.OracleDatabase /// GiVersion = "19.0.0.0", /// HostnamePrefix = "hostname1", /// }, + /// DeletionProtection = true, /// }); /// /// }); @@ -97,6 +99,7 @@ namespace Pulumi.Gcp.OracleDatabase /// ComputeCount = 2, /// StorageCount = 3, /// }, + /// DeletionProtection = true, /// }); /// /// var @default = Gcp.Compute.GetNetwork.Invoke(new() @@ -161,6 +164,7 @@ namespace Pulumi.Gcp.OracleDatabase /// }, /// MemorySizeGb = 60, /// }, + /// DeletionProtection = true, /// }); /// /// }); @@ -223,6 +227,9 @@ public partial class CloudVmCluster : global::Pulumi.CustomResource [Output("createTime")] public Output CreateTime { get; private set; } = null!; + [Output("deletionProtection")] + public Output DeletionProtection { get; private set; } = null!; + /// /// User friendly name for this resource. /// @@ -374,6 +381,9 @@ public sealed class CloudVmClusterArgs : global::Pulumi.ResourceArgs [Input("cloudVmClusterId", required: true)] public Input CloudVmClusterId { get; set; } = null!; + [Input("deletionProtection")] + public Input? DeletionProtection { get; set; } + /// /// User friendly name for this resource. /// @@ -467,6 +477,9 @@ public sealed class CloudVmClusterState : global::Pulumi.ResourceArgs [Input("createTime")] public Input? CreateTime { get; set; } + [Input("deletionProtection")] + public Input? DeletionProtection { get; set; } + /// /// User friendly name for this resource. /// diff --git a/sdk/dotnet/OracleDatabase/GetAutonomousDatabase.cs b/sdk/dotnet/OracleDatabase/GetAutonomousDatabase.cs index ac416ff0c4..708f87b01f 100644 --- a/sdk/dotnet/OracleDatabase/GetAutonomousDatabase.cs +++ b/sdk/dotnet/OracleDatabase/GetAutonomousDatabase.cs @@ -136,6 +136,7 @@ public sealed class GetAutonomousDatabaseResult public readonly string Cidr; public readonly string CreateTime; public readonly string Database; + public readonly bool DeletionProtection; public readonly string DisplayName; public readonly ImmutableDictionary EffectiveLabels; public readonly string EntitlementId; @@ -163,6 +164,8 @@ private GetAutonomousDatabaseResult( string database, + bool deletionProtection, + string displayName, ImmutableDictionary effectiveLabels, @@ -190,6 +193,7 @@ private GetAutonomousDatabaseResult( Cidr = cidr; CreateTime = createTime; Database = database; + DeletionProtection = deletionProtection; DisplayName = displayName; EffectiveLabels = effectiveLabels; EntitlementId = entitlementId; diff --git a/sdk/dotnet/OracleDatabase/GetCloudExadataInfrastructure.cs b/sdk/dotnet/OracleDatabase/GetCloudExadataInfrastructure.cs index 2d70c6f151..521c9b30e9 100644 --- a/sdk/dotnet/OracleDatabase/GetCloudExadataInfrastructure.cs +++ b/sdk/dotnet/OracleDatabase/GetCloudExadataInfrastructure.cs @@ -133,6 +133,7 @@ public sealed class GetCloudExadataInfrastructureResult { public readonly string CloudExadataInfrastructureId; public readonly string CreateTime; + public readonly bool DeletionProtection; public readonly string DisplayName; public readonly ImmutableDictionary EffectiveLabels; public readonly string EntitlementId; @@ -154,6 +155,8 @@ private GetCloudExadataInfrastructureResult( string createTime, + bool deletionProtection, + string displayName, ImmutableDictionary effectiveLabels, @@ -178,6 +181,7 @@ private GetCloudExadataInfrastructureResult( { CloudExadataInfrastructureId = cloudExadataInfrastructureId; CreateTime = createTime; + DeletionProtection = deletionProtection; DisplayName = displayName; EffectiveLabels = effectiveLabels; EntitlementId = entitlementId; diff --git a/sdk/dotnet/OracleDatabase/GetCloudVmCluster.cs b/sdk/dotnet/OracleDatabase/GetCloudVmCluster.cs index 9222e6a73b..c01c3b1973 100644 --- a/sdk/dotnet/OracleDatabase/GetCloudVmCluster.cs +++ b/sdk/dotnet/OracleDatabase/GetCloudVmCluster.cs @@ -135,6 +135,7 @@ public sealed class GetCloudVmClusterResult public readonly string Cidr; public readonly string CloudVmClusterId; public readonly string CreateTime; + public readonly bool DeletionProtection; public readonly string DisplayName; public readonly ImmutableDictionary EffectiveLabels; public readonly string ExadataInfrastructure; @@ -161,6 +162,8 @@ private GetCloudVmClusterResult( string createTime, + bool deletionProtection, + string displayName, ImmutableDictionary effectiveLabels, @@ -189,6 +192,7 @@ private GetCloudVmClusterResult( Cidr = cidr; CloudVmClusterId = cloudVmClusterId; CreateTime = createTime; + DeletionProtection = deletionProtection; DisplayName = displayName; EffectiveLabels = effectiveLabels; ExadataInfrastructure = exadataInfrastructure; diff --git a/sdk/dotnet/OracleDatabase/Outputs/GetAutonomousDatabasesAutonomousDatabaseResult.cs b/sdk/dotnet/OracleDatabase/Outputs/GetAutonomousDatabasesAutonomousDatabaseResult.cs index 60b660f3d6..122152149b 100644 --- a/sdk/dotnet/OracleDatabase/Outputs/GetAutonomousDatabasesAutonomousDatabaseResult.cs +++ b/sdk/dotnet/OracleDatabase/Outputs/GetAutonomousDatabasesAutonomousDatabaseResult.cs @@ -38,6 +38,7 @@ public sealed class GetAutonomousDatabasesAutonomousDatabaseResult /// contain a maximum of 30 alphanumeric characters. /// public readonly string Database; + public readonly bool DeletionProtection; /// /// The display name for the Autonomous Database. The name does not have to /// be unique within your project. @@ -99,6 +100,8 @@ private GetAutonomousDatabasesAutonomousDatabaseResult( string database, + bool deletionProtection, + string displayName, ImmutableDictionary effectiveLabels, @@ -124,6 +127,7 @@ private GetAutonomousDatabasesAutonomousDatabaseResult( Cidr = cidr; CreateTime = createTime; Database = database; + DeletionProtection = deletionProtection; DisplayName = displayName; EffectiveLabels = effectiveLabels; EntitlementId = entitlementId; diff --git a/sdk/dotnet/OracleDatabase/Outputs/GetCloudExadataInfrastructuresCloudExadataInfrastructureResult.cs b/sdk/dotnet/OracleDatabase/Outputs/GetCloudExadataInfrastructuresCloudExadataInfrastructureResult.cs index 3faef1ffa1..df11435952 100644 --- a/sdk/dotnet/OracleDatabase/Outputs/GetCloudExadataInfrastructuresCloudExadataInfrastructureResult.cs +++ b/sdk/dotnet/OracleDatabase/Outputs/GetCloudExadataInfrastructuresCloudExadataInfrastructureResult.cs @@ -24,6 +24,7 @@ public sealed class GetCloudExadataInfrastructuresCloudExadataInfrastructureResu /// The date and time that the Exadata Infrastructure was created. /// public readonly string CreateTime; + public readonly bool DeletionProtection; /// /// User friendly name for this resource. /// @@ -77,6 +78,8 @@ private GetCloudExadataInfrastructuresCloudExadataInfrastructureResult( string createTime, + bool deletionProtection, + string displayName, ImmutableDictionary effectiveLabels, @@ -99,6 +102,7 @@ private GetCloudExadataInfrastructuresCloudExadataInfrastructureResult( { CloudExadataInfrastructureId = cloudExadataInfrastructureId; CreateTime = createTime; + DeletionProtection = deletionProtection; DisplayName = displayName; EffectiveLabels = effectiveLabels; EntitlementId = entitlementId; diff --git a/sdk/dotnet/OracleDatabase/Outputs/GetCloudVmClustersCloudVmClusterResult.cs b/sdk/dotnet/OracleDatabase/Outputs/GetCloudVmClustersCloudVmClusterResult.cs index 00918f9015..974d8d8496 100644 --- a/sdk/dotnet/OracleDatabase/Outputs/GetCloudVmClustersCloudVmClusterResult.cs +++ b/sdk/dotnet/OracleDatabase/Outputs/GetCloudVmClustersCloudVmClusterResult.cs @@ -32,6 +32,7 @@ public sealed class GetCloudVmClustersCloudVmClusterResult /// The date and time that the VM cluster was created. /// public readonly string CreateTime; + public readonly bool DeletionProtection; /// /// User friendly name for this resource. /// @@ -96,6 +97,8 @@ private GetCloudVmClustersCloudVmClusterResult( string createTime, + bool deletionProtection, + string displayName, ImmutableDictionary effectiveLabels, @@ -122,6 +125,7 @@ private GetCloudVmClustersCloudVmClusterResult( Cidr = cidr; CloudVmClusterId = cloudVmClusterId; CreateTime = createTime; + DeletionProtection = deletionProtection; DisplayName = displayName; EffectiveLabels = effectiveLabels; ExadataInfrastructure = exadataInfrastructure; diff --git a/sdk/dotnet/OrgPolicy/Policy.cs b/sdk/dotnet/OrgPolicy/Policy.cs index 04e6c10f0a..40422f30db 100644 --- a/sdk/dotnet/OrgPolicy/Policy.cs +++ b/sdk/dotnet/OrgPolicy/Policy.cs @@ -184,7 +184,7 @@ namespace Pulumi.Gcp.OrgPolicy /// { /// var constraint = new Gcp.OrgPolicy.CustomConstraint("constraint", new() /// { - /// Name = "custom.disableGkeAutoUpgrade_13293", + /// Name = "custom.disableGkeAutoUpgrade_40289", /// Parent = "organizations/123456789", /// DisplayName = "Disable GKE auto upgrade", /// Description = "Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.", diff --git a/sdk/dotnet/ParallelStore/Instance.cs b/sdk/dotnet/ParallelStore/Instance.cs index 3a54d96dc9..0952dea899 100644 --- a/sdk/dotnet/ParallelStore/Instance.cs +++ b/sdk/dotnet/ParallelStore/Instance.cs @@ -10,6 +10,8 @@ namespace Pulumi.Gcp.ParallelStore { /// + /// A Parallelstore Instance. + /// /// ## Example Usage /// /// ### Parallelstore Instance Basic diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs index 1d8a8883b2..6c12c69290 100644 --- a/sdk/dotnet/Provider.cs +++ b/sdk/dotnet/Provider.cs @@ -276,6 +276,9 @@ public partial class Provider : global::Pulumi.ProviderResource [Output("firestoreCustomEndpoint")] public Output FirestoreCustomEndpoint { get; private set; } = null!; + [Output("geminiCustomEndpoint")] + public Output GeminiCustomEndpoint { get; private set; } = null!; + [Output("gkeBackupCustomEndpoint")] public Output GkeBackupCustomEndpoint { get; private set; } = null!; @@ -850,6 +853,9 @@ public InputMap DefaultLabels [Input("firestoreCustomEndpoint")] public Input? FirestoreCustomEndpoint { get; set; } + [Input("geminiCustomEndpoint")] + public Input? GeminiCustomEndpoint { get; set; } + [Input("gkeBackupCustomEndpoint")] public Input? GkeBackupCustomEndpoint { get; set; } diff --git a/sdk/dotnet/PubSub/Subscription.cs b/sdk/dotnet/PubSub/Subscription.cs index 0278b6f170..29f75cd76f 100644 --- a/sdk/dotnet/PubSub/Subscription.cs +++ b/sdk/dotnet/PubSub/Subscription.cs @@ -400,7 +400,7 @@ namespace Pulumi.Gcp.PubSub /// { /// Bucket = example.Name, /// FilenamePrefix = "pre-", - /// FilenameSuffix = "-_40289", + /// FilenameSuffix = "-_33395", /// FilenameDatetimeFormat = "YYYY-MM-DD/hh_mm_ssZ", /// MaxBytes = 1000, /// MaxDuration = "300s", @@ -456,7 +456,7 @@ namespace Pulumi.Gcp.PubSub /// { /// Bucket = example.Name, /// FilenamePrefix = "pre-", - /// FilenameSuffix = "-_33395", + /// FilenameSuffix = "-_76044", /// FilenameDatetimeFormat = "YYYY-MM-DD/hh_mm_ssZ", /// MaxBytes = 1000, /// MaxDuration = "300s", @@ -521,7 +521,7 @@ namespace Pulumi.Gcp.PubSub /// { /// Bucket = example.Name, /// FilenamePrefix = "pre-", - /// FilenameSuffix = "-_76044", + /// FilenameSuffix = "-_69391", /// FilenameDatetimeFormat = "YYYY-MM-DD/hh_mm_ssZ", /// MaxBytes = 1000, /// MaxDuration = "300s", diff --git a/sdk/dotnet/Redis/Cluster.cs b/sdk/dotnet/Redis/Cluster.cs index 8064cc9a5b..f5ae11cec1 100644 --- a/sdk/dotnet/Redis/Cluster.cs +++ b/sdk/dotnet/Redis/Cluster.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.Redis { /// - /// A Google Cloud Redis Cluster instance. - /// - /// To get more information about Cluster, see: - /// - /// * [API documentation](https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/memorystore/docs/cluster/) - /// /// ## Example Usage /// /// ### Redis Cluster Ha @@ -197,6 +189,200 @@ namespace Pulumi.Gcp.Redis /// /// }); /// ``` + /// ### Redis Cluster Secondary + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var producerNet = new Gcp.Compute.Network("producer_net", new() + /// { + /// Name = "mynetwork", + /// AutoCreateSubnetworks = false, + /// }); + /// + /// var primaryClusterProducerSubnet = new Gcp.Compute.Subnetwork("primary_cluster_producer_subnet", new() + /// { + /// Name = "mysubnet-primary-cluster", + /// IpCidrRange = "10.0.1.0/29", + /// Region = "us-east1", + /// Network = producerNet.Id, + /// }); + /// + /// var primaryClusterRegionScp = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("primary_cluster_region_scp", new() + /// { + /// Name = "mypolicy-primary-cluster", + /// Location = "us-east1", + /// ServiceClass = "gcp-memorystore-redis", + /// Description = "Primary cluster service connection policy", + /// Network = producerNet.Id, + /// PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs + /// { + /// Subnetworks = new[] + /// { + /// primaryClusterProducerSubnet.Id, + /// }, + /// }, + /// }); + /// + /// // Primary cluster + /// var primaryCluster = new Gcp.Redis.Cluster("primary_cluster", new() + /// { + /// Name = "my-primary-cluster", + /// Region = "us-east1", + /// PscConfigs = new[] + /// { + /// new Gcp.Redis.Inputs.ClusterPscConfigArgs + /// { + /// Network = producerNet.Id, + /// }, + /// }, + /// AuthorizationMode = "AUTH_MODE_DISABLED", + /// TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_DISABLED", + /// ShardCount = 3, + /// RedisConfigs = + /// { + /// { "maxmemory-policy", "volatile-ttl" }, + /// }, + /// NodeType = "REDIS_HIGHMEM_MEDIUM", + /// PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs + /// { + /// Mode = "RDB", + /// RdbConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigRdbConfigArgs + /// { + /// RdbSnapshotPeriod = "ONE_HOUR", + /// RdbSnapshotStartTime = "2024-10-02T15:01:23Z", + /// }, + /// }, + /// ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs + /// { + /// Mode = "MULTI_ZONE", + /// }, + /// ReplicaCount = 1, + /// MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs + /// { + /// WeeklyMaintenanceWindows = new[] + /// { + /// new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs + /// { + /// Day = "MONDAY", + /// StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs + /// { + /// Hours = 1, + /// Minutes = 0, + /// Seconds = 0, + /// Nanos = 0, + /// }, + /// }, + /// }, + /// }, + /// DeletionProtectionEnabled = true, + /// }, new CustomResourceOptions + /// { + /// DependsOn = + /// { + /// primaryClusterRegionScp, + /// }, + /// }); + /// + /// var secondaryClusterProducerSubnet = new Gcp.Compute.Subnetwork("secondary_cluster_producer_subnet", new() + /// { + /// Name = "mysubnet-secondary-cluster", + /// IpCidrRange = "10.0.2.0/29", + /// Region = "europe-west1", + /// Network = producerNet.Id, + /// }); + /// + /// var secondaryClusterRegionScp = new Gcp.NetworkConnectivity.ServiceConnectionPolicy("secondary_cluster_region_scp", new() + /// { + /// Name = "mypolicy-secondary-cluster", + /// Location = "europe-west1", + /// ServiceClass = "gcp-memorystore-redis", + /// Description = "Secondary cluster service connection policy", + /// Network = producerNet.Id, + /// PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs + /// { + /// Subnetworks = new[] + /// { + /// secondaryClusterProducerSubnet.Id, + /// }, + /// }, + /// }); + /// + /// // Secondary cluster + /// var secondaryCluster = new Gcp.Redis.Cluster("secondary_cluster", new() + /// { + /// Name = "my-secondary-cluster", + /// Region = "europe-west1", + /// PscConfigs = new[] + /// { + /// new Gcp.Redis.Inputs.ClusterPscConfigArgs + /// { + /// Network = producerNet.Id, + /// }, + /// }, + /// AuthorizationMode = "AUTH_MODE_DISABLED", + /// TransitEncryptionMode = "TRANSIT_ENCRYPTION_MODE_DISABLED", + /// ShardCount = 3, + /// RedisConfigs = + /// { + /// { "maxmemory-policy", "volatile-ttl" }, + /// }, + /// NodeType = "REDIS_HIGHMEM_MEDIUM", + /// PersistenceConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigArgs + /// { + /// Mode = "RDB", + /// RdbConfig = new Gcp.Redis.Inputs.ClusterPersistenceConfigRdbConfigArgs + /// { + /// RdbSnapshotPeriod = "ONE_HOUR", + /// RdbSnapshotStartTime = "2024-10-02T15:01:23Z", + /// }, + /// }, + /// ZoneDistributionConfig = new Gcp.Redis.Inputs.ClusterZoneDistributionConfigArgs + /// { + /// Mode = "MULTI_ZONE", + /// }, + /// ReplicaCount = 2, + /// MaintenancePolicy = new Gcp.Redis.Inputs.ClusterMaintenancePolicyArgs + /// { + /// WeeklyMaintenanceWindows = new[] + /// { + /// new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs + /// { + /// Day = "WEDNESDAY", + /// StartTime = new Gcp.Redis.Inputs.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs + /// { + /// Hours = 1, + /// Minutes = 0, + /// Seconds = 0, + /// Nanos = 0, + /// }, + /// }, + /// }, + /// }, + /// DeletionProtectionEnabled = true, + /// CrossClusterReplicationConfig = new Gcp.Redis.Inputs.ClusterCrossClusterReplicationConfigArgs + /// { + /// ClusterRole = "SECONDARY", + /// PrimaryCluster = new Gcp.Redis.Inputs.ClusterCrossClusterReplicationConfigPrimaryClusterArgs + /// { + /// Cluster = primaryCluster.Id, + /// }, + /// }, + /// }, new CustomResourceOptions + /// { + /// DependsOn = + /// { + /// secondaryClusterRegionScp, + /// }, + /// }); + /// + /// }); + /// ``` /// ### Redis Cluster Rdb /// /// ```csharp @@ -448,6 +634,12 @@ public partial class Cluster : global::Pulumi.CustomResource [Output("createTime")] public Output CreateTime { get; private set; } = null!; + /// + /// Cross cluster replication config + /// + [Output("crossClusterReplicationConfig")] + public Output CrossClusterReplicationConfig { get; private set; } = null!; + /// /// Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster /// operation will fail. Default value is true. @@ -641,6 +833,12 @@ public sealed class ClusterArgs : global::Pulumi.ResourceArgs [Input("authorizationMode")] public Input? AuthorizationMode { get; set; } + /// + /// Cross cluster replication config + /// + [Input("crossClusterReplicationConfig")] + public Input? CrossClusterReplicationConfig { get; set; } + /// /// Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster /// operation will fail. Default value is true. @@ -762,6 +960,12 @@ public sealed class ClusterState : global::Pulumi.ResourceArgs [Input("createTime")] public Input? CreateTime { get; set; } + /// + /// Cross cluster replication config + /// + [Input("crossClusterReplicationConfig")] + public Input? CrossClusterReplicationConfig { get; set; } + /// /// Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster /// operation will fail. Default value is true. diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigArgs.cs new file mode 100644 index 0000000000..f70403ead7 --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigArgs.cs @@ -0,0 +1,72 @@ +// *** 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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// The role of the cluster in cross cluster replication. Supported values are: + /// 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + /// 1. `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. + /// 1. `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. + /// 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + /// Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + /// + [Input("clusterRole")] + public Input? ClusterRole { get; set; } + + [Input("memberships")] + private InputList? _memberships; + + /// + /// (Output) + /// An 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. + /// Structure is documented below. + /// + public InputList Memberships + { + get => _memberships ?? (_memberships = new InputList()); + set => _memberships = value; + } + + /// + /// 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`. + /// Structure is documented below. + /// + [Input("primaryCluster")] + public Input? PrimaryCluster { get; set; } + + [Input("secondaryClusters")] + private InputList? _secondaryClusters; + + /// + /// 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`. + /// Structure is documented below. + /// + public InputList SecondaryClusters + { + get => _secondaryClusters ?? (_secondaryClusters = new InputList()); + set => _secondaryClusters = value; + } + + /// + /// (Output) + /// The last time cross cluster replication config was updated. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public ClusterCrossClusterReplicationConfigArgs() + { + } + public static new ClusterCrossClusterReplicationConfigArgs Empty => new ClusterCrossClusterReplicationConfigArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigGetArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigGetArgs.cs new file mode 100644 index 0000000000..f528089f5e --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigGetArgs.cs @@ -0,0 +1,72 @@ +// *** 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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The role of the cluster in cross cluster replication. Supported values are: + /// 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + /// 1. `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. + /// 1. `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. + /// 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + /// Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + /// + [Input("clusterRole")] + public Input? ClusterRole { get; set; } + + [Input("memberships")] + private InputList? _memberships; + + /// + /// (Output) + /// An 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. + /// Structure is documented below. + /// + public InputList Memberships + { + get => _memberships ?? (_memberships = new InputList()); + set => _memberships = value; + } + + /// + /// 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`. + /// Structure is documented below. + /// + [Input("primaryCluster")] + public Input? PrimaryCluster { get; set; } + + [Input("secondaryClusters")] + private InputList? _secondaryClusters; + + /// + /// 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`. + /// Structure is documented below. + /// + public InputList SecondaryClusters + { + get => _secondaryClusters ?? (_secondaryClusters = new InputList()); + set => _secondaryClusters = value; + } + + /// + /// (Output) + /// The last time cross cluster replication config was updated. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public ClusterCrossClusterReplicationConfigGetArgs() + { + } + public static new ClusterCrossClusterReplicationConfigGetArgs Empty => new ClusterCrossClusterReplicationConfigGetArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipArgs.cs new file mode 100644 index 0000000000..68283df60d --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipArgs.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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigMembershipArgs : global::Pulumi.ResourceArgs + { + [Input("primaryClusters")] + private InputList? _primaryClusters; + + /// + /// Details of the primary cluster that is used as the replication source for all the secondary clusters. + /// + public InputList PrimaryClusters + { + get => _primaryClusters ?? (_primaryClusters = new InputList()); + set => _primaryClusters = value; + } + + [Input("secondaryClusters")] + private InputList? _secondaryClusters; + + /// + /// List of secondary clusters that are replicating from the primary cluster. + /// + public InputList SecondaryClusters + { + get => _secondaryClusters ?? (_secondaryClusters = new InputList()); + set => _secondaryClusters = value; + } + + public ClusterCrossClusterReplicationConfigMembershipArgs() + { + } + public static new ClusterCrossClusterReplicationConfigMembershipArgs Empty => new ClusterCrossClusterReplicationConfigMembershipArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipGetArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipGetArgs.cs new file mode 100644 index 0000000000..2d509760fa --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipGetArgs.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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigMembershipGetArgs : global::Pulumi.ResourceArgs + { + [Input("primaryClusters")] + private InputList? _primaryClusters; + + /// + /// Details of the primary cluster that is used as the replication source for all the secondary clusters. + /// + public InputList PrimaryClusters + { + get => _primaryClusters ?? (_primaryClusters = new InputList()); + set => _primaryClusters = value; + } + + [Input("secondaryClusters")] + private InputList? _secondaryClusters; + + /// + /// List of secondary clusters that are replicating from the primary cluster. + /// + public InputList SecondaryClusters + { + get => _secondaryClusters ?? (_secondaryClusters = new InputList()); + set => _secondaryClusters = value; + } + + public ClusterCrossClusterReplicationConfigMembershipGetArgs() + { + } + public static new ClusterCrossClusterReplicationConfigMembershipGetArgs Empty => new ClusterCrossClusterReplicationConfigMembershipGetArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs.cs new file mode 100644 index 0000000000..90ab170670 --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs.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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs : global::Pulumi.ResourceArgs + { + /// + /// The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + [Input("cluster")] + public Input? Cluster { get; set; } + + /// + /// (Output) + /// The unique id of the primary cluster. + /// + [Input("uid")] + public Input? Uid { get; set; } + + public ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs() + { + } + public static new ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs Empty => new ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipPrimaryClusterGetArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipPrimaryClusterGetArgs.cs new file mode 100644 index 0000000000..306e1fed0a --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipPrimaryClusterGetArgs.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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigMembershipPrimaryClusterGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + [Input("cluster")] + public Input? Cluster { get; set; } + + /// + /// (Output) + /// The unique id of the primary cluster. + /// + [Input("uid")] + public Input? Uid { get; set; } + + public ClusterCrossClusterReplicationConfigMembershipPrimaryClusterGetArgs() + { + } + public static new ClusterCrossClusterReplicationConfigMembershipPrimaryClusterGetArgs Empty => new ClusterCrossClusterReplicationConfigMembershipPrimaryClusterGetArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs.cs new file mode 100644 index 0000000000..ca28f3a38a --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs.cs @@ -0,0 +1,34 @@ +// *** 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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + [Input("cluster")] + public Input? Cluster { get; set; } + + /// + /// (Output) + /// The unique id of the secondary cluster. + /// + [Input("uid")] + public Input? Uid { get; set; } + + public ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs() + { + } + public static new ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs Empty => new ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipSecondaryClusterGetArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipSecondaryClusterGetArgs.cs new file mode 100644 index 0000000000..46fe79b62c --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigMembershipSecondaryClusterGetArgs.cs @@ -0,0 +1,34 @@ +// *** 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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigMembershipSecondaryClusterGetArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + [Input("cluster")] + public Input? Cluster { get; set; } + + /// + /// (Output) + /// The unique id of the secondary cluster. + /// + [Input("uid")] + public Input? Uid { get; set; } + + public ClusterCrossClusterReplicationConfigMembershipSecondaryClusterGetArgs() + { + } + public static new ClusterCrossClusterReplicationConfigMembershipSecondaryClusterGetArgs Empty => new ClusterCrossClusterReplicationConfigMembershipSecondaryClusterGetArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigPrimaryClusterArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigPrimaryClusterArgs.cs new file mode 100644 index 0000000000..5d881d336d --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigPrimaryClusterArgs.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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigPrimaryClusterArgs : global::Pulumi.ResourceArgs + { + /// + /// The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + [Input("cluster")] + public Input? Cluster { get; set; } + + /// + /// (Output) + /// The unique id of the primary cluster. + /// + [Input("uid")] + public Input? Uid { get; set; } + + public ClusterCrossClusterReplicationConfigPrimaryClusterArgs() + { + } + public static new ClusterCrossClusterReplicationConfigPrimaryClusterArgs Empty => new ClusterCrossClusterReplicationConfigPrimaryClusterArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigPrimaryClusterGetArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigPrimaryClusterGetArgs.cs new file mode 100644 index 0000000000..0599fc741e --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigPrimaryClusterGetArgs.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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigPrimaryClusterGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + [Input("cluster")] + public Input? Cluster { get; set; } + + /// + /// (Output) + /// The unique id of the primary cluster. + /// + [Input("uid")] + public Input? Uid { get; set; } + + public ClusterCrossClusterReplicationConfigPrimaryClusterGetArgs() + { + } + public static new ClusterCrossClusterReplicationConfigPrimaryClusterGetArgs Empty => new ClusterCrossClusterReplicationConfigPrimaryClusterGetArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigSecondaryClusterArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigSecondaryClusterArgs.cs new file mode 100644 index 0000000000..3312899064 --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigSecondaryClusterArgs.cs @@ -0,0 +1,34 @@ +// *** 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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigSecondaryClusterArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + [Input("cluster")] + public Input? Cluster { get; set; } + + /// + /// (Output) + /// The unique id of the secondary cluster. + /// + [Input("uid")] + public Input? Uid { get; set; } + + public ClusterCrossClusterReplicationConfigSecondaryClusterArgs() + { + } + public static new ClusterCrossClusterReplicationConfigSecondaryClusterArgs Empty => new ClusterCrossClusterReplicationConfigSecondaryClusterArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigSecondaryClusterGetArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigSecondaryClusterGetArgs.cs new file mode 100644 index 0000000000..ed78cbf1f4 --- /dev/null +++ b/sdk/dotnet/Redis/Inputs/ClusterCrossClusterReplicationConfigSecondaryClusterGetArgs.cs @@ -0,0 +1,34 @@ +// *** 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.Redis.Inputs +{ + + public sealed class ClusterCrossClusterReplicationConfigSecondaryClusterGetArgs : global::Pulumi.ResourceArgs + { + /// + /// (Output) + /// The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + [Input("cluster")] + public Input? Cluster { get; set; } + + /// + /// (Output) + /// The unique id of the secondary cluster. + /// + [Input("uid")] + public Input? Uid { get; set; } + + public ClusterCrossClusterReplicationConfigSecondaryClusterGetArgs() + { + } + public static new ClusterCrossClusterReplicationConfigSecondaryClusterGetArgs Empty => new ClusterCrossClusterReplicationConfigSecondaryClusterGetArgs(); + } +} diff --git a/sdk/dotnet/Redis/Inputs/ClusterPersistenceConfigAofConfigArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterPersistenceConfigAofConfigArgs.cs index 6b2ead2100..978e0b0908 100644 --- a/sdk/dotnet/Redis/Inputs/ClusterPersistenceConfigAofConfigArgs.cs +++ b/sdk/dotnet/Redis/Inputs/ClusterPersistenceConfigAofConfigArgs.cs @@ -14,7 +14,7 @@ public sealed class ClusterPersistenceConfigAofConfigArgs : global::Pulumi.Resou { /// /// Optional. Available fsync modes. - /// - NO - Do not explicilty call fsync(). Rely on OS defaults. + /// - NO - Do not explicitly call fsync(). Rely on OS defaults. /// - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. /// - ALWAYS - Call fsync() for earch write command. /// Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. diff --git a/sdk/dotnet/Redis/Inputs/ClusterPersistenceConfigAofConfigGetArgs.cs b/sdk/dotnet/Redis/Inputs/ClusterPersistenceConfigAofConfigGetArgs.cs index f1d11fb68c..5083bd4261 100644 --- a/sdk/dotnet/Redis/Inputs/ClusterPersistenceConfigAofConfigGetArgs.cs +++ b/sdk/dotnet/Redis/Inputs/ClusterPersistenceConfigAofConfigGetArgs.cs @@ -14,7 +14,7 @@ public sealed class ClusterPersistenceConfigAofConfigGetArgs : global::Pulumi.Re { /// /// Optional. Available fsync modes. - /// - NO - Do not explicilty call fsync(). Rely on OS defaults. + /// - NO - Do not explicitly call fsync(). Rely on OS defaults. /// - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. /// - ALWAYS - Call fsync() for earch write command. /// Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. diff --git a/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfig.cs b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfig.cs new file mode 100644 index 0000000000..bf74044d86 --- /dev/null +++ b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfig.cs @@ -0,0 +1,66 @@ +// *** 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.Redis.Outputs +{ + + [OutputType] + public sealed class ClusterCrossClusterReplicationConfig + { + /// + /// The role of the cluster in cross cluster replication. Supported values are: + /// 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + /// 1. `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. + /// 1. `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. + /// 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + /// Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + /// + public readonly string? ClusterRole; + /// + /// (Output) + /// An 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. + /// Structure is documented below. + /// + public readonly ImmutableArray Memberships; + /// + /// 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`. + /// Structure is documented below. + /// + public readonly Outputs.ClusterCrossClusterReplicationConfigPrimaryCluster? PrimaryCluster; + /// + /// 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`. + /// Structure is documented below. + /// + public readonly ImmutableArray SecondaryClusters; + /// + /// (Output) + /// The last time cross cluster replication config was updated. + /// + public readonly string? UpdateTime; + + [OutputConstructor] + private ClusterCrossClusterReplicationConfig( + string? clusterRole, + + ImmutableArray memberships, + + Outputs.ClusterCrossClusterReplicationConfigPrimaryCluster? primaryCluster, + + ImmutableArray secondaryClusters, + + string? updateTime) + { + ClusterRole = clusterRole; + Memberships = memberships; + PrimaryCluster = primaryCluster; + SecondaryClusters = secondaryClusters; + UpdateTime = updateTime; + } + } +} diff --git a/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigMembership.cs b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigMembership.cs new file mode 100644 index 0000000000..e03d4aa29c --- /dev/null +++ b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigMembership.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.Redis.Outputs +{ + + [OutputType] + public sealed class ClusterCrossClusterReplicationConfigMembership + { + /// + /// Details of the primary cluster that is used as the replication source for all the secondary clusters. + /// + public readonly ImmutableArray PrimaryClusters; + /// + /// List of secondary clusters that are replicating from the primary cluster. + /// + public readonly ImmutableArray SecondaryClusters; + + [OutputConstructor] + private ClusterCrossClusterReplicationConfigMembership( + ImmutableArray primaryClusters, + + ImmutableArray secondaryClusters) + { + PrimaryClusters = primaryClusters; + SecondaryClusters = secondaryClusters; + } + } +} diff --git a/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigMembershipPrimaryCluster.cs b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigMembershipPrimaryCluster.cs new file mode 100644 index 0000000000..4a263b89be --- /dev/null +++ b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigMembershipPrimaryCluster.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.Redis.Outputs +{ + + [OutputType] + public sealed class ClusterCrossClusterReplicationConfigMembershipPrimaryCluster + { + /// + /// The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + public readonly string? Cluster; + /// + /// (Output) + /// The unique id of the primary cluster. + /// + public readonly string? Uid; + + [OutputConstructor] + private ClusterCrossClusterReplicationConfigMembershipPrimaryCluster( + string? cluster, + + string? uid) + { + Cluster = cluster; + Uid = uid; + } + } +} diff --git a/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigMembershipSecondaryCluster.cs b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigMembershipSecondaryCluster.cs new file mode 100644 index 0000000000..d2ba859554 --- /dev/null +++ b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigMembershipSecondaryCluster.cs @@ -0,0 +1,37 @@ +// *** 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.Redis.Outputs +{ + + [OutputType] + public sealed class ClusterCrossClusterReplicationConfigMembershipSecondaryCluster + { + /// + /// (Output) + /// The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + public readonly string? Cluster; + /// + /// (Output) + /// The unique id of the secondary cluster. + /// + public readonly string? Uid; + + [OutputConstructor] + private ClusterCrossClusterReplicationConfigMembershipSecondaryCluster( + string? cluster, + + string? uid) + { + Cluster = cluster; + Uid = uid; + } + } +} diff --git a/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigPrimaryCluster.cs b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigPrimaryCluster.cs new file mode 100644 index 0000000000..29bb3349ff --- /dev/null +++ b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigPrimaryCluster.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.Redis.Outputs +{ + + [OutputType] + public sealed class ClusterCrossClusterReplicationConfigPrimaryCluster + { + /// + /// The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + public readonly string? Cluster; + /// + /// (Output) + /// The unique id of the primary cluster. + /// + public readonly string? Uid; + + [OutputConstructor] + private ClusterCrossClusterReplicationConfigPrimaryCluster( + string? cluster, + + string? uid) + { + Cluster = cluster; + Uid = uid; + } + } +} diff --git a/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigSecondaryCluster.cs b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigSecondaryCluster.cs new file mode 100644 index 0000000000..3e1eba5ed7 --- /dev/null +++ b/sdk/dotnet/Redis/Outputs/ClusterCrossClusterReplicationConfigSecondaryCluster.cs @@ -0,0 +1,37 @@ +// *** 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.Redis.Outputs +{ + + [OutputType] + public sealed class ClusterCrossClusterReplicationConfigSecondaryCluster + { + /// + /// (Output) + /// The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + /// + public readonly string? Cluster; + /// + /// (Output) + /// The unique id of the secondary cluster. + /// + public readonly string? Uid; + + [OutputConstructor] + private ClusterCrossClusterReplicationConfigSecondaryCluster( + string? cluster, + + string? uid) + { + Cluster = cluster; + Uid = uid; + } + } +} diff --git a/sdk/dotnet/Redis/Outputs/ClusterPersistenceConfigAofConfig.cs b/sdk/dotnet/Redis/Outputs/ClusterPersistenceConfigAofConfig.cs index 76f08f73b6..6cd9ba4c69 100644 --- a/sdk/dotnet/Redis/Outputs/ClusterPersistenceConfigAofConfig.cs +++ b/sdk/dotnet/Redis/Outputs/ClusterPersistenceConfigAofConfig.cs @@ -15,7 +15,7 @@ public sealed class ClusterPersistenceConfigAofConfig { /// /// Optional. Available fsync modes. - /// - NO - Do not explicilty call fsync(). Rely on OS defaults. + /// - NO - Do not explicitly call fsync(). Rely on OS defaults. /// - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. /// - ALWAYS - Call fsync() for earch write command. /// Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. diff --git a/sdk/dotnet/ServiceAccount/GetAccountIdToken.cs b/sdk/dotnet/ServiceAccount/GetAccountIdToken.cs index 5aefaad5c6..202b406a1c 100644 --- a/sdk/dotnet/ServiceAccount/GetAccountIdToken.cs +++ b/sdk/dotnet/ServiceAccount/GetAccountIdToken.cs @@ -43,7 +43,7 @@ public static class GetAccountIdToken /// ``` /// /// ### Service Account Impersonation. - /// `gcp.serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. + /// `gcp.serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. /// /// Note: to use the following, you must grant `target_service_account` the /// `roles/iam.serviceAccountTokenCreator` role on itself. @@ -152,7 +152,7 @@ public static Task InvokeAsync(GetAccountIdTokenArgs ar /// ``` /// /// ### Service Account Impersonation. - /// `gcp.serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. + /// `gcp.serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. /// /// Note: to use the following, you must grant `target_service_account` the /// `roles/iam.serviceAccountTokenCreator` role on itself. diff --git a/sdk/dotnet/ServiceAccount/GetAccountKey.cs b/sdk/dotnet/ServiceAccount/GetAccountKey.cs index ed4648152d..65d05b248b 100644 --- a/sdk/dotnet/ServiceAccount/GetAccountKey.cs +++ b/sdk/dotnet/ServiceAccount/GetAccountKey.cs @@ -94,7 +94,7 @@ public sealed class GetAccountKeyArgs : global::Pulumi.InvokeArgs public string Name { get; set; } = null!; /// - /// The ID of the project that the service account will be created in. + /// The ID of the project that the service account is present in. /// Defaults to the provider project configuration. /// [Input("project")] @@ -123,7 +123,7 @@ public sealed class GetAccountKeyInvokeArgs : global::Pulumi.InvokeArgs public Input Name { get; set; } = null!; /// - /// The ID of the project that the service account will be created in. + /// The ID of the project that the service account is present in. /// Defaults to the provider project configuration. /// [Input("project")] diff --git a/sdk/dotnet/Storage/GetBucket.cs b/sdk/dotnet/Storage/GetBucket.cs index 1b2fc5fe5a..9a749d1704 100644 --- a/sdk/dotnet/Storage/GetBucket.cs +++ b/sdk/dotnet/Storage/GetBucket.cs @@ -78,7 +78,7 @@ public sealed class GetBucketArgs : global::Pulumi.InvokeArgs public string Name { get; set; } = null!; /// - /// 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. + /// 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. /// [Input("project")] public string? Project { get; set; } @@ -98,7 +98,7 @@ public sealed class GetBucketInvokeArgs : global::Pulumi.InvokeArgs public Input Name { get; set; } = null!; /// - /// 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. + /// 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. /// [Input("project")] public Input? Project { get; set; } diff --git a/sdk/dotnet/Storage/GetBucketObjectContent.cs b/sdk/dotnet/Storage/GetBucketObjectContent.cs index 86644fe278..a85fced06d 100644 --- a/sdk/dotnet/Storage/GetBucketObjectContent.cs +++ b/sdk/dotnet/Storage/GetBucketObjectContent.cs @@ -17,7 +17,7 @@ public static class GetBucketObjectContent /// and /// [API](https://cloud.google.com/storage/docs/json_api/v1/objects). /// - /// > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + /// > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. /// /// ## Example Usage /// @@ -53,7 +53,7 @@ public static Task InvokeAsync(GetBucketObjectCont /// and /// [API](https://cloud.google.com/storage/docs/json_api/v1/objects). /// - /// > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + /// > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. /// /// ## Example Usage /// diff --git a/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuArgs.cs b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuArgs.cs new file mode 100644 index 0000000000..874876045b --- /dev/null +++ b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuArgs.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.Tpu.Inputs +{ + + public sealed class V2QueuedResourceTpuArgs : global::Pulumi.ResourceArgs + { + [Input("nodeSpecs")] + private InputList? _nodeSpecs; + + /// + /// The TPU node(s) being requested. + /// Structure is documented below. + /// + public InputList NodeSpecs + { + get => _nodeSpecs ?? (_nodeSpecs = new InputList()); + set => _nodeSpecs = value; + } + + public V2QueuedResourceTpuArgs() + { + } + public static new V2QueuedResourceTpuArgs Empty => new V2QueuedResourceTpuArgs(); + } +} diff --git a/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuGetArgs.cs b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuGetArgs.cs new file mode 100644 index 0000000000..90754f477e --- /dev/null +++ b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuGetArgs.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.Tpu.Inputs +{ + + public sealed class V2QueuedResourceTpuGetArgs : global::Pulumi.ResourceArgs + { + [Input("nodeSpecs")] + private InputList? _nodeSpecs; + + /// + /// The TPU node(s) being requested. + /// Structure is documented below. + /// + public InputList NodeSpecs + { + get => _nodeSpecs ?? (_nodeSpecs = new InputList()); + set => _nodeSpecs = value; + } + + public V2QueuedResourceTpuGetArgs() + { + } + public static new V2QueuedResourceTpuGetArgs Empty => new V2QueuedResourceTpuGetArgs(); + } +} diff --git a/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecArgs.cs b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecArgs.cs new file mode 100644 index 0000000000..43d7079de1 --- /dev/null +++ b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecArgs.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.Tpu.Inputs +{ + + public sealed class V2QueuedResourceTpuNodeSpecArgs : global::Pulumi.ResourceArgs + { + /// + /// The node. + /// Structure is documented below. + /// + [Input("node", required: true)] + public Input Node { get; set; } = null!; + + /// + /// Unqualified node identifier used to identify the node in the project once provisioned. + /// + [Input("nodeId")] + public Input? NodeId { get; set; } + + /// + /// The parent resource name. + /// + [Input("parent", required: true)] + public Input Parent { get; set; } = null!; + + public V2QueuedResourceTpuNodeSpecArgs() + { + } + public static new V2QueuedResourceTpuNodeSpecArgs Empty => new V2QueuedResourceTpuNodeSpecArgs(); + } +} diff --git a/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecGetArgs.cs b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecGetArgs.cs new file mode 100644 index 0000000000..d621155e68 --- /dev/null +++ b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecGetArgs.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.Tpu.Inputs +{ + + public sealed class V2QueuedResourceTpuNodeSpecGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The node. + /// Structure is documented below. + /// + [Input("node", required: true)] + public Input Node { get; set; } = null!; + + /// + /// Unqualified node identifier used to identify the node in the project once provisioned. + /// + [Input("nodeId")] + public Input? NodeId { get; set; } + + /// + /// The parent resource name. + /// + [Input("parent", required: true)] + public Input Parent { get; set; } = null!; + + public V2QueuedResourceTpuNodeSpecGetArgs() + { + } + public static new V2QueuedResourceTpuNodeSpecGetArgs Empty => new V2QueuedResourceTpuNodeSpecGetArgs(); + } +} diff --git a/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecNodeArgs.cs b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecNodeArgs.cs new file mode 100644 index 0000000000..936b6287dc --- /dev/null +++ b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecNodeArgs.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.Tpu.Inputs +{ + + public sealed class V2QueuedResourceTpuNodeSpecNodeArgs : global::Pulumi.ResourceArgs + { + /// + /// TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + /// + [Input("acceleratorType")] + public Input? AcceleratorType { get; set; } + + /// + /// Text description of the TPU. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Runtime version for the TPU. + /// + [Input("runtimeVersion", required: true)] + public Input RuntimeVersion { get; set; } = null!; + + public V2QueuedResourceTpuNodeSpecNodeArgs() + { + } + public static new V2QueuedResourceTpuNodeSpecNodeArgs Empty => new V2QueuedResourceTpuNodeSpecNodeArgs(); + } +} diff --git a/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecNodeGetArgs.cs b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecNodeGetArgs.cs new file mode 100644 index 0000000000..fa0adbb21d --- /dev/null +++ b/sdk/dotnet/Tpu/Inputs/V2QueuedResourceTpuNodeSpecNodeGetArgs.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.Tpu.Inputs +{ + + public sealed class V2QueuedResourceTpuNodeSpecNodeGetArgs : global::Pulumi.ResourceArgs + { + /// + /// TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + /// + [Input("acceleratorType")] + public Input? AcceleratorType { get; set; } + + /// + /// Text description of the TPU. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Runtime version for the TPU. + /// + [Input("runtimeVersion", required: true)] + public Input RuntimeVersion { get; set; } = null!; + + public V2QueuedResourceTpuNodeSpecNodeGetArgs() + { + } + public static new V2QueuedResourceTpuNodeSpecNodeGetArgs Empty => new V2QueuedResourceTpuNodeSpecNodeGetArgs(); + } +} diff --git a/sdk/dotnet/Tpu/Inputs/V2VmAcceleratorConfigArgs.cs b/sdk/dotnet/Tpu/Inputs/V2VmAcceleratorConfigArgs.cs index 80ac389156..a9ad2970f4 100644 --- a/sdk/dotnet/Tpu/Inputs/V2VmAcceleratorConfigArgs.cs +++ b/sdk/dotnet/Tpu/Inputs/V2VmAcceleratorConfigArgs.cs @@ -19,8 +19,7 @@ public sealed class V2VmAcceleratorConfigArgs : global::Pulumi.ResourceArgs public Input Topology { get; set; } = null!; /// - /// Type of TPU. - /// Possible values are: `V2`, `V3`, `V4`, `V5P`. + /// Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type /// [Input("type", required: true)] public Input Type { get; set; } = null!; diff --git a/sdk/dotnet/Tpu/Inputs/V2VmAcceleratorConfigGetArgs.cs b/sdk/dotnet/Tpu/Inputs/V2VmAcceleratorConfigGetArgs.cs index 60e2ae7615..7685a47bf8 100644 --- a/sdk/dotnet/Tpu/Inputs/V2VmAcceleratorConfigGetArgs.cs +++ b/sdk/dotnet/Tpu/Inputs/V2VmAcceleratorConfigGetArgs.cs @@ -19,8 +19,7 @@ public sealed class V2VmAcceleratorConfigGetArgs : global::Pulumi.ResourceArgs public Input Topology { get; set; } = null!; /// - /// Type of TPU. - /// Possible values are: `V2`, `V3`, `V4`, `V5P`. + /// Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type /// [Input("type", required: true)] public Input Type { get; set; } = null!; diff --git a/sdk/dotnet/Tpu/Outputs/V2QueuedResourceTpu.cs b/sdk/dotnet/Tpu/Outputs/V2QueuedResourceTpu.cs new file mode 100644 index 0000000000..364fbc3ac3 --- /dev/null +++ b/sdk/dotnet/Tpu/Outputs/V2QueuedResourceTpu.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.Tpu.Outputs +{ + + [OutputType] + public sealed class V2QueuedResourceTpu + { + /// + /// The TPU node(s) being requested. + /// Structure is documented below. + /// + public readonly ImmutableArray NodeSpecs; + + [OutputConstructor] + private V2QueuedResourceTpu(ImmutableArray nodeSpecs) + { + NodeSpecs = nodeSpecs; + } + } +} diff --git a/sdk/dotnet/Tpu/Outputs/V2QueuedResourceTpuNodeSpec.cs b/sdk/dotnet/Tpu/Outputs/V2QueuedResourceTpuNodeSpec.cs new file mode 100644 index 0000000000..c856aba08b --- /dev/null +++ b/sdk/dotnet/Tpu/Outputs/V2QueuedResourceTpuNodeSpec.cs @@ -0,0 +1,43 @@ +// *** 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.Tpu.Outputs +{ + + [OutputType] + public sealed class V2QueuedResourceTpuNodeSpec + { + /// + /// The node. + /// Structure is documented below. + /// + public readonly Outputs.V2QueuedResourceTpuNodeSpecNode Node; + /// + /// Unqualified node identifier used to identify the node in the project once provisioned. + /// + public readonly string? NodeId; + /// + /// The parent resource name. + /// + public readonly string Parent; + + [OutputConstructor] + private V2QueuedResourceTpuNodeSpec( + Outputs.V2QueuedResourceTpuNodeSpecNode node, + + string? nodeId, + + string parent) + { + Node = node; + NodeId = nodeId; + Parent = parent; + } + } +} diff --git a/sdk/dotnet/Tpu/Outputs/V2QueuedResourceTpuNodeSpecNode.cs b/sdk/dotnet/Tpu/Outputs/V2QueuedResourceTpuNodeSpecNode.cs new file mode 100644 index 0000000000..c39667c6b0 --- /dev/null +++ b/sdk/dotnet/Tpu/Outputs/V2QueuedResourceTpuNodeSpecNode.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.Tpu.Outputs +{ + + [OutputType] + public sealed class V2QueuedResourceTpuNodeSpecNode + { + /// + /// TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + /// + public readonly string? AcceleratorType; + /// + /// Text description of the TPU. + /// + public readonly string? Description; + /// + /// Runtime version for the TPU. + /// + public readonly string RuntimeVersion; + + [OutputConstructor] + private V2QueuedResourceTpuNodeSpecNode( + string? acceleratorType, + + string? description, + + string runtimeVersion) + { + AcceleratorType = acceleratorType; + Description = description; + RuntimeVersion = runtimeVersion; + } + } +} diff --git a/sdk/dotnet/Tpu/Outputs/V2VmAcceleratorConfig.cs b/sdk/dotnet/Tpu/Outputs/V2VmAcceleratorConfig.cs index 1648e062ab..dcde76dc6f 100644 --- a/sdk/dotnet/Tpu/Outputs/V2VmAcceleratorConfig.cs +++ b/sdk/dotnet/Tpu/Outputs/V2VmAcceleratorConfig.cs @@ -18,8 +18,7 @@ public sealed class V2VmAcceleratorConfig /// public readonly string Topology; /// - /// Type of TPU. - /// Possible values are: `V2`, `V3`, `V4`, `V5P`. + /// Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type /// public readonly string Type; diff --git a/sdk/dotnet/Tpu/V2QueuedResource.cs b/sdk/dotnet/Tpu/V2QueuedResource.cs new file mode 100644 index 0000000000..d83301700f --- /dev/null +++ b/sdk/dotnet/Tpu/V2QueuedResource.cs @@ -0,0 +1,231 @@ +// *** 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.Tpu +{ + /// + /// ## Example Usage + /// + /// ### Tpu V2 Queued Resource Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var qr = new Gcp.Tpu.V2QueuedResource("qr", new() + /// { + /// Name = "test-qr", + /// Zone = "us-central1-c", + /// Project = "my-project-name", + /// Tpu = new Gcp.Tpu.Inputs.V2QueuedResourceTpuArgs + /// { + /// NodeSpecs = new[] + /// { + /// new Gcp.Tpu.Inputs.V2QueuedResourceTpuNodeSpecArgs + /// { + /// Parent = "projects/my-project-name/locations/us-central1-c", + /// NodeId = "test-tpu", + /// Node = new Gcp.Tpu.Inputs.V2QueuedResourceTpuNodeSpecNodeArgs + /// { + /// RuntimeVersion = "tpu-vm-tf-2.13.0", + /// AcceleratorType = "v2-8", + /// Description = "Text description of the TPU.", + /// }, + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// QueuedResource can be imported using any of these accepted formats: + /// + /// * `projects/{{project}}/locations/{{zone}}/queuedResources/{{name}}` + /// + /// * `{{project}}/{{zone}}/{{name}}` + /// + /// * `{{zone}}/{{name}}` + /// + /// * `{{name}}` + /// + /// When using the `pulumi import` command, QueuedResource can be imported using one of the formats above. For example: + /// + /// ```sh + /// $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default projects/{{project}}/locations/{{zone}}/queuedResources/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{project}}/{{zone}}/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{zone}}/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{name}} + /// ``` + /// + [GcpResourceType("gcp:tpu/v2QueuedResource:V2QueuedResource")] + public partial class V2QueuedResource : global::Pulumi.CustomResource + { + /// + /// The immutable name of the Queued Resource. + /// + /// + /// - - - + /// + [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!; + + /// + /// Defines a TPU resource. + /// Structure is documented below. + /// + [Output("tpu")] + public Output Tpu { get; private set; } = null!; + + /// + /// The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + /// + [Output("zone")] + public Output Zone { get; private set; } = null!; + + + /// + /// Create a V2QueuedResource 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 V2QueuedResource(string name, V2QueuedResourceArgs? args = null, CustomResourceOptions? options = null) + : base("gcp:tpu/v2QueuedResource:V2QueuedResource", name, args ?? new V2QueuedResourceArgs(), MakeResourceOptions(options, "")) + { + } + + private V2QueuedResource(string name, Input id, V2QueuedResourceState? state = null, CustomResourceOptions? options = null) + : base("gcp:tpu/v2QueuedResource:V2QueuedResource", 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 V2QueuedResource 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 V2QueuedResource Get(string name, Input id, V2QueuedResourceState? state = null, CustomResourceOptions? options = null) + { + return new V2QueuedResource(name, id, state, options); + } + } + + public sealed class V2QueuedResourceArgs : global::Pulumi.ResourceArgs + { + /// + /// The immutable name of the Queued Resource. + /// + /// + /// - - - + /// + [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; } + + /// + /// Defines a TPU resource. + /// Structure is documented below. + /// + [Input("tpu")] + public Input? Tpu { get; set; } + + /// + /// The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + /// + [Input("zone")] + public Input? Zone { get; set; } + + public V2QueuedResourceArgs() + { + } + public static new V2QueuedResourceArgs Empty => new V2QueuedResourceArgs(); + } + + public sealed class V2QueuedResourceState : global::Pulumi.ResourceArgs + { + /// + /// The immutable name of the Queued Resource. + /// + /// + /// - - - + /// + [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; } + + /// + /// Defines a TPU resource. + /// Structure is documented below. + /// + [Input("tpu")] + public Input? Tpu { get; set; } + + /// + /// The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + /// + [Input("zone")] + public Input? Zone { get; set; } + + public V2QueuedResourceState() + { + } + public static new V2QueuedResourceState Empty => new V2QueuedResourceState(); + } +} diff --git a/sdk/dotnet/Vertex/AiEndpoint.cs b/sdk/dotnet/Vertex/AiEndpoint.cs index 906fe01cb0..96d2279dd6 100644 --- a/sdk/dotnet/Vertex/AiEndpoint.cs +++ b/sdk/dotnet/Vertex/AiEndpoint.cs @@ -136,7 +136,7 @@ namespace Pulumi.Gcp.Vertex /// /// var endpoint = new Gcp.Vertex.AiEndpoint("endpoint", new() /// { - /// Name = "endpoint-name_69391", + /// Name = "endpoint-name_8270", /// DisplayName = "sample-endpoint", /// Description = "A sample vertex endpoint", /// Location = "us-central1", @@ -170,7 +170,7 @@ namespace Pulumi.Gcp.Vertex /// { /// var endpoint = new Gcp.Vertex.AiEndpoint("endpoint", new() /// { - /// Name = "endpoint-name_8270", + /// Name = "endpoint-name_41150", /// DisplayName = "sample-endpoint", /// Description = "A sample vertex endpoint", /// Location = "us-central1", diff --git a/sdk/dotnet/Vertex/AiFeatureOnlineStoreFeatureview.cs b/sdk/dotnet/Vertex/AiFeatureOnlineStoreFeatureview.cs index 8d069a180a..781d80697d 100644 --- a/sdk/dotnet/Vertex/AiFeatureOnlineStoreFeatureview.cs +++ b/sdk/dotnet/Vertex/AiFeatureOnlineStoreFeatureview.cs @@ -258,8 +258,8 @@ namespace Pulumi.Gcp.Vertex /// /// var project = new Gcp.Organizations.Project("project", new() /// { - /// ProjectId = "tf-test_41150", - /// Name = "tf-test_89313", + /// ProjectId = "tf-test_89313", + /// Name = "tf-test_60646", /// OrgId = "123456789", /// BillingAccount = "000000-0000000-0000000-000000", /// DeletionPolicy = "DELETE", diff --git a/sdk/dotnet/Vertex/AiIndexEndpoint.cs b/sdk/dotnet/Vertex/AiIndexEndpoint.cs index b4ec803757..9c40191a0d 100644 --- a/sdk/dotnet/Vertex/AiIndexEndpoint.cs +++ b/sdk/dotnet/Vertex/AiIndexEndpoint.cs @@ -105,7 +105,7 @@ namespace Pulumi.Gcp.Vertex /// EnablePrivateServiceConnect = true, /// ProjectAllowlists = new[] /// { - /// project.Apply(getProjectResult => getProjectResult.Number), + /// project.Apply(getProjectResult => getProjectResult.Name), /// }, /// }, /// }); diff --git a/sdk/go/gcp/accesscontextmanager/pulumiTypes.go b/sdk/go/gcp/accesscontextmanager/pulumiTypes.go index 026266e9ce..417cd60ce2 100644 --- a/sdk/go/gcp/accesscontextmanager/pulumiTypes.go +++ b/sdk/go/gcp/accesscontextmanager/pulumiTypes.go @@ -11603,6 +11603,11 @@ type ServicePerimetersServicePerimeter struct { // Description of the ServicePerimeter and its use. Does not affect // behavior. Description *string `pulumi:"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. + Etag *string `pulumi:"etag"` // Resource name for the ServicePerimeter. The shortName component must // begin with a letter and only include alphanumeric and '_'. // Format: accessPolicies/{policy_id}/servicePerimeters/{short_name} @@ -11670,6 +11675,11 @@ type ServicePerimetersServicePerimeterArgs struct { // Description of the ServicePerimeter and its use. Does not affect // behavior. Description pulumi.StringPtrInput `pulumi:"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. + Etag pulumi.StringPtrInput `pulumi:"etag"` // Resource name for the ServicePerimeter. The shortName component must // begin with a letter and only include alphanumeric and '_'. // Format: accessPolicies/{policy_id}/servicePerimeters/{short_name} @@ -11782,6 +11792,14 @@ func (o ServicePerimetersServicePerimeterOutput) Description() pulumi.StringPtrO return o.ApplyT(func(v ServicePerimetersServicePerimeter) *string { return v.Description }).(pulumi.StringPtrOutput) } +// (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. +func (o ServicePerimetersServicePerimeterOutput) Etag() pulumi.StringPtrOutput { + return o.ApplyT(func(v ServicePerimetersServicePerimeter) *string { return v.Etag }).(pulumi.StringPtrOutput) +} + // Resource name for the ServicePerimeter. The shortName component must // begin with a letter and only include alphanumeric and '_'. // Format: accessPolicies/{policy_id}/servicePerimeters/{short_name} diff --git a/sdk/go/gcp/accesscontextmanager/servicePerimeter.go b/sdk/go/gcp/accesscontextmanager/servicePerimeter.go index 66e425b0b3..2fcdb34ec6 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeter.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeter.go @@ -354,6 +354,10 @@ type ServicePerimeter struct { // Description of the ServicePerimeter and its use. Does not affect // behavior. Description pulumi.StringPtrOutput `pulumi:"description"` + // 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. + Etag pulumi.StringOutput `pulumi:"etag"` // Resource name for the ServicePerimeter. The shortName component must // begin with a letter and only include alphanumeric and '_'. // Format: accessPolicies/{policy_id}/servicePerimeters/{short_name} @@ -448,6 +452,10 @@ type servicePerimeterState struct { // Description of the ServicePerimeter and its use. Does not affect // behavior. Description *string `pulumi:"description"` + // 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. + Etag *string `pulumi:"etag"` // Resource name for the ServicePerimeter. The shortName component must // begin with a letter and only include alphanumeric and '_'. // Format: accessPolicies/{policy_id}/servicePerimeters/{short_name} @@ -507,6 +515,10 @@ type ServicePerimeterState struct { // Description of the ServicePerimeter and its use. Does not affect // behavior. Description pulumi.StringPtrInput + // 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. + Etag pulumi.StringPtrInput // Resource name for the ServicePerimeter. The shortName component must // begin with a letter and only include alphanumeric and '_'. // Format: accessPolicies/{policy_id}/servicePerimeters/{short_name} @@ -773,6 +785,13 @@ func (o ServicePerimeterOutput) Description() pulumi.StringPtrOutput { return o.ApplyT(func(v *ServicePerimeter) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) } +// 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. +func (o ServicePerimeterOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *ServicePerimeter) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + // Resource name for the ServicePerimeter. The shortName component must // begin with a letter and only include alphanumeric and '_'. // Format: accessPolicies/{policy_id}/servicePerimeters/{short_name} diff --git a/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunEgressPolicy.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunEgressPolicy.go index 72cebc0190..738fe55636 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunEgressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunEgressPolicy.go @@ -24,6 +24,9 @@ import ( // > **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 `createBeforeDestroy = true` to this resource. +// **Note:** If this resource is used alongside a `accesscontextmanager.ServicePerimeter` resource, +// the service perimeter resource must have a `lifecycle` block with `ignoreChanges = [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/go/gcp/accesscontextmanager/servicePerimeterDryRunIngressPolicy.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunIngressPolicy.go index 407834d562..f115854705 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunIngressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterDryRunIngressPolicy.go @@ -25,6 +25,9 @@ import ( // > **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 `createBeforeDestroy = true` to this resource. +// **Note:** If this resource is used alongside a `accesscontextmanager.ServicePerimeter` resource, +// the service perimeter resource must have a `lifecycle` block with `ignoreChanges = [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/go/gcp/accesscontextmanager/servicePerimeterEgressPolicy.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterEgressPolicy.go index aaa8fbbf22..299a9cd409 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterEgressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterEgressPolicy.go @@ -24,6 +24,9 @@ import ( // > **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 `createBeforeDestroy = true` to this resource. +// **Note:** If this resource is used alongside a `accesscontextmanager.ServicePerimeter` resource, +// the service perimeter resource must have a `lifecycle` block with `ignoreChanges = [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/go/gcp/accesscontextmanager/servicePerimeterIngressPolicy.go b/sdk/go/gcp/accesscontextmanager/servicePerimeterIngressPolicy.go index c91a86bfbe..1d0df923ac 100644 --- a/sdk/go/gcp/accesscontextmanager/servicePerimeterIngressPolicy.go +++ b/sdk/go/gcp/accesscontextmanager/servicePerimeterIngressPolicy.go @@ -25,6 +25,9 @@ import ( // > **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 `createBeforeDestroy = true` to this resource. +// **Note:** If this resource is used alongside a `accesscontextmanager.ServicePerimeter` resource, +// the service perimeter resource must have a `lifecycle` block with `ignoreChanges = [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/go/gcp/apigee/appGroup.go b/sdk/go/gcp/apigee/appGroup.go index 32eacf635c..112eff0426 100644 --- a/sdk/go/gcp/apigee/appGroup.go +++ b/sdk/go/gcp/apigee/appGroup.go @@ -226,7 +226,7 @@ type AppGroup struct { // A list of attributes // Structure is documented below. Attributes AppGroupAttributeArrayOutput `pulumi:"attributes"` - // Channel identifier identifies the owner maintaing this grouping. + // Channel identifier identifies the owner maintaining this grouping. ChannelId pulumi.StringPtrOutput `pulumi:"channelId"` // A reference to the associated storefront/marketplace. ChannelUri pulumi.StringPtrOutput `pulumi:"channelUri"` @@ -288,7 +288,7 @@ type appGroupState struct { // A list of attributes // Structure is documented below. Attributes []AppGroupAttribute `pulumi:"attributes"` - // Channel identifier identifies the owner maintaing this grouping. + // Channel identifier identifies the owner maintaining this grouping. ChannelId *string `pulumi:"channelId"` // A reference to the associated storefront/marketplace. ChannelUri *string `pulumi:"channelUri"` @@ -318,7 +318,7 @@ type AppGroupState struct { // A list of attributes // Structure is documented below. Attributes AppGroupAttributeArrayInput - // Channel identifier identifies the owner maintaing this grouping. + // Channel identifier identifies the owner maintaining this grouping. ChannelId pulumi.StringPtrInput // A reference to the associated storefront/marketplace. ChannelUri pulumi.StringPtrInput @@ -350,7 +350,7 @@ type appGroupArgs struct { // A list of attributes // Structure is documented below. Attributes []AppGroupAttribute `pulumi:"attributes"` - // Channel identifier identifies the owner maintaing this grouping. + // Channel identifier identifies the owner maintaining this grouping. ChannelId *string `pulumi:"channelId"` // A reference to the associated storefront/marketplace. ChannelUri *string `pulumi:"channelUri"` @@ -373,7 +373,7 @@ type AppGroupArgs struct { // A list of attributes // Structure is documented below. Attributes AppGroupAttributeArrayInput - // Channel identifier identifies the owner maintaing this grouping. + // Channel identifier identifies the owner maintaining this grouping. ChannelId pulumi.StringPtrInput // A reference to the associated storefront/marketplace. ChannelUri pulumi.StringPtrInput @@ -489,7 +489,7 @@ func (o AppGroupOutput) Attributes() AppGroupAttributeArrayOutput { return o.ApplyT(func(v *AppGroup) AppGroupAttributeArrayOutput { return v.Attributes }).(AppGroupAttributeArrayOutput) } -// Channel identifier identifies the owner maintaing this grouping. +// Channel identifier identifies the owner maintaining this grouping. func (o AppGroupOutput) ChannelId() pulumi.StringPtrOutput { return o.ApplyT(func(v *AppGroup) pulumi.StringPtrOutput { return v.ChannelId }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/applicationintegration/client.go b/sdk/go/gcp/applicationintegration/client.go index 28e3383bd2..0491e0d637 100644 --- a/sdk/go/gcp/applicationintegration/client.go +++ b/sdk/go/gcp/applicationintegration/client.go @@ -59,6 +59,7 @@ import ( // "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms" // "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations" // "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount" +// "github.com/pulumi/pulumi-std/sdk/go/std" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // // ) @@ -102,10 +103,22 @@ import ( // CreateSampleIntegrations: pulumi.Bool(true), // RunAsServiceAccount: serviceAccount.Email, // CloudKmsConfig: &applicationintegration.ClientCloudKmsConfigArgs{ -// KmsLocation: pulumi.String("us-east1"), -// KmsRing: keyring.ID(), -// Key: cryptokey.ID(), -// KeyVersion: testKey.ID(), +// KmsLocation: pulumi.String("us-east1"), +// KmsRing: std.BasenameOutput(ctx, std.BasenameOutputArgs{ +// Input: keyring.ID(), +// }, nil).ApplyT(func(invoke std.BasenameResult) (*string, error) { +// return invoke.Result, nil +// }).(pulumi.StringPtrOutput), +// Key: std.BasenameOutput(ctx, std.BasenameOutputArgs{ +// Input: cryptokey.ID(), +// }, nil).ApplyT(func(invoke std.BasenameResult) (*string, error) { +// return invoke.Result, nil +// }).(pulumi.StringPtrOutput), +// KeyVersion: std.BasenameOutput(ctx, std.BasenameOutputArgs{ +// Input: testKey.ID(), +// }, nil).ApplyT(func(invoke std.BasenameResult) (*string, error) { +// return invoke.Result, nil +// }).(pulumi.StringPtrOutput), // KmsProjectId: pulumi.String(testProject.ProjectId), // }, // }) diff --git a/sdk/go/gcp/artifactregistry/pulumiTypes.go b/sdk/go/gcp/artifactregistry/pulumiTypes.go index f70a117565..07acb365c5 100644 --- a/sdk/go/gcp/artifactregistry/pulumiTypes.go +++ b/sdk/go/gcp/artifactregistry/pulumiTypes.go @@ -1842,7 +1842,10 @@ func (o RepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryPtrOutput) } type RepositoryRemoteRepositoryConfigCommonRepository struct { - // 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"` Uri string `pulumi:"uri"` } @@ -1858,7 +1861,10 @@ type RepositoryRemoteRepositoryConfigCommonRepositoryInput interface { } type RepositoryRemoteRepositoryConfigCommonRepositoryArgs struct { - // 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"` Uri pulumi.StringInput `pulumi:"uri"` } @@ -1939,7 +1945,10 @@ func (o RepositoryRemoteRepositoryConfigCommonRepositoryOutput) ToRepositoryRemo }).(RepositoryRemoteRepositoryConfigCommonRepositoryPtrOutput) } -// 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"` func (o RepositoryRemoteRepositoryConfigCommonRepositoryOutput) Uri() pulumi.StringOutput { return o.ApplyT(func(v RepositoryRemoteRepositoryConfigCommonRepository) string { return v.Uri }).(pulumi.StringOutput) } @@ -1968,7 +1977,10 @@ func (o RepositoryRemoteRepositoryConfigCommonRepositoryPtrOutput) Elem() Reposi }).(RepositoryRemoteRepositoryConfigCommonRepositoryOutput) } -// 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"` func (o RepositoryRemoteRepositoryConfigCommonRepositoryPtrOutput) Uri() pulumi.StringPtrOutput { return o.ApplyT(func(v *RepositoryRemoteRepositoryConfigCommonRepository) *string { if v == nil { @@ -1979,7 +1991,7 @@ func (o RepositoryRemoteRepositoryConfigCommonRepositoryPtrOutput) Uri() pulumi. } type RepositoryRemoteRepositoryConfigDockerRepository struct { - // 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. CustomRepository *RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository `pulumi:"customRepository"` // Address of the remote repository. @@ -2000,7 +2012,7 @@ type RepositoryRemoteRepositoryConfigDockerRepositoryInput interface { } type RepositoryRemoteRepositoryConfigDockerRepositoryArgs struct { - // 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. CustomRepository RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryPtrInput `pulumi:"customRepository"` // Address of the remote repository. @@ -2086,7 +2098,7 @@ func (o RepositoryRemoteRepositoryConfigDockerRepositoryOutput) ToRepositoryRemo }).(RepositoryRemoteRepositoryConfigDockerRepositoryPtrOutput) } -// 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. func (o RepositoryRemoteRepositoryConfigDockerRepositoryOutput) CustomRepository() RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryPtrOutput { return o.ApplyT(func(v RepositoryRemoteRepositoryConfigDockerRepository) *RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository { @@ -2125,7 +2137,7 @@ func (o RepositoryRemoteRepositoryConfigDockerRepositoryPtrOutput) Elem() Reposi }).(RepositoryRemoteRepositoryConfigDockerRepositoryOutput) } -// 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. func (o RepositoryRemoteRepositoryConfigDockerRepositoryPtrOutput) CustomRepository() RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryPtrOutput { return o.ApplyT(func(v *RepositoryRemoteRepositoryConfigDockerRepository) *RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository { @@ -2286,7 +2298,7 @@ func (o RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryPtrOutpu } type RepositoryRemoteRepositoryConfigMavenRepository struct { - // 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. CustomRepository *RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository `pulumi:"customRepository"` // Address of the remote repository. @@ -2307,7 +2319,7 @@ type RepositoryRemoteRepositoryConfigMavenRepositoryInput interface { } type RepositoryRemoteRepositoryConfigMavenRepositoryArgs struct { - // 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. CustomRepository RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryPtrInput `pulumi:"customRepository"` // Address of the remote repository. @@ -2393,7 +2405,7 @@ func (o RepositoryRemoteRepositoryConfigMavenRepositoryOutput) ToRepositoryRemot }).(RepositoryRemoteRepositoryConfigMavenRepositoryPtrOutput) } -// 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. func (o RepositoryRemoteRepositoryConfigMavenRepositoryOutput) CustomRepository() RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryPtrOutput { return o.ApplyT(func(v RepositoryRemoteRepositoryConfigMavenRepository) *RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository { @@ -2432,7 +2444,7 @@ func (o RepositoryRemoteRepositoryConfigMavenRepositoryPtrOutput) Elem() Reposit }).(RepositoryRemoteRepositoryConfigMavenRepositoryOutput) } -// 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. func (o RepositoryRemoteRepositoryConfigMavenRepositoryPtrOutput) CustomRepository() RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryPtrOutput { return o.ApplyT(func(v *RepositoryRemoteRepositoryConfigMavenRepository) *RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository { @@ -2593,7 +2605,7 @@ func (o RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryPtrOutput } type RepositoryRemoteRepositoryConfigNpmRepository struct { - // 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. CustomRepository *RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository `pulumi:"customRepository"` // Address of the remote repository. @@ -2614,7 +2626,7 @@ type RepositoryRemoteRepositoryConfigNpmRepositoryInput interface { } type RepositoryRemoteRepositoryConfigNpmRepositoryArgs struct { - // 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. CustomRepository RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryPtrInput `pulumi:"customRepository"` // Address of the remote repository. @@ -2700,7 +2712,7 @@ func (o RepositoryRemoteRepositoryConfigNpmRepositoryOutput) ToRepositoryRemoteR }).(RepositoryRemoteRepositoryConfigNpmRepositoryPtrOutput) } -// 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. func (o RepositoryRemoteRepositoryConfigNpmRepositoryOutput) CustomRepository() RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryPtrOutput { return o.ApplyT(func(v RepositoryRemoteRepositoryConfigNpmRepository) *RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository { @@ -2739,7 +2751,7 @@ func (o RepositoryRemoteRepositoryConfigNpmRepositoryPtrOutput) Elem() Repositor }).(RepositoryRemoteRepositoryConfigNpmRepositoryOutput) } -// 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. func (o RepositoryRemoteRepositoryConfigNpmRepositoryPtrOutput) CustomRepository() RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryPtrOutput { return o.ApplyT(func(v *RepositoryRemoteRepositoryConfigNpmRepository) *RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository { @@ -2900,7 +2912,7 @@ func (o RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryPtrOutput) } type RepositoryRemoteRepositoryConfigPythonRepository struct { - // 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. CustomRepository *RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository `pulumi:"customRepository"` // Address of the remote repository. @@ -2921,7 +2933,7 @@ type RepositoryRemoteRepositoryConfigPythonRepositoryInput interface { } type RepositoryRemoteRepositoryConfigPythonRepositoryArgs struct { - // 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. CustomRepository RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryPtrInput `pulumi:"customRepository"` // Address of the remote repository. @@ -3007,7 +3019,7 @@ func (o RepositoryRemoteRepositoryConfigPythonRepositoryOutput) ToRepositoryRemo }).(RepositoryRemoteRepositoryConfigPythonRepositoryPtrOutput) } -// 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. func (o RepositoryRemoteRepositoryConfigPythonRepositoryOutput) CustomRepository() RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryPtrOutput { return o.ApplyT(func(v RepositoryRemoteRepositoryConfigPythonRepository) *RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository { @@ -3046,7 +3058,7 @@ func (o RepositoryRemoteRepositoryConfigPythonRepositoryPtrOutput) Elem() Reposi }).(RepositoryRemoteRepositoryConfigPythonRepositoryOutput) } -// 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. func (o RepositoryRemoteRepositoryConfigPythonRepositoryPtrOutput) CustomRepository() RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryPtrOutput { return o.ApplyT(func(v *RepositoryRemoteRepositoryConfigPythonRepository) *RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository { @@ -5072,7 +5084,10 @@ func (o GetRepositoryRemoteRepositoryConfigAptRepositoryPublicRepositoryArrayOut } type GetRepositoryRemoteRepositoryConfigCommonRepository struct { - // 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"' Uri string `pulumi:"uri"` } @@ -5088,7 +5103,10 @@ type GetRepositoryRemoteRepositoryConfigCommonRepositoryInput interface { } type GetRepositoryRemoteRepositoryConfigCommonRepositoryArgs struct { - // 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"' Uri pulumi.StringInput `pulumi:"uri"` } @@ -5143,7 +5161,10 @@ func (o GetRepositoryRemoteRepositoryConfigCommonRepositoryOutput) ToGetReposito return o } -// 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"' func (o GetRepositoryRemoteRepositoryConfigCommonRepositoryOutput) Uri() pulumi.StringOutput { return o.ApplyT(func(v GetRepositoryRemoteRepositoryConfigCommonRepository) string { return v.Uri }).(pulumi.StringOutput) } @@ -5169,7 +5190,7 @@ func (o GetRepositoryRemoteRepositoryConfigCommonRepositoryArrayOutput) Index(i } type GetRepositoryRemoteRepositoryConfigDockerRepository struct { - // Settings for a remote repository with a custom uri. + // [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. CustomRepositories []GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository `pulumi:"customRepositories"` // Address of the remote repository. Default value: "DOCKER_HUB" Possible values: ["DOCKER_HUB"] PublicRepository string `pulumi:"publicRepository"` @@ -5187,7 +5208,7 @@ type GetRepositoryRemoteRepositoryConfigDockerRepositoryInput interface { } type GetRepositoryRemoteRepositoryConfigDockerRepositoryArgs struct { - // Settings for a remote repository with a custom uri. + // [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. CustomRepositories GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArrayInput `pulumi:"customRepositories"` // Address of the remote repository. Default value: "DOCKER_HUB" Possible values: ["DOCKER_HUB"] PublicRepository pulumi.StringInput `pulumi:"publicRepository"` @@ -5244,7 +5265,7 @@ func (o GetRepositoryRemoteRepositoryConfigDockerRepositoryOutput) ToGetReposito return o } -// Settings for a remote repository with a custom uri. +// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. func (o GetRepositoryRemoteRepositoryConfigDockerRepositoryOutput) CustomRepositories() GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArrayOutput { return o.ApplyT(func(v GetRepositoryRemoteRepositoryConfigDockerRepository) []GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository { return v.CustomRepositories @@ -5374,7 +5395,7 @@ func (o GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArray } type GetRepositoryRemoteRepositoryConfigMavenRepository struct { - // Settings for a remote repository with a custom uri. + // [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. CustomRepositories []GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository `pulumi:"customRepositories"` // Address of the remote repository. Default value: "MAVEN_CENTRAL" Possible values: ["MAVEN_CENTRAL"] PublicRepository string `pulumi:"publicRepository"` @@ -5392,7 +5413,7 @@ type GetRepositoryRemoteRepositoryConfigMavenRepositoryInput interface { } type GetRepositoryRemoteRepositoryConfigMavenRepositoryArgs struct { - // Settings for a remote repository with a custom uri. + // [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. CustomRepositories GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArrayInput `pulumi:"customRepositories"` // Address of the remote repository. Default value: "MAVEN_CENTRAL" Possible values: ["MAVEN_CENTRAL"] PublicRepository pulumi.StringInput `pulumi:"publicRepository"` @@ -5449,7 +5470,7 @@ func (o GetRepositoryRemoteRepositoryConfigMavenRepositoryOutput) ToGetRepositor return o } -// Settings for a remote repository with a custom uri. +// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. func (o GetRepositoryRemoteRepositoryConfigMavenRepositoryOutput) CustomRepositories() GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArrayOutput { return o.ApplyT(func(v GetRepositoryRemoteRepositoryConfigMavenRepository) []GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository { return v.CustomRepositories @@ -5579,7 +5600,7 @@ func (o GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArrayO } type GetRepositoryRemoteRepositoryConfigNpmRepository struct { - // Settings for a remote repository with a custom uri. + // [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. CustomRepositories []GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository `pulumi:"customRepositories"` // Address of the remote repository. Default value: "NPMJS" Possible values: ["NPMJS"] PublicRepository string `pulumi:"publicRepository"` @@ -5597,7 +5618,7 @@ type GetRepositoryRemoteRepositoryConfigNpmRepositoryInput interface { } type GetRepositoryRemoteRepositoryConfigNpmRepositoryArgs struct { - // Settings for a remote repository with a custom uri. + // [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. CustomRepositories GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArrayInput `pulumi:"customRepositories"` // Address of the remote repository. Default value: "NPMJS" Possible values: ["NPMJS"] PublicRepository pulumi.StringInput `pulumi:"publicRepository"` @@ -5654,7 +5675,7 @@ func (o GetRepositoryRemoteRepositoryConfigNpmRepositoryOutput) ToGetRepositoryR return o } -// Settings for a remote repository with a custom uri. +// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. func (o GetRepositoryRemoteRepositoryConfigNpmRepositoryOutput) CustomRepositories() GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArrayOutput { return o.ApplyT(func(v GetRepositoryRemoteRepositoryConfigNpmRepository) []GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository { return v.CustomRepositories @@ -5784,7 +5805,7 @@ func (o GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArrayOut } type GetRepositoryRemoteRepositoryConfigPythonRepository struct { - // Settings for a remote repository with a custom uri. + // [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. CustomRepositories []GetRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository `pulumi:"customRepositories"` // Address of the remote repository. Default value: "PYPI" Possible values: ["PYPI"] PublicRepository string `pulumi:"publicRepository"` @@ -5802,7 +5823,7 @@ type GetRepositoryRemoteRepositoryConfigPythonRepositoryInput interface { } type GetRepositoryRemoteRepositoryConfigPythonRepositoryArgs struct { - // Settings for a remote repository with a custom uri. + // [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. CustomRepositories GetRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArrayInput `pulumi:"customRepositories"` // Address of the remote repository. Default value: "PYPI" Possible values: ["PYPI"] PublicRepository pulumi.StringInput `pulumi:"publicRepository"` @@ -5859,7 +5880,7 @@ func (o GetRepositoryRemoteRepositoryConfigPythonRepositoryOutput) ToGetReposito return o } -// Settings for a remote repository with a custom uri. +// [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. func (o GetRepositoryRemoteRepositoryConfigPythonRepositoryOutput) CustomRepositories() GetRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArrayOutput { return o.ApplyT(func(v GetRepositoryRemoteRepositoryConfigPythonRepository) []GetRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository { return v.CustomRepositories diff --git a/sdk/go/gcp/artifactregistry/repository.go b/sdk/go/gcp/artifactregistry/repository.go index 44a8ac8afe..835cc59bf1 100644 --- a/sdk/go/gcp/artifactregistry/repository.go +++ b/sdk/go/gcp/artifactregistry/repository.go @@ -791,6 +791,129 @@ import ( // } // // ``` +// ### Artifact Registry Repository Remote Common Repository With Artifact Registry Uri +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := organizations.LookupProject(ctx, &organizations.LookupProjectArgs{}, nil) +// if err != nil { +// return err +// } +// _, err = artifactregistry.NewRepository(ctx, "upstream_repo", &artifactregistry.RepositoryArgs{ +// Location: pulumi.String("us-central1"), +// RepositoryId: pulumi.String("example-upstream-repo"), +// Description: pulumi.String("example upstream repository"), +// Format: pulumi.String("DOCKER"), +// }) +// if err != nil { +// return err +// } +// _, err = artifactregistry.NewRepository(ctx, "my-repo", &artifactregistry.RepositoryArgs{ +// Location: pulumi.String("us-central1"), +// RepositoryId: pulumi.String("example-common-remote"), +// Description: pulumi.String("example remote common repository with docker upstream"), +// Format: pulumi.String("DOCKER"), +// Mode: pulumi.String("REMOTE_REPOSITORY"), +// RemoteRepositoryConfig: &artifactregistry.RepositoryRemoteRepositoryConfigArgs{ +// Description: pulumi.String("pull-through cache of another Artifact Registry repository by URL"), +// CommonRepository: &artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{ +// Uri: pulumi.String("https://us-central1-docker.pkg.dev//example-upstream-repo"), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Artifact Registry Repository Remote Common Repository With Custom Upstream +// +// ```go +// package main +// +// import ( +// +// "fmt" +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/artifactregistry" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// project, err := organizations.LookupProject(ctx, &organizations.LookupProjectArgs{}, nil) +// if err != nil { +// return err +// } +// _, err = secretmanager.NewSecret(ctx, "example-remote-secret", &secretmanager.SecretArgs{ +// SecretId: pulumi.String("example-secret"), +// Replication: &secretmanager.SecretReplicationArgs{ +// Auto: &secretmanager.SecretReplicationAutoArgs{}, +// }, +// }) +// if err != nil { +// return err +// } +// _, err = secretmanager.NewSecretVersion(ctx, "example-remote-secret_version", &secretmanager.SecretVersionArgs{ +// Secret: example_remote_secret.ID(), +// SecretData: pulumi.String("remote-password"), +// }) +// if err != nil { +// return err +// } +// _, err = secretmanager.NewSecretIamMember(ctx, "secret-access", &secretmanager.SecretIamMemberArgs{ +// SecretId: example_remote_secret.ID(), +// Role: pulumi.String("roles/secretmanager.secretAccessor"), +// Member: pulumi.Sprintf("serviceAccount:service-%v@gcp-sa-artifactregistry.iam.gserviceaccount.com", project.Number), +// }) +// if err != nil { +// return err +// } +// _, err = artifactregistry.NewRepository(ctx, "my-repo", &artifactregistry.RepositoryArgs{ +// Location: pulumi.String("us-central1"), +// RepositoryId: pulumi.String("example-docker-custom-remote"), +// Description: pulumi.String("example remote custom docker repository with credentials"), +// Format: pulumi.String("DOCKER"), +// Mode: pulumi.String("REMOTE_REPOSITORY"), +// RemoteRepositoryConfig: &artifactregistry.RepositoryRemoteRepositoryConfigArgs{ +// Description: pulumi.String("custom common docker remote with credentials"), +// DisableUpstreamValidation: pulumi.Bool(true), +// CommonRepository: &artifactregistry.RepositoryRemoteRepositoryConfigCommonRepositoryArgs{ +// Uri: pulumi.String("https://registry-1.docker.io"), +// }, +// UpstreamCredentials: &artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs{ +// UsernamePasswordCredentials: &artifactregistry.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs{ +// Username: pulumi.String("remote-username"), +// PasswordSecretVersion: example_remote_secretVersion.Name, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // diff --git a/sdk/go/gcp/assuredworkloads/workload.go b/sdk/go/gcp/assuredworkloads/workload.go index 213111a6ef..080ba3233a 100644 --- a/sdk/go/gcp/assuredworkloads/workload.go +++ b/sdk/go/gcp/assuredworkloads/workload.go @@ -194,7 +194,7 @@ type Workload struct { // Optional. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`. BillingAccount pulumi.StringPtrOutput `pulumi:"billingAccount"` - // 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 ComplianceRegime pulumi.StringOutput `pulumi:"complianceRegime"` // Output only. Count of active Violations in the Workload. ComplianceStatuses WorkloadComplianceStatusArrayOutput `pulumi:"complianceStatuses"` @@ -298,7 +298,7 @@ func GetWorkload(ctx *pulumi.Context, type workloadState struct { // Optional. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`. BillingAccount *string `pulumi:"billingAccount"` - // 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 ComplianceRegime *string `pulumi:"complianceRegime"` // Output only. Count of active Violations in the Workload. ComplianceStatuses []WorkloadComplianceStatus `pulumi:"complianceStatuses"` @@ -356,7 +356,7 @@ type workloadState struct { type WorkloadState struct { // Optional. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`. BillingAccount pulumi.StringPtrInput - // 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 ComplianceRegime pulumi.StringPtrInput // Output only. Count of active Violations in the Workload. ComplianceStatuses WorkloadComplianceStatusArrayInput @@ -418,7 +418,7 @@ func (WorkloadState) ElementType() reflect.Type { type workloadArgs struct { // Optional. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`. BillingAccount *string `pulumi:"billingAccount"` - // 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 ComplianceRegime string `pulumi:"complianceRegime"` // Required. The user-assigned display name of the Workload. When present it must be between 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, and spaces. Example: My Workload DisplayName string `pulumi:"displayName"` @@ -457,7 +457,7 @@ type workloadArgs struct { type WorkloadArgs struct { // Optional. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`. BillingAccount pulumi.StringPtrInput - // 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 ComplianceRegime pulumi.StringInput // Required. The user-assigned display name of the Workload. When present it must be between 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, and spaces. Example: My Workload DisplayName pulumi.StringInput @@ -584,7 +584,7 @@ func (o WorkloadOutput) BillingAccount() pulumi.StringPtrOutput { return o.ApplyT(func(v *Workload) pulumi.StringPtrOutput { return v.BillingAccount }).(pulumi.StringPtrOutput) } -// 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 func (o WorkloadOutput) ComplianceRegime() pulumi.StringOutput { return o.ApplyT(func(v *Workload) pulumi.StringOutput { return v.ComplianceRegime }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/backupdisasterrecovery/backupPlan.go b/sdk/go/gcp/backupdisasterrecovery/backupPlan.go index 6c50e792c5..3976fc5502 100644 --- a/sdk/go/gcp/backupdisasterrecovery/backupPlan.go +++ b/sdk/go/gcp/backupdisasterrecovery/backupPlan.go @@ -30,7 +30,7 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // myBackupVault, err := backupdisasterrecovery.NewBackupVault(ctx, "my_backup_vault", &backupdisasterrecovery.BackupVaultArgs{ // Location: pulumi.String("us-central1"), -// BackupVaultId: pulumi.String("bv-bp-test"), +// BackupVaultId: pulumi.String("backup-vault-simple-test"), // BackupMinimumEnforcedRetentionDuration: pulumi.String("100000s"), // }) // if err != nil { diff --git a/sdk/go/gcp/backupdisasterrecovery/backupVault.go b/sdk/go/gcp/backupdisasterrecovery/backupVault.go index 07176a270e..1ea4f54d9b 100644 --- a/sdk/go/gcp/backupdisasterrecovery/backupVault.go +++ b/sdk/go/gcp/backupdisasterrecovery/backupVault.go @@ -12,6 +12,8 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// Container to store and organize immutable and indelible backups. +// // ## Example Usage // // ### Backup Dr Backup Vault Full @@ -33,14 +35,14 @@ import ( // BackupVaultId: pulumi.String("backup-vault-test"), // Description: pulumi.String("This is a second backup vault built by Terraform."), // BackupMinimumEnforcedRetentionDuration: pulumi.String("100000s"), -// Labels: pulumi.StringMap{ -// "foo": pulumi.String("bar1"), -// "bar": pulumi.String("baz1"), -// }, // Annotations: pulumi.StringMap{ // "annotations1": pulumi.String("bar1"), // "annotations2": pulumi.String("baz1"), // }, +// Labels: pulumi.StringMap{ +// "foo": pulumi.String("bar1"), +// "bar": pulumi.String("baz1"), +// }, // ForceUpdate: pulumi.Bool(true), // AccessRestriction: pulumi.String("WITHIN_ORGANIZATION"), // IgnoreInactiveDatasources: pulumi.Bool(true), diff --git a/sdk/go/gcp/backupdisasterrecovery/getBackup.go b/sdk/go/gcp/backupdisasterrecovery/getBackup.go new file mode 100644 index 0000000000..f8f12fc8f8 --- /dev/null +++ b/sdk/go/gcp/backupdisasterrecovery/getBackup.go @@ -0,0 +1,121 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package backupdisasterrecovery + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +func GetBackup(ctx *pulumi.Context, args *GetBackupArgs, opts ...pulumi.InvokeOption) (*GetBackupResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetBackupResult + err := ctx.Invoke("gcp:backupdisasterrecovery/getBackup:getBackup", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getBackup. +type GetBackupArgs struct { + BackupVaultId string `pulumi:"backupVaultId"` + DataSourceId string `pulumi:"dataSourceId"` + Location string `pulumi:"location"` + Project string `pulumi:"project"` +} + +// A collection of values returned by getBackup. +type GetBackupResult struct { + BackupVaultId string `pulumi:"backupVaultId"` + Backups []GetBackupBackup `pulumi:"backups"` + DataSourceId string `pulumi:"dataSourceId"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + Location string `pulumi:"location"` + Name string `pulumi:"name"` + Project string `pulumi:"project"` +} + +func GetBackupOutput(ctx *pulumi.Context, args GetBackupOutputArgs, opts ...pulumi.InvokeOption) GetBackupResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetBackupResultOutput, error) { + args := v.(GetBackupArgs) + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetBackupResult + secret, err := ctx.InvokePackageRaw("gcp:backupdisasterrecovery/getBackup:getBackup", args, &rv, "", opts...) + if err != nil { + return GetBackupResultOutput{}, err + } + + output := pulumi.ToOutput(rv).(GetBackupResultOutput) + if secret { + return pulumi.ToSecret(output).(GetBackupResultOutput), nil + } + return output, nil + }).(GetBackupResultOutput) +} + +// A collection of arguments for invoking getBackup. +type GetBackupOutputArgs struct { + BackupVaultId pulumi.StringInput `pulumi:"backupVaultId"` + DataSourceId pulumi.StringInput `pulumi:"dataSourceId"` + Location pulumi.StringInput `pulumi:"location"` + Project pulumi.StringInput `pulumi:"project"` +} + +func (GetBackupOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackupArgs)(nil)).Elem() +} + +// A collection of values returned by getBackup. +type GetBackupResultOutput struct{ *pulumi.OutputState } + +func (GetBackupResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackupResult)(nil)).Elem() +} + +func (o GetBackupResultOutput) ToGetBackupResultOutput() GetBackupResultOutput { + return o +} + +func (o GetBackupResultOutput) ToGetBackupResultOutputWithContext(ctx context.Context) GetBackupResultOutput { + return o +} + +func (o GetBackupResultOutput) BackupVaultId() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupResult) string { return v.BackupVaultId }).(pulumi.StringOutput) +} + +func (o GetBackupResultOutput) Backups() GetBackupBackupArrayOutput { + return o.ApplyT(func(v GetBackupResult) []GetBackupBackup { return v.Backups }).(GetBackupBackupArrayOutput) +} + +func (o GetBackupResultOutput) DataSourceId() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupResult) string { return v.DataSourceId }).(pulumi.StringOutput) +} + +// The provider-assigned unique ID for this managed resource. +func (o GetBackupResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetBackupResultOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupResult) string { return v.Location }).(pulumi.StringOutput) +} + +func (o GetBackupResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupResult) string { return v.Name }).(pulumi.StringOutput) +} + +func (o GetBackupResultOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupResult) string { return v.Project }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(GetBackupResultOutput{}) +} diff --git a/sdk/go/gcp/backupdisasterrecovery/getBackupVault.go b/sdk/go/gcp/backupdisasterrecovery/getBackupVault.go new file mode 100644 index 0000000000..b1807c29ba --- /dev/null +++ b/sdk/go/gcp/backupdisasterrecovery/getBackupVault.go @@ -0,0 +1,264 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package backupdisasterrecovery + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// A Backup and DRBackupVault. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := backupdisasterrecovery.LookupBackupVault(ctx, &backupdisasterrecovery.LookupBackupVaultArgs{ +// Location: "us-central1", +// BackupVaultId: "bv-1", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupBackupVault(ctx *pulumi.Context, args *LookupBackupVaultArgs, opts ...pulumi.InvokeOption) (*LookupBackupVaultResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupBackupVaultResult + err := ctx.Invoke("gcp:backupdisasterrecovery/getBackupVault:getBackupVault", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getBackupVault. +type LookupBackupVaultArgs struct { + // The id of Backup Vault resource. + // + // *** + BackupVaultId string `pulumi:"backupVaultId"` + // The location in which the Backup Vault resource belongs. + Location string `pulumi:"location"` + // The project in which the resource belongs. If it + // is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// A collection of values returned by getBackupVault. +type LookupBackupVaultResult struct { + AccessRestriction string `pulumi:"accessRestriction"` + AllowMissing bool `pulumi:"allowMissing"` + Annotations map[string]string `pulumi:"annotations"` + BackupCount string `pulumi:"backupCount"` + BackupMinimumEnforcedRetentionDuration string `pulumi:"backupMinimumEnforcedRetentionDuration"` + BackupVaultId string `pulumi:"backupVaultId"` + CreateTime string `pulumi:"createTime"` + Deletable bool `pulumi:"deletable"` + Description string `pulumi:"description"` + EffectiveAnnotations map[string]string `pulumi:"effectiveAnnotations"` + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + EffectiveTime string `pulumi:"effectiveTime"` + Etag string `pulumi:"etag"` + ForceDelete bool `pulumi:"forceDelete"` + ForceUpdate bool `pulumi:"forceUpdate"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + IgnoreBackupPlanReferences bool `pulumi:"ignoreBackupPlanReferences"` + IgnoreInactiveDatasources bool `pulumi:"ignoreInactiveDatasources"` + Labels map[string]string `pulumi:"labels"` + Location string `pulumi:"location"` + Name string `pulumi:"name"` + Project *string `pulumi:"project"` + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + ServiceAccount string `pulumi:"serviceAccount"` + State string `pulumi:"state"` + TotalStoredBytes string `pulumi:"totalStoredBytes"` + Uid string `pulumi:"uid"` + UpdateTime string `pulumi:"updateTime"` +} + +func LookupBackupVaultOutput(ctx *pulumi.Context, args LookupBackupVaultOutputArgs, opts ...pulumi.InvokeOption) LookupBackupVaultResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (LookupBackupVaultResultOutput, error) { + args := v.(LookupBackupVaultArgs) + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupBackupVaultResult + secret, err := ctx.InvokePackageRaw("gcp:backupdisasterrecovery/getBackupVault:getBackupVault", args, &rv, "", opts...) + if err != nil { + return LookupBackupVaultResultOutput{}, err + } + + output := pulumi.ToOutput(rv).(LookupBackupVaultResultOutput) + if secret { + return pulumi.ToSecret(output).(LookupBackupVaultResultOutput), nil + } + return output, nil + }).(LookupBackupVaultResultOutput) +} + +// A collection of arguments for invoking getBackupVault. +type LookupBackupVaultOutputArgs struct { + // The id of Backup Vault resource. + // + // *** + BackupVaultId pulumi.StringInput `pulumi:"backupVaultId"` + // The location in which the Backup Vault resource belongs. + Location pulumi.StringInput `pulumi:"location"` + // The project in which the resource belongs. If it + // is not provided, the provider project is used. + Project pulumi.StringPtrInput `pulumi:"project"` +} + +func (LookupBackupVaultOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupBackupVaultArgs)(nil)).Elem() +} + +// A collection of values returned by getBackupVault. +type LookupBackupVaultResultOutput struct{ *pulumi.OutputState } + +func (LookupBackupVaultResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupBackupVaultResult)(nil)).Elem() +} + +func (o LookupBackupVaultResultOutput) ToLookupBackupVaultResultOutput() LookupBackupVaultResultOutput { + return o +} + +func (o LookupBackupVaultResultOutput) ToLookupBackupVaultResultOutputWithContext(ctx context.Context) LookupBackupVaultResultOutput { + return o +} + +func (o LookupBackupVaultResultOutput) AccessRestriction() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.AccessRestriction }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) AllowMissing() pulumi.BoolOutput { + return o.ApplyT(func(v LookupBackupVaultResult) bool { return v.AllowMissing }).(pulumi.BoolOutput) +} + +func (o LookupBackupVaultResultOutput) Annotations() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupBackupVaultResult) map[string]string { return v.Annotations }).(pulumi.StringMapOutput) +} + +func (o LookupBackupVaultResultOutput) BackupCount() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.BackupCount }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) BackupMinimumEnforcedRetentionDuration() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.BackupMinimumEnforcedRetentionDuration }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) BackupVaultId() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.BackupVaultId }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.CreateTime }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) Deletable() pulumi.BoolOutput { + return o.ApplyT(func(v LookupBackupVaultResult) bool { return v.Deletable }).(pulumi.BoolOutput) +} + +func (o LookupBackupVaultResultOutput) Description() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.Description }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) EffectiveAnnotations() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupBackupVaultResult) map[string]string { return v.EffectiveAnnotations }).(pulumi.StringMapOutput) +} + +func (o LookupBackupVaultResultOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupBackupVaultResult) map[string]string { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +func (o LookupBackupVaultResultOutput) EffectiveTime() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.EffectiveTime }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.Etag }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) ForceDelete() pulumi.BoolOutput { + return o.ApplyT(func(v LookupBackupVaultResult) bool { return v.ForceDelete }).(pulumi.BoolOutput) +} + +func (o LookupBackupVaultResultOutput) ForceUpdate() pulumi.BoolOutput { + return o.ApplyT(func(v LookupBackupVaultResult) bool { return v.ForceUpdate }).(pulumi.BoolOutput) +} + +// The provider-assigned unique ID for this managed resource. +func (o LookupBackupVaultResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) IgnoreBackupPlanReferences() pulumi.BoolOutput { + return o.ApplyT(func(v LookupBackupVaultResult) bool { return v.IgnoreBackupPlanReferences }).(pulumi.BoolOutput) +} + +func (o LookupBackupVaultResultOutput) IgnoreInactiveDatasources() pulumi.BoolOutput { + return o.ApplyT(func(v LookupBackupVaultResult) bool { return v.IgnoreInactiveDatasources }).(pulumi.BoolOutput) +} + +func (o LookupBackupVaultResultOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupBackupVaultResult) map[string]string { return v.Labels }).(pulumi.StringMapOutput) +} + +func (o LookupBackupVaultResultOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.Location }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.Name }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) Project() pulumi.StringPtrOutput { + return o.ApplyT(func(v LookupBackupVaultResult) *string { return v.Project }).(pulumi.StringPtrOutput) +} + +func (o LookupBackupVaultResultOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v LookupBackupVaultResult) map[string]string { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +func (o LookupBackupVaultResultOutput) ServiceAccount() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.ServiceAccount }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) State() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.State }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) TotalStoredBytes() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.TotalStoredBytes }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) Uid() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.Uid }).(pulumi.StringOutput) +} + +func (o LookupBackupVaultResultOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v LookupBackupVaultResult) string { return v.UpdateTime }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupBackupVaultResultOutput{}) +} diff --git a/sdk/go/gcp/backupdisasterrecovery/pulumiTypes.go b/sdk/go/gcp/backupdisasterrecovery/pulumiTypes.go index 093f11bd3d..1376d88c6d 100644 --- a/sdk/go/gcp/backupdisasterrecovery/pulumiTypes.go +++ b/sdk/go/gcp/backupdisasterrecovery/pulumiTypes.go @@ -1068,6 +1068,139 @@ func (o ManagementServerNetworkArrayOutput) Index(i pulumi.IntInput) ManagementS }).(ManagementServerNetworkOutput) } +type GetBackupBackup struct { + // Id of the requesting object, Backup. + BackupId string `pulumi:"backupId"` + // Name of the Backup Vault associated with Backup. + BackupVaultId string `pulumi:"backupVaultId"` + // Name of the Data Source associated with Backup. + DataSourceId string `pulumi:"dataSourceId"` + // Location of the resource. + Location string `pulumi:"location"` + // Name of the resource. + Name string `pulumi:"name"` +} + +// GetBackupBackupInput is an input type that accepts GetBackupBackupArgs and GetBackupBackupOutput values. +// You can construct a concrete instance of `GetBackupBackupInput` via: +// +// GetBackupBackupArgs{...} +type GetBackupBackupInput interface { + pulumi.Input + + ToGetBackupBackupOutput() GetBackupBackupOutput + ToGetBackupBackupOutputWithContext(context.Context) GetBackupBackupOutput +} + +type GetBackupBackupArgs struct { + // Id of the requesting object, Backup. + BackupId pulumi.StringInput `pulumi:"backupId"` + // Name of the Backup Vault associated with Backup. + BackupVaultId pulumi.StringInput `pulumi:"backupVaultId"` + // Name of the Data Source associated with Backup. + DataSourceId pulumi.StringInput `pulumi:"dataSourceId"` + // Location of the resource. + Location pulumi.StringInput `pulumi:"location"` + // Name of the resource. + Name pulumi.StringInput `pulumi:"name"` +} + +func (GetBackupBackupArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackupBackup)(nil)).Elem() +} + +func (i GetBackupBackupArgs) ToGetBackupBackupOutput() GetBackupBackupOutput { + return i.ToGetBackupBackupOutputWithContext(context.Background()) +} + +func (i GetBackupBackupArgs) ToGetBackupBackupOutputWithContext(ctx context.Context) GetBackupBackupOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBackupBackupOutput) +} + +// GetBackupBackupArrayInput is an input type that accepts GetBackupBackupArray and GetBackupBackupArrayOutput values. +// You can construct a concrete instance of `GetBackupBackupArrayInput` via: +// +// GetBackupBackupArray{ GetBackupBackupArgs{...} } +type GetBackupBackupArrayInput interface { + pulumi.Input + + ToGetBackupBackupArrayOutput() GetBackupBackupArrayOutput + ToGetBackupBackupArrayOutputWithContext(context.Context) GetBackupBackupArrayOutput +} + +type GetBackupBackupArray []GetBackupBackupInput + +func (GetBackupBackupArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBackupBackup)(nil)).Elem() +} + +func (i GetBackupBackupArray) ToGetBackupBackupArrayOutput() GetBackupBackupArrayOutput { + return i.ToGetBackupBackupArrayOutputWithContext(context.Background()) +} + +func (i GetBackupBackupArray) ToGetBackupBackupArrayOutputWithContext(ctx context.Context) GetBackupBackupArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBackupBackupArrayOutput) +} + +type GetBackupBackupOutput struct{ *pulumi.OutputState } + +func (GetBackupBackupOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackupBackup)(nil)).Elem() +} + +func (o GetBackupBackupOutput) ToGetBackupBackupOutput() GetBackupBackupOutput { + return o +} + +func (o GetBackupBackupOutput) ToGetBackupBackupOutputWithContext(ctx context.Context) GetBackupBackupOutput { + return o +} + +// Id of the requesting object, Backup. +func (o GetBackupBackupOutput) BackupId() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupBackup) string { return v.BackupId }).(pulumi.StringOutput) +} + +// Name of the Backup Vault associated with Backup. +func (o GetBackupBackupOutput) BackupVaultId() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupBackup) string { return v.BackupVaultId }).(pulumi.StringOutput) +} + +// Name of the Data Source associated with Backup. +func (o GetBackupBackupOutput) DataSourceId() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupBackup) string { return v.DataSourceId }).(pulumi.StringOutput) +} + +// Location of the resource. +func (o GetBackupBackupOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupBackup) string { return v.Location }).(pulumi.StringOutput) +} + +// Name of the resource. +func (o GetBackupBackupOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetBackupBackup) string { return v.Name }).(pulumi.StringOutput) +} + +type GetBackupBackupArrayOutput struct{ *pulumi.OutputState } + +func (GetBackupBackupArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBackupBackup)(nil)).Elem() +} + +func (o GetBackupBackupArrayOutput) ToGetBackupBackupArrayOutput() GetBackupBackupArrayOutput { + return o +} + +func (o GetBackupBackupArrayOutput) ToGetBackupBackupArrayOutputWithContext(ctx context.Context) GetBackupBackupArrayOutput { + return o +} + +func (o GetBackupBackupArrayOutput) Index(i pulumi.IntInput) GetBackupBackupOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetBackupBackup { + return vs[0].([]GetBackupBackup)[vs[1].(int)] + }).(GetBackupBackupOutput) +} + type GetBackupPlanAssociationRulesConfigInfo struct { // google.rpc.Status object to store the last backup error LastBackupErrors []GetBackupPlanAssociationRulesConfigInfoLastBackupError `pulumi:"lastBackupErrors"` @@ -2853,6 +2986,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ManagementServerManagementUriArrayInput)(nil)).Elem(), ManagementServerManagementUriArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ManagementServerNetworkInput)(nil)).Elem(), ManagementServerNetworkArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ManagementServerNetworkArrayInput)(nil)).Elem(), ManagementServerNetworkArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBackupBackupInput)(nil)).Elem(), GetBackupBackupArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBackupBackupArrayInput)(nil)).Elem(), GetBackupBackupArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBackupPlanAssociationRulesConfigInfoInput)(nil)).Elem(), GetBackupPlanAssociationRulesConfigInfoArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBackupPlanAssociationRulesConfigInfoArrayInput)(nil)).Elem(), GetBackupPlanAssociationRulesConfigInfoArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBackupPlanAssociationRulesConfigInfoLastBackupErrorInput)(nil)).Elem(), GetBackupPlanAssociationRulesConfigInfoLastBackupErrorArgs{}) @@ -2896,6 +3031,8 @@ func init() { pulumi.RegisterOutputType(ManagementServerManagementUriArrayOutput{}) pulumi.RegisterOutputType(ManagementServerNetworkOutput{}) pulumi.RegisterOutputType(ManagementServerNetworkArrayOutput{}) + pulumi.RegisterOutputType(GetBackupBackupOutput{}) + pulumi.RegisterOutputType(GetBackupBackupArrayOutput{}) pulumi.RegisterOutputType(GetBackupPlanAssociationRulesConfigInfoOutput{}) pulumi.RegisterOutputType(GetBackupPlanAssociationRulesConfigInfoArrayOutput{}) pulumi.RegisterOutputType(GetBackupPlanAssociationRulesConfigInfoLastBackupErrorOutput{}) diff --git a/sdk/go/gcp/bigquery/appProfile.go b/sdk/go/gcp/bigquery/appProfile.go index b98a35c692..d1ab88907b 100644 --- a/sdk/go/gcp/bigquery/appProfile.go +++ b/sdk/go/gcp/bigquery/appProfile.go @@ -285,6 +285,12 @@ type AppProfile struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` + // 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. + RowAffinity pulumi.BoolPtrOutput `pulumi:"rowAffinity"` // Use a single-cluster routing policy. // Structure is documented below. SingleClusterRouting AppProfileSingleClusterRoutingPtrOutput `pulumi:"singleClusterRouting"` @@ -351,6 +357,12 @@ type appProfileState struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` + // 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. + RowAffinity *bool `pulumi:"rowAffinity"` // Use a single-cluster routing policy. // Structure is documented below. SingleClusterRouting *AppProfileSingleClusterRouting `pulumi:"singleClusterRouting"` @@ -385,6 +397,12 @@ type AppProfileState struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput + // 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. + RowAffinity pulumi.BoolPtrInput // Use a single-cluster routing policy. // Structure is documented below. SingleClusterRouting AppProfileSingleClusterRoutingPtrInput @@ -421,6 +439,12 @@ type appProfileArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` + // 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. + RowAffinity *bool `pulumi:"rowAffinity"` // Use a single-cluster routing policy. // Structure is documented below. SingleClusterRouting *AppProfileSingleClusterRouting `pulumi:"singleClusterRouting"` @@ -454,6 +478,12 @@ type AppProfileArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput + // 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. + RowAffinity pulumi.BoolPtrInput // Use a single-cluster routing policy. // Structure is documented below. SingleClusterRouting AppProfileSingleClusterRoutingPtrInput @@ -601,6 +631,15 @@ func (o AppProfileOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *AppProfile) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } +// 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. +func (o AppProfileOutput) RowAffinity() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *AppProfile) pulumi.BoolPtrOutput { return v.RowAffinity }).(pulumi.BoolPtrOutput) +} + // Use a single-cluster routing policy. // Structure is documented below. func (o AppProfileOutput) SingleClusterRouting() AppProfileSingleClusterRoutingPtrOutput { diff --git a/sdk/go/gcp/billing/pulumiTypes.go b/sdk/go/gcp/billing/pulumiTypes.go index f9973048f7..41513793ac 100644 --- a/sdk/go/gcp/billing/pulumiTypes.go +++ b/sdk/go/gcp/billing/pulumiTypes.go @@ -1009,7 +1009,7 @@ type BudgetBudgetFilter struct { // 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. CreditTypes []string `pulumi:"creditTypes"` // Specifies how credits should be treated when determining spend // for threshold calculations. @@ -1048,7 +1048,7 @@ type BudgetBudgetFilter struct { // 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. Subaccounts []string `pulumi:"subaccounts"` } @@ -1073,7 +1073,7 @@ type BudgetBudgetFilterArgs struct { // 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. CreditTypes pulumi.StringArrayInput `pulumi:"creditTypes"` // Specifies how credits should be treated when determining spend // for threshold calculations. @@ -1112,7 +1112,7 @@ type BudgetBudgetFilterArgs struct { // 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. Subaccounts pulumi.StringArrayInput `pulumi:"subaccounts"` } @@ -1205,7 +1205,7 @@ func (o BudgetBudgetFilterOutput) CalendarPeriod() pulumi.StringPtrOutput { // 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. func (o BudgetBudgetFilterOutput) CreditTypes() pulumi.StringArrayOutput { return o.ApplyT(func(v BudgetBudgetFilter) []string { return v.CreditTypes }).(pulumi.StringArrayOutput) } @@ -1265,7 +1265,7 @@ func (o BudgetBudgetFilterOutput) Services() pulumi.StringArrayOutput { // 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. func (o BudgetBudgetFilterOutput) Subaccounts() pulumi.StringArrayOutput { return o.ApplyT(func(v BudgetBudgetFilter) []string { return v.Subaccounts }).(pulumi.StringArrayOutput) } @@ -1311,7 +1311,7 @@ func (o BudgetBudgetFilterPtrOutput) CalendarPeriod() pulumi.StringPtrOutput { // 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. func (o BudgetBudgetFilterPtrOutput) CreditTypes() pulumi.StringArrayOutput { return o.ApplyT(func(v *BudgetBudgetFilter) []string { if v == nil { @@ -1406,7 +1406,7 @@ func (o BudgetBudgetFilterPtrOutput) Services() pulumi.StringArrayOutput { // 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. func (o BudgetBudgetFilterPtrOutput) Subaccounts() pulumi.StringArrayOutput { return o.ApplyT(func(v *BudgetBudgetFilter) []string { if v == nil { diff --git a/sdk/go/gcp/certificateauthority/pulumiTypes.go b/sdk/go/gcp/certificateauthority/pulumiTypes.go index ac76d83eed..9b5275ee30 100644 --- a/sdk/go/gcp/certificateauthority/pulumiTypes.go +++ b/sdk/go/gcp/certificateauthority/pulumiTypes.go @@ -949,7 +949,7 @@ func (o AuthorityConfigSubjectConfigSubjectAltNamePtrOutput) Uris() pulumi.Strin } type AuthorityConfigSubjectKeyId struct { - // The value of the KeyId in lowercase hexidecimal. + // The value of the KeyId in lowercase hexadecimal. // // The `x509Config` block supports: KeyId *string `pulumi:"keyId"` @@ -967,7 +967,7 @@ type AuthorityConfigSubjectKeyIdInput interface { } type AuthorityConfigSubjectKeyIdArgs struct { - // The value of the KeyId in lowercase hexidecimal. + // The value of the KeyId in lowercase hexadecimal. // // The `x509Config` block supports: KeyId pulumi.StringPtrInput `pulumi:"keyId"` @@ -1050,7 +1050,7 @@ func (o AuthorityConfigSubjectKeyIdOutput) ToAuthorityConfigSubjectKeyIdPtrOutpu }).(AuthorityConfigSubjectKeyIdPtrOutput) } -// The value of the KeyId in lowercase hexidecimal. +// The value of the KeyId in lowercase hexadecimal. // // The `x509Config` block supports: func (o AuthorityConfigSubjectKeyIdOutput) KeyId() pulumi.StringPtrOutput { @@ -1081,7 +1081,7 @@ func (o AuthorityConfigSubjectKeyIdPtrOutput) Elem() AuthorityConfigSubjectKeyId }).(AuthorityConfigSubjectKeyIdOutput) } -// The value of the KeyId in lowercase hexidecimal. +// The value of the KeyId in lowercase hexadecimal. // // The `x509Config` block supports: func (o AuthorityConfigSubjectKeyIdPtrOutput) KeyId() pulumi.StringPtrOutput { @@ -8452,7 +8452,7 @@ func (o CertificateCertificateDescriptionSubjectDescriptionSubjectAltNameCustomS } type CertificateCertificateDescriptionSubjectKeyId struct { - // The value of the KeyId in lowercase hexidecimal. + // The value of the KeyId in lowercase hexadecimal. KeyId *string `pulumi:"keyId"` } @@ -8468,7 +8468,7 @@ type CertificateCertificateDescriptionSubjectKeyIdInput interface { } type CertificateCertificateDescriptionSubjectKeyIdArgs struct { - // The value of the KeyId in lowercase hexidecimal. + // The value of the KeyId in lowercase hexadecimal. KeyId pulumi.StringPtrInput `pulumi:"keyId"` } @@ -8523,7 +8523,7 @@ func (o CertificateCertificateDescriptionSubjectKeyIdOutput) ToCertificateCertif return o } -// The value of the KeyId in lowercase hexidecimal. +// The value of the KeyId in lowercase hexadecimal. func (o CertificateCertificateDescriptionSubjectKeyIdOutput) KeyId() pulumi.StringPtrOutput { return o.ApplyT(func(v CertificateCertificateDescriptionSubjectKeyId) *string { return v.KeyId }).(pulumi.StringPtrOutput) } @@ -10994,7 +10994,7 @@ func (o CertificateConfigSubjectConfigSubjectAltNamePtrOutput) Uris() pulumi.Str } type CertificateConfigSubjectKeyId struct { - // The value of the KeyId in lowercase hexidecimal. + // The value of the KeyId in lowercase hexadecimal. KeyId *string `pulumi:"keyId"` } @@ -11010,7 +11010,7 @@ type CertificateConfigSubjectKeyIdInput interface { } type CertificateConfigSubjectKeyIdArgs struct { - // The value of the KeyId in lowercase hexidecimal. + // The value of the KeyId in lowercase hexadecimal. KeyId pulumi.StringPtrInput `pulumi:"keyId"` } @@ -11091,7 +11091,7 @@ func (o CertificateConfigSubjectKeyIdOutput) ToCertificateConfigSubjectKeyIdPtrO }).(CertificateConfigSubjectKeyIdPtrOutput) } -// The value of the KeyId in lowercase hexidecimal. +// The value of the KeyId in lowercase hexadecimal. func (o CertificateConfigSubjectKeyIdOutput) KeyId() pulumi.StringPtrOutput { return o.ApplyT(func(v CertificateConfigSubjectKeyId) *string { return v.KeyId }).(pulumi.StringPtrOutput) } @@ -11120,7 +11120,7 @@ func (o CertificateConfigSubjectKeyIdPtrOutput) Elem() CertificateConfigSubjectK }).(CertificateConfigSubjectKeyIdOutput) } -// The value of the KeyId in lowercase hexidecimal. +// The value of the KeyId in lowercase hexadecimal. func (o CertificateConfigSubjectKeyIdPtrOutput) KeyId() pulumi.StringPtrOutput { return o.ApplyT(func(v *CertificateConfigSubjectKeyId) *string { if v == nil { @@ -16275,7 +16275,7 @@ func (o GetAuthorityConfigSubjectConfigSubjectAltNameArrayOutput) Index(i pulumi } type GetAuthorityConfigSubjectKeyId struct { - // The value of the KeyId in lowercase hexidecimal. + // The value of the KeyId in lowercase hexadecimal. KeyId string `pulumi:"keyId"` } @@ -16291,7 +16291,7 @@ type GetAuthorityConfigSubjectKeyIdInput interface { } type GetAuthorityConfigSubjectKeyIdArgs struct { - // The value of the KeyId in lowercase hexidecimal. + // The value of the KeyId in lowercase hexadecimal. KeyId pulumi.StringInput `pulumi:"keyId"` } @@ -16346,7 +16346,7 @@ func (o GetAuthorityConfigSubjectKeyIdOutput) ToGetAuthorityConfigSubjectKeyIdOu return o } -// The value of the KeyId in lowercase hexidecimal. +// The value of the KeyId in lowercase hexadecimal. func (o GetAuthorityConfigSubjectKeyIdOutput) KeyId() pulumi.StringOutput { return o.ApplyT(func(v GetAuthorityConfigSubjectKeyId) string { return v.KeyId }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/cloudbuild/pulumiTypes.go b/sdk/go/gcp/cloudbuild/pulumiTypes.go index 27a73eb88c..ba85dbd91c 100644 --- a/sdk/go/gcp/cloudbuild/pulumiTypes.go +++ b/sdk/go/gcp/cloudbuild/pulumiTypes.go @@ -6945,6 +6945,162 @@ func (o WorkerPoolNetworkConfigPtrOutput) PeeredNetworkIpRange() pulumi.StringPt }).(pulumi.StringPtrOutput) } +type WorkerPoolPrivateServiceConnect struct { + // 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) + NetworkAttachment string `pulumi:"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. + RouteAllTraffic *bool `pulumi:"routeAllTraffic"` +} + +// WorkerPoolPrivateServiceConnectInput is an input type that accepts WorkerPoolPrivateServiceConnectArgs and WorkerPoolPrivateServiceConnectOutput values. +// You can construct a concrete instance of `WorkerPoolPrivateServiceConnectInput` via: +// +// WorkerPoolPrivateServiceConnectArgs{...} +type WorkerPoolPrivateServiceConnectInput interface { + pulumi.Input + + ToWorkerPoolPrivateServiceConnectOutput() WorkerPoolPrivateServiceConnectOutput + ToWorkerPoolPrivateServiceConnectOutputWithContext(context.Context) WorkerPoolPrivateServiceConnectOutput +} + +type WorkerPoolPrivateServiceConnectArgs struct { + // 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) + NetworkAttachment pulumi.StringInput `pulumi:"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. + RouteAllTraffic pulumi.BoolPtrInput `pulumi:"routeAllTraffic"` +} + +func (WorkerPoolPrivateServiceConnectArgs) ElementType() reflect.Type { + return reflect.TypeOf((*WorkerPoolPrivateServiceConnect)(nil)).Elem() +} + +func (i WorkerPoolPrivateServiceConnectArgs) ToWorkerPoolPrivateServiceConnectOutput() WorkerPoolPrivateServiceConnectOutput { + return i.ToWorkerPoolPrivateServiceConnectOutputWithContext(context.Background()) +} + +func (i WorkerPoolPrivateServiceConnectArgs) ToWorkerPoolPrivateServiceConnectOutputWithContext(ctx context.Context) WorkerPoolPrivateServiceConnectOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkerPoolPrivateServiceConnectOutput) +} + +func (i WorkerPoolPrivateServiceConnectArgs) ToWorkerPoolPrivateServiceConnectPtrOutput() WorkerPoolPrivateServiceConnectPtrOutput { + return i.ToWorkerPoolPrivateServiceConnectPtrOutputWithContext(context.Background()) +} + +func (i WorkerPoolPrivateServiceConnectArgs) ToWorkerPoolPrivateServiceConnectPtrOutputWithContext(ctx context.Context) WorkerPoolPrivateServiceConnectPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkerPoolPrivateServiceConnectOutput).ToWorkerPoolPrivateServiceConnectPtrOutputWithContext(ctx) +} + +// WorkerPoolPrivateServiceConnectPtrInput is an input type that accepts WorkerPoolPrivateServiceConnectArgs, WorkerPoolPrivateServiceConnectPtr and WorkerPoolPrivateServiceConnectPtrOutput values. +// You can construct a concrete instance of `WorkerPoolPrivateServiceConnectPtrInput` via: +// +// WorkerPoolPrivateServiceConnectArgs{...} +// +// or: +// +// nil +type WorkerPoolPrivateServiceConnectPtrInput interface { + pulumi.Input + + ToWorkerPoolPrivateServiceConnectPtrOutput() WorkerPoolPrivateServiceConnectPtrOutput + ToWorkerPoolPrivateServiceConnectPtrOutputWithContext(context.Context) WorkerPoolPrivateServiceConnectPtrOutput +} + +type workerPoolPrivateServiceConnectPtrType WorkerPoolPrivateServiceConnectArgs + +func WorkerPoolPrivateServiceConnectPtr(v *WorkerPoolPrivateServiceConnectArgs) WorkerPoolPrivateServiceConnectPtrInput { + return (*workerPoolPrivateServiceConnectPtrType)(v) +} + +func (*workerPoolPrivateServiceConnectPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**WorkerPoolPrivateServiceConnect)(nil)).Elem() +} + +func (i *workerPoolPrivateServiceConnectPtrType) ToWorkerPoolPrivateServiceConnectPtrOutput() WorkerPoolPrivateServiceConnectPtrOutput { + return i.ToWorkerPoolPrivateServiceConnectPtrOutputWithContext(context.Background()) +} + +func (i *workerPoolPrivateServiceConnectPtrType) ToWorkerPoolPrivateServiceConnectPtrOutputWithContext(ctx context.Context) WorkerPoolPrivateServiceConnectPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkerPoolPrivateServiceConnectPtrOutput) +} + +type WorkerPoolPrivateServiceConnectOutput struct{ *pulumi.OutputState } + +func (WorkerPoolPrivateServiceConnectOutput) ElementType() reflect.Type { + return reflect.TypeOf((*WorkerPoolPrivateServiceConnect)(nil)).Elem() +} + +func (o WorkerPoolPrivateServiceConnectOutput) ToWorkerPoolPrivateServiceConnectOutput() WorkerPoolPrivateServiceConnectOutput { + return o +} + +func (o WorkerPoolPrivateServiceConnectOutput) ToWorkerPoolPrivateServiceConnectOutputWithContext(ctx context.Context) WorkerPoolPrivateServiceConnectOutput { + return o +} + +func (o WorkerPoolPrivateServiceConnectOutput) ToWorkerPoolPrivateServiceConnectPtrOutput() WorkerPoolPrivateServiceConnectPtrOutput { + return o.ToWorkerPoolPrivateServiceConnectPtrOutputWithContext(context.Background()) +} + +func (o WorkerPoolPrivateServiceConnectOutput) ToWorkerPoolPrivateServiceConnectPtrOutputWithContext(ctx context.Context) WorkerPoolPrivateServiceConnectPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v WorkerPoolPrivateServiceConnect) *WorkerPoolPrivateServiceConnect { + return &v + }).(WorkerPoolPrivateServiceConnectPtrOutput) +} + +// 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) +func (o WorkerPoolPrivateServiceConnectOutput) NetworkAttachment() pulumi.StringOutput { + return o.ApplyT(func(v WorkerPoolPrivateServiceConnect) string { return v.NetworkAttachment }).(pulumi.StringOutput) +} + +// 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. +func (o WorkerPoolPrivateServiceConnectOutput) RouteAllTraffic() pulumi.BoolPtrOutput { + return o.ApplyT(func(v WorkerPoolPrivateServiceConnect) *bool { return v.RouteAllTraffic }).(pulumi.BoolPtrOutput) +} + +type WorkerPoolPrivateServiceConnectPtrOutput struct{ *pulumi.OutputState } + +func (WorkerPoolPrivateServiceConnectPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**WorkerPoolPrivateServiceConnect)(nil)).Elem() +} + +func (o WorkerPoolPrivateServiceConnectPtrOutput) ToWorkerPoolPrivateServiceConnectPtrOutput() WorkerPoolPrivateServiceConnectPtrOutput { + return o +} + +func (o WorkerPoolPrivateServiceConnectPtrOutput) ToWorkerPoolPrivateServiceConnectPtrOutputWithContext(ctx context.Context) WorkerPoolPrivateServiceConnectPtrOutput { + return o +} + +func (o WorkerPoolPrivateServiceConnectPtrOutput) Elem() WorkerPoolPrivateServiceConnectOutput { + return o.ApplyT(func(v *WorkerPoolPrivateServiceConnect) WorkerPoolPrivateServiceConnect { + if v != nil { + return *v + } + var ret WorkerPoolPrivateServiceConnect + return ret + }).(WorkerPoolPrivateServiceConnectOutput) +} + +// 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) +func (o WorkerPoolPrivateServiceConnectPtrOutput) NetworkAttachment() pulumi.StringPtrOutput { + return o.ApplyT(func(v *WorkerPoolPrivateServiceConnect) *string { + if v == nil { + return nil + } + return &v.NetworkAttachment + }).(pulumi.StringPtrOutput) +} + +// 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. +func (o WorkerPoolPrivateServiceConnectPtrOutput) RouteAllTraffic() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *WorkerPoolPrivateServiceConnect) *bool { + if v == nil { + return nil + } + return v.RouteAllTraffic + }).(pulumi.BoolPtrOutput) +} + type WorkerPoolWorkerConfig struct { // Size of the disk attached to the worker, in GB. See [diskSizeGb](https://cloud.google.com/build/docs/private-pools/private-pool-config-file-schema#disksizegb). Specify a value of up to 1000. If `0` is specified, Cloud Build will use a standard disk size. DiskSizeGb *int `pulumi:"diskSizeGb"` @@ -11854,6 +12010,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*TriggerWebhookConfigPtrInput)(nil)).Elem(), TriggerWebhookConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*WorkerPoolNetworkConfigInput)(nil)).Elem(), WorkerPoolNetworkConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*WorkerPoolNetworkConfigPtrInput)(nil)).Elem(), WorkerPoolNetworkConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*WorkerPoolPrivateServiceConnectInput)(nil)).Elem(), WorkerPoolPrivateServiceConnectArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*WorkerPoolPrivateServiceConnectPtrInput)(nil)).Elem(), WorkerPoolPrivateServiceConnectArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*WorkerPoolWorkerConfigInput)(nil)).Elem(), WorkerPoolWorkerConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*WorkerPoolWorkerConfigPtrInput)(nil)).Elem(), WorkerPoolWorkerConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerApprovalConfigInput)(nil)).Elem(), GetTriggerApprovalConfigArgs{}) @@ -11990,6 +12148,8 @@ func init() { pulumi.RegisterOutputType(TriggerWebhookConfigPtrOutput{}) pulumi.RegisterOutputType(WorkerPoolNetworkConfigOutput{}) pulumi.RegisterOutputType(WorkerPoolNetworkConfigPtrOutput{}) + pulumi.RegisterOutputType(WorkerPoolPrivateServiceConnectOutput{}) + pulumi.RegisterOutputType(WorkerPoolPrivateServiceConnectPtrOutput{}) pulumi.RegisterOutputType(WorkerPoolWorkerConfigOutput{}) pulumi.RegisterOutputType(WorkerPoolWorkerConfigPtrOutput{}) pulumi.RegisterOutputType(GetTriggerApprovalConfigOutput{}) diff --git a/sdk/go/gcp/cloudbuild/workerPool.go b/sdk/go/gcp/cloudbuild/workerPool.go index 7e67d567e4..6810236720 100644 --- a/sdk/go/gcp/cloudbuild/workerPool.go +++ b/sdk/go/gcp/cloudbuild/workerPool.go @@ -170,6 +170,8 @@ type WorkerPool struct { Name pulumi.StringOutput `pulumi:"name"` // Network configuration for the `WorkerPool`. Structure is documented below. NetworkConfig WorkerPoolNetworkConfigPtrOutput `pulumi:"networkConfig"` + // Private Service Connect configuration for the pool. + PrivateServiceConnect WorkerPoolPrivateServiceConnectPtrOutput `pulumi:"privateServiceConnect"` // The project for the resource Project pulumi.StringOutput `pulumi:"project"` // Output only. WorkerPool state. Possible values: STATE_UNSPECIFIED, PENDING, APPROVED, REJECTED, CANCELLED @@ -234,6 +236,8 @@ type workerPoolState struct { Name *string `pulumi:"name"` // Network configuration for the `WorkerPool`. Structure is documented below. NetworkConfig *WorkerPoolNetworkConfig `pulumi:"networkConfig"` + // Private Service Connect configuration for the pool. + PrivateServiceConnect *WorkerPoolPrivateServiceConnect `pulumi:"privateServiceConnect"` // The project for the resource Project *string `pulumi:"project"` // Output only. WorkerPool state. Possible values: STATE_UNSPECIFIED, PENDING, APPROVED, REJECTED, CANCELLED @@ -266,6 +270,8 @@ type WorkerPoolState struct { Name pulumi.StringPtrInput // Network configuration for the `WorkerPool`. Structure is documented below. NetworkConfig WorkerPoolNetworkConfigPtrInput + // Private Service Connect configuration for the pool. + PrivateServiceConnect WorkerPoolPrivateServiceConnectPtrInput // The project for the resource Project pulumi.StringPtrInput // Output only. WorkerPool state. Possible values: STATE_UNSPECIFIED, PENDING, APPROVED, REJECTED, CANCELLED @@ -297,6 +303,8 @@ type workerPoolArgs struct { Name *string `pulumi:"name"` // Network configuration for the `WorkerPool`. Structure is documented below. NetworkConfig *WorkerPoolNetworkConfig `pulumi:"networkConfig"` + // Private Service Connect configuration for the pool. + PrivateServiceConnect *WorkerPoolPrivateServiceConnect `pulumi:"privateServiceConnect"` // The project for the resource Project *string `pulumi:"project"` // Configuration to be used for a creating workers in the `WorkerPool`. Structure is documented below. @@ -319,6 +327,8 @@ type WorkerPoolArgs struct { Name pulumi.StringPtrInput // Network configuration for the `WorkerPool`. Structure is documented below. NetworkConfig WorkerPoolNetworkConfigPtrInput + // Private Service Connect configuration for the pool. + PrivateServiceConnect WorkerPoolPrivateServiceConnectPtrInput // The project for the resource Project pulumi.StringPtrInput // Configuration to be used for a creating workers in the `WorkerPool`. Structure is documented below. @@ -455,6 +465,11 @@ func (o WorkerPoolOutput) NetworkConfig() WorkerPoolNetworkConfigPtrOutput { return o.ApplyT(func(v *WorkerPool) WorkerPoolNetworkConfigPtrOutput { return v.NetworkConfig }).(WorkerPoolNetworkConfigPtrOutput) } +// Private Service Connect configuration for the pool. +func (o WorkerPoolOutput) PrivateServiceConnect() WorkerPoolPrivateServiceConnectPtrOutput { + return o.ApplyT(func(v *WorkerPool) WorkerPoolPrivateServiceConnectPtrOutput { return v.PrivateServiceConnect }).(WorkerPoolPrivateServiceConnectPtrOutput) +} + // The project for the resource func (o WorkerPoolOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *WorkerPool) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/clouddeploy/pulumiTypes.go b/sdk/go/gcp/clouddeploy/pulumiTypes.go index 2d94670e4f..367dcd96f7 100644 --- a/sdk/go/gcp/clouddeploy/pulumiTypes.go +++ b/sdk/go/gcp/clouddeploy/pulumiTypes.go @@ -4973,6 +4973,8 @@ type DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGat HttpRoute string `pulumi:"httpRoute"` // Optional. The label to use when selecting Pods for the Deployment and Service resources. This label must already be present in both resources. PodSelectorLabel *string `pulumi:"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. + RouteDestinations *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations `pulumi:"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. RouteUpdateWaitTime *string `pulumi:"routeUpdateWaitTime"` // Required. Name of the Kubernetes Service. @@ -4999,6 +5001,8 @@ type DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGat HttpRoute pulumi.StringInput `pulumi:"httpRoute"` // Optional. The label to use when selecting Pods for the Deployment and Service resources. This label must already be present in both resources. PodSelectorLabel pulumi.StringPtrInput `pulumi:"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. + RouteDestinations DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrInput `pulumi:"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. RouteUpdateWaitTime pulumi.StringPtrInput `pulumi:"routeUpdateWaitTime"` // Required. Name of the Kubernetes Service. @@ -5105,6 +5109,13 @@ func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetes }).(pulumi.StringPtrOutput) } +// 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. +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshOutput) RouteDestinations() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return o.ApplyT(func(v DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh) *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations { + return v.RouteDestinations + }).(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) +} + // 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. func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshOutput) RouteUpdateWaitTime() pulumi.StringPtrOutput { return o.ApplyT(func(v DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh) *string { @@ -5180,6 +5191,16 @@ func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetes }).(pulumi.StringPtrOutput) } +// 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. +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshPtrOutput) RouteDestinations() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return o.ApplyT(func(v *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh) *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations { + if v == nil { + return nil + } + return v.RouteDestinations + }).(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) +} + // 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. func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshPtrOutput) RouteUpdateWaitTime() pulumi.StringPtrOutput { return o.ApplyT(func(v *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh) *string { @@ -5210,6 +5231,166 @@ func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetes }).(pulumi.StringPtrOutput) } +type DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations struct { + // 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. + DestinationIds []string `pulumi:"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. + PropagateService *bool `pulumi:"propagateService"` +} + +// DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsInput is an input type that accepts DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs and DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput values. +// You can construct a concrete instance of `DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsInput` via: +// +// DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs{...} +type DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsInput interface { + pulumi.Input + + ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput + ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutputWithContext(context.Context) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput +} + +type DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs struct { + // 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. + DestinationIds pulumi.StringArrayInput `pulumi:"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. + PropagateService pulumi.BoolPtrInput `pulumi:"propagateService"` +} + +func (DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations)(nil)).Elem() +} + +func (i DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput { + return i.ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutputWithContext(context.Background()) +} + +func (i DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutputWithContext(ctx context.Context) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput { + return pulumi.ToOutputWithContext(ctx, i).(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput) +} + +func (i DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return i.ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutputWithContext(context.Background()) +} + +func (i DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutputWithContext(ctx context.Context) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput).ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutputWithContext(ctx) +} + +// DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrInput is an input type that accepts DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs, DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtr and DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput values. +// You can construct a concrete instance of `DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrInput` via: +// +// DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs{...} +// +// or: +// +// nil +type DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrInput interface { + pulumi.Input + + ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput + ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutputWithContext(context.Context) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput +} + +type deliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrType DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs + +func DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtr(v *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrInput { + return (*deliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrType)(v) +} + +func (*deliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations)(nil)).Elem() +} + +func (i *deliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrType) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return i.ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutputWithContext(context.Background()) +} + +func (i *deliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrType) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutputWithContext(ctx context.Context) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) +} + +type DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput struct{ *pulumi.OutputState } + +func (DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations)(nil)).Elem() +} + +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput { + return o +} + +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutputWithContext(ctx context.Context) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput { + return o +} + +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return o.ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutputWithContext(context.Background()) +} + +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutputWithContext(ctx context.Context) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations) *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations { + return &v + }).(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) +} + +// 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. +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput) DestinationIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations) []string { + return v.DestinationIds + }).(pulumi.StringArrayOutput) +} + +// 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. +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput) PropagateService() pulumi.BoolPtrOutput { + return o.ApplyT(func(v DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations) *bool { + return v.PropagateService + }).(pulumi.BoolPtrOutput) +} + +type DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput struct{ *pulumi.OutputState } + +func (DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations)(nil)).Elem() +} + +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return o +} + +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) ToDeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutputWithContext(ctx context.Context) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput { + return o +} + +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) Elem() DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput { + return o.ApplyT(func(v *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations) DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations { + if v != nil { + return *v + } + var ret DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations + return ret + }).(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput) +} + +// 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. +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) DestinationIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations) []string { + if v == nil { + return nil + } + return v.DestinationIds + }).(pulumi.StringArrayOutput) +} + +// 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. +func (o DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput) PropagateService() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations) *bool { + if v == nil { + return nil + } + return v.PropagateService + }).(pulumi.BoolPtrOutput) +} + type DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworking struct { // Required. Name of the Kubernetes Deployment whose traffic is managed by the specified Service. Deployment string `pulumi:"deployment"` @@ -6002,6 +6183,333 @@ func (o TargetAnthosClusterPtrOutput) Membership() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +type TargetAssociatedEntity struct { + // Optional. Information specifying Anthos clusters as associated entities. + AnthosClusters []TargetAssociatedEntityAnthosCluster `pulumi:"anthosClusters"` + // The name for the key in the map for which this object is mapped to in the API + EntityId string `pulumi:"entityId"` + // Optional. Information specifying GKE clusters as associated entities. + GkeClusters []TargetAssociatedEntityGkeCluster `pulumi:"gkeClusters"` +} + +// TargetAssociatedEntityInput is an input type that accepts TargetAssociatedEntityArgs and TargetAssociatedEntityOutput values. +// You can construct a concrete instance of `TargetAssociatedEntityInput` via: +// +// TargetAssociatedEntityArgs{...} +type TargetAssociatedEntityInput interface { + pulumi.Input + + ToTargetAssociatedEntityOutput() TargetAssociatedEntityOutput + ToTargetAssociatedEntityOutputWithContext(context.Context) TargetAssociatedEntityOutput +} + +type TargetAssociatedEntityArgs struct { + // Optional. Information specifying Anthos clusters as associated entities. + AnthosClusters TargetAssociatedEntityAnthosClusterArrayInput `pulumi:"anthosClusters"` + // The name for the key in the map for which this object is mapped to in the API + EntityId pulumi.StringInput `pulumi:"entityId"` + // Optional. Information specifying GKE clusters as associated entities. + GkeClusters TargetAssociatedEntityGkeClusterArrayInput `pulumi:"gkeClusters"` +} + +func (TargetAssociatedEntityArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TargetAssociatedEntity)(nil)).Elem() +} + +func (i TargetAssociatedEntityArgs) ToTargetAssociatedEntityOutput() TargetAssociatedEntityOutput { + return i.ToTargetAssociatedEntityOutputWithContext(context.Background()) +} + +func (i TargetAssociatedEntityArgs) ToTargetAssociatedEntityOutputWithContext(ctx context.Context) TargetAssociatedEntityOutput { + return pulumi.ToOutputWithContext(ctx, i).(TargetAssociatedEntityOutput) +} + +// TargetAssociatedEntityArrayInput is an input type that accepts TargetAssociatedEntityArray and TargetAssociatedEntityArrayOutput values. +// You can construct a concrete instance of `TargetAssociatedEntityArrayInput` via: +// +// TargetAssociatedEntityArray{ TargetAssociatedEntityArgs{...} } +type TargetAssociatedEntityArrayInput interface { + pulumi.Input + + ToTargetAssociatedEntityArrayOutput() TargetAssociatedEntityArrayOutput + ToTargetAssociatedEntityArrayOutputWithContext(context.Context) TargetAssociatedEntityArrayOutput +} + +type TargetAssociatedEntityArray []TargetAssociatedEntityInput + +func (TargetAssociatedEntityArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]TargetAssociatedEntity)(nil)).Elem() +} + +func (i TargetAssociatedEntityArray) ToTargetAssociatedEntityArrayOutput() TargetAssociatedEntityArrayOutput { + return i.ToTargetAssociatedEntityArrayOutputWithContext(context.Background()) +} + +func (i TargetAssociatedEntityArray) ToTargetAssociatedEntityArrayOutputWithContext(ctx context.Context) TargetAssociatedEntityArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TargetAssociatedEntityArrayOutput) +} + +type TargetAssociatedEntityOutput struct{ *pulumi.OutputState } + +func (TargetAssociatedEntityOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TargetAssociatedEntity)(nil)).Elem() +} + +func (o TargetAssociatedEntityOutput) ToTargetAssociatedEntityOutput() TargetAssociatedEntityOutput { + return o +} + +func (o TargetAssociatedEntityOutput) ToTargetAssociatedEntityOutputWithContext(ctx context.Context) TargetAssociatedEntityOutput { + return o +} + +// Optional. Information specifying Anthos clusters as associated entities. +func (o TargetAssociatedEntityOutput) AnthosClusters() TargetAssociatedEntityAnthosClusterArrayOutput { + return o.ApplyT(func(v TargetAssociatedEntity) []TargetAssociatedEntityAnthosCluster { return v.AnthosClusters }).(TargetAssociatedEntityAnthosClusterArrayOutput) +} + +// The name for the key in the map for which this object is mapped to in the API +func (o TargetAssociatedEntityOutput) EntityId() pulumi.StringOutput { + return o.ApplyT(func(v TargetAssociatedEntity) string { return v.EntityId }).(pulumi.StringOutput) +} + +// Optional. Information specifying GKE clusters as associated entities. +func (o TargetAssociatedEntityOutput) GkeClusters() TargetAssociatedEntityGkeClusterArrayOutput { + return o.ApplyT(func(v TargetAssociatedEntity) []TargetAssociatedEntityGkeCluster { return v.GkeClusters }).(TargetAssociatedEntityGkeClusterArrayOutput) +} + +type TargetAssociatedEntityArrayOutput struct{ *pulumi.OutputState } + +func (TargetAssociatedEntityArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]TargetAssociatedEntity)(nil)).Elem() +} + +func (o TargetAssociatedEntityArrayOutput) ToTargetAssociatedEntityArrayOutput() TargetAssociatedEntityArrayOutput { + return o +} + +func (o TargetAssociatedEntityArrayOutput) ToTargetAssociatedEntityArrayOutputWithContext(ctx context.Context) TargetAssociatedEntityArrayOutput { + return o +} + +func (o TargetAssociatedEntityArrayOutput) Index(i pulumi.IntInput) TargetAssociatedEntityOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) TargetAssociatedEntity { + return vs[0].([]TargetAssociatedEntity)[vs[1].(int)] + }).(TargetAssociatedEntityOutput) +} + +type TargetAssociatedEntityAnthosCluster struct { + // Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + Membership *string `pulumi:"membership"` +} + +// TargetAssociatedEntityAnthosClusterInput is an input type that accepts TargetAssociatedEntityAnthosClusterArgs and TargetAssociatedEntityAnthosClusterOutput values. +// You can construct a concrete instance of `TargetAssociatedEntityAnthosClusterInput` via: +// +// TargetAssociatedEntityAnthosClusterArgs{...} +type TargetAssociatedEntityAnthosClusterInput interface { + pulumi.Input + + ToTargetAssociatedEntityAnthosClusterOutput() TargetAssociatedEntityAnthosClusterOutput + ToTargetAssociatedEntityAnthosClusterOutputWithContext(context.Context) TargetAssociatedEntityAnthosClusterOutput +} + +type TargetAssociatedEntityAnthosClusterArgs struct { + // Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + Membership pulumi.StringPtrInput `pulumi:"membership"` +} + +func (TargetAssociatedEntityAnthosClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TargetAssociatedEntityAnthosCluster)(nil)).Elem() +} + +func (i TargetAssociatedEntityAnthosClusterArgs) ToTargetAssociatedEntityAnthosClusterOutput() TargetAssociatedEntityAnthosClusterOutput { + return i.ToTargetAssociatedEntityAnthosClusterOutputWithContext(context.Background()) +} + +func (i TargetAssociatedEntityAnthosClusterArgs) ToTargetAssociatedEntityAnthosClusterOutputWithContext(ctx context.Context) TargetAssociatedEntityAnthosClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(TargetAssociatedEntityAnthosClusterOutput) +} + +// TargetAssociatedEntityAnthosClusterArrayInput is an input type that accepts TargetAssociatedEntityAnthosClusterArray and TargetAssociatedEntityAnthosClusterArrayOutput values. +// You can construct a concrete instance of `TargetAssociatedEntityAnthosClusterArrayInput` via: +// +// TargetAssociatedEntityAnthosClusterArray{ TargetAssociatedEntityAnthosClusterArgs{...} } +type TargetAssociatedEntityAnthosClusterArrayInput interface { + pulumi.Input + + ToTargetAssociatedEntityAnthosClusterArrayOutput() TargetAssociatedEntityAnthosClusterArrayOutput + ToTargetAssociatedEntityAnthosClusterArrayOutputWithContext(context.Context) TargetAssociatedEntityAnthosClusterArrayOutput +} + +type TargetAssociatedEntityAnthosClusterArray []TargetAssociatedEntityAnthosClusterInput + +func (TargetAssociatedEntityAnthosClusterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]TargetAssociatedEntityAnthosCluster)(nil)).Elem() +} + +func (i TargetAssociatedEntityAnthosClusterArray) ToTargetAssociatedEntityAnthosClusterArrayOutput() TargetAssociatedEntityAnthosClusterArrayOutput { + return i.ToTargetAssociatedEntityAnthosClusterArrayOutputWithContext(context.Background()) +} + +func (i TargetAssociatedEntityAnthosClusterArray) ToTargetAssociatedEntityAnthosClusterArrayOutputWithContext(ctx context.Context) TargetAssociatedEntityAnthosClusterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TargetAssociatedEntityAnthosClusterArrayOutput) +} + +type TargetAssociatedEntityAnthosClusterOutput struct{ *pulumi.OutputState } + +func (TargetAssociatedEntityAnthosClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TargetAssociatedEntityAnthosCluster)(nil)).Elem() +} + +func (o TargetAssociatedEntityAnthosClusterOutput) ToTargetAssociatedEntityAnthosClusterOutput() TargetAssociatedEntityAnthosClusterOutput { + return o +} + +func (o TargetAssociatedEntityAnthosClusterOutput) ToTargetAssociatedEntityAnthosClusterOutputWithContext(ctx context.Context) TargetAssociatedEntityAnthosClusterOutput { + return o +} + +// Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. +func (o TargetAssociatedEntityAnthosClusterOutput) Membership() pulumi.StringPtrOutput { + return o.ApplyT(func(v TargetAssociatedEntityAnthosCluster) *string { return v.Membership }).(pulumi.StringPtrOutput) +} + +type TargetAssociatedEntityAnthosClusterArrayOutput struct{ *pulumi.OutputState } + +func (TargetAssociatedEntityAnthosClusterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]TargetAssociatedEntityAnthosCluster)(nil)).Elem() +} + +func (o TargetAssociatedEntityAnthosClusterArrayOutput) ToTargetAssociatedEntityAnthosClusterArrayOutput() TargetAssociatedEntityAnthosClusterArrayOutput { + return o +} + +func (o TargetAssociatedEntityAnthosClusterArrayOutput) ToTargetAssociatedEntityAnthosClusterArrayOutputWithContext(ctx context.Context) TargetAssociatedEntityAnthosClusterArrayOutput { + return o +} + +func (o TargetAssociatedEntityAnthosClusterArrayOutput) Index(i pulumi.IntInput) TargetAssociatedEntityAnthosClusterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) TargetAssociatedEntityAnthosCluster { + return vs[0].([]TargetAssociatedEntityAnthosCluster)[vs[1].(int)] + }).(TargetAssociatedEntityAnthosClusterOutput) +} + +type TargetAssociatedEntityGkeCluster struct { + // Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + Cluster *string `pulumi:"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). + InternalIp *bool `pulumi:"internalIp"` + // Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + ProxyUrl *string `pulumi:"proxyUrl"` +} + +// TargetAssociatedEntityGkeClusterInput is an input type that accepts TargetAssociatedEntityGkeClusterArgs and TargetAssociatedEntityGkeClusterOutput values. +// You can construct a concrete instance of `TargetAssociatedEntityGkeClusterInput` via: +// +// TargetAssociatedEntityGkeClusterArgs{...} +type TargetAssociatedEntityGkeClusterInput interface { + pulumi.Input + + ToTargetAssociatedEntityGkeClusterOutput() TargetAssociatedEntityGkeClusterOutput + ToTargetAssociatedEntityGkeClusterOutputWithContext(context.Context) TargetAssociatedEntityGkeClusterOutput +} + +type TargetAssociatedEntityGkeClusterArgs struct { + // Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + Cluster pulumi.StringPtrInput `pulumi:"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). + InternalIp pulumi.BoolPtrInput `pulumi:"internalIp"` + // Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + ProxyUrl pulumi.StringPtrInput `pulumi:"proxyUrl"` +} + +func (TargetAssociatedEntityGkeClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TargetAssociatedEntityGkeCluster)(nil)).Elem() +} + +func (i TargetAssociatedEntityGkeClusterArgs) ToTargetAssociatedEntityGkeClusterOutput() TargetAssociatedEntityGkeClusterOutput { + return i.ToTargetAssociatedEntityGkeClusterOutputWithContext(context.Background()) +} + +func (i TargetAssociatedEntityGkeClusterArgs) ToTargetAssociatedEntityGkeClusterOutputWithContext(ctx context.Context) TargetAssociatedEntityGkeClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(TargetAssociatedEntityGkeClusterOutput) +} + +// TargetAssociatedEntityGkeClusterArrayInput is an input type that accepts TargetAssociatedEntityGkeClusterArray and TargetAssociatedEntityGkeClusterArrayOutput values. +// You can construct a concrete instance of `TargetAssociatedEntityGkeClusterArrayInput` via: +// +// TargetAssociatedEntityGkeClusterArray{ TargetAssociatedEntityGkeClusterArgs{...} } +type TargetAssociatedEntityGkeClusterArrayInput interface { + pulumi.Input + + ToTargetAssociatedEntityGkeClusterArrayOutput() TargetAssociatedEntityGkeClusterArrayOutput + ToTargetAssociatedEntityGkeClusterArrayOutputWithContext(context.Context) TargetAssociatedEntityGkeClusterArrayOutput +} + +type TargetAssociatedEntityGkeClusterArray []TargetAssociatedEntityGkeClusterInput + +func (TargetAssociatedEntityGkeClusterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]TargetAssociatedEntityGkeCluster)(nil)).Elem() +} + +func (i TargetAssociatedEntityGkeClusterArray) ToTargetAssociatedEntityGkeClusterArrayOutput() TargetAssociatedEntityGkeClusterArrayOutput { + return i.ToTargetAssociatedEntityGkeClusterArrayOutputWithContext(context.Background()) +} + +func (i TargetAssociatedEntityGkeClusterArray) ToTargetAssociatedEntityGkeClusterArrayOutputWithContext(ctx context.Context) TargetAssociatedEntityGkeClusterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TargetAssociatedEntityGkeClusterArrayOutput) +} + +type TargetAssociatedEntityGkeClusterOutput struct{ *pulumi.OutputState } + +func (TargetAssociatedEntityGkeClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TargetAssociatedEntityGkeCluster)(nil)).Elem() +} + +func (o TargetAssociatedEntityGkeClusterOutput) ToTargetAssociatedEntityGkeClusterOutput() TargetAssociatedEntityGkeClusterOutput { + return o +} + +func (o TargetAssociatedEntityGkeClusterOutput) ToTargetAssociatedEntityGkeClusterOutputWithContext(ctx context.Context) TargetAssociatedEntityGkeClusterOutput { + return o +} + +// Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. +func (o TargetAssociatedEntityGkeClusterOutput) Cluster() pulumi.StringPtrOutput { + return o.ApplyT(func(v TargetAssociatedEntityGkeCluster) *string { return v.Cluster }).(pulumi.StringPtrOutput) +} + +// 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). +func (o TargetAssociatedEntityGkeClusterOutput) InternalIp() pulumi.BoolPtrOutput { + return o.ApplyT(func(v TargetAssociatedEntityGkeCluster) *bool { return v.InternalIp }).(pulumi.BoolPtrOutput) +} + +// Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. +func (o TargetAssociatedEntityGkeClusterOutput) ProxyUrl() pulumi.StringPtrOutput { + return o.ApplyT(func(v TargetAssociatedEntityGkeCluster) *string { return v.ProxyUrl }).(pulumi.StringPtrOutput) +} + +type TargetAssociatedEntityGkeClusterArrayOutput struct{ *pulumi.OutputState } + +func (TargetAssociatedEntityGkeClusterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]TargetAssociatedEntityGkeCluster)(nil)).Elem() +} + +func (o TargetAssociatedEntityGkeClusterArrayOutput) ToTargetAssociatedEntityGkeClusterArrayOutput() TargetAssociatedEntityGkeClusterArrayOutput { + return o +} + +func (o TargetAssociatedEntityGkeClusterArrayOutput) ToTargetAssociatedEntityGkeClusterArrayOutputWithContext(ctx context.Context) TargetAssociatedEntityGkeClusterArrayOutput { + return o +} + +func (o TargetAssociatedEntityGkeClusterArrayOutput) Index(i pulumi.IntInput) TargetAssociatedEntityGkeClusterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) TargetAssociatedEntityGkeCluster { + return vs[0].([]TargetAssociatedEntityGkeCluster)[vs[1].(int)] + }).(TargetAssociatedEntityGkeClusterOutput) +} + type TargetCustomTarget struct { // Required. The name of the CustomTargetType. Format must be `projects/{project}/locations/{location}/customTargetTypes/{custom_target_type}`. CustomTargetType string `pulumi:"customTargetType"` @@ -7125,6 +7633,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesPtrInput)(nil)).Elem(), DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshInput)(nil)).Elem(), DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshPtrInput)(nil)).Elem(), DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsInput)(nil)).Elem(), DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrInput)(nil)).Elem(), DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworkingInput)(nil)).Elem(), DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworkingArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworkingPtrInput)(nil)).Elem(), DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworkingArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyStandardInput)(nil)).Elem(), DeliveryPipelineSerialPipelineStageStrategyStandardArgs{}) @@ -7135,6 +7645,12 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*DeliveryPipelineSerialPipelineStageStrategyStandardPredeployPtrInput)(nil)).Elem(), DeliveryPipelineSerialPipelineStageStrategyStandardPredeployArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TargetAnthosClusterInput)(nil)).Elem(), TargetAnthosClusterArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TargetAnthosClusterPtrInput)(nil)).Elem(), TargetAnthosClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TargetAssociatedEntityInput)(nil)).Elem(), TargetAssociatedEntityArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TargetAssociatedEntityArrayInput)(nil)).Elem(), TargetAssociatedEntityArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TargetAssociatedEntityAnthosClusterInput)(nil)).Elem(), TargetAssociatedEntityAnthosClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TargetAssociatedEntityAnthosClusterArrayInput)(nil)).Elem(), TargetAssociatedEntityAnthosClusterArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TargetAssociatedEntityGkeClusterInput)(nil)).Elem(), TargetAssociatedEntityGkeClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TargetAssociatedEntityGkeClusterArrayInput)(nil)).Elem(), TargetAssociatedEntityGkeClusterArray{}) pulumi.RegisterInputType(reflect.TypeOf((*TargetCustomTargetInput)(nil)).Elem(), TargetCustomTargetArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TargetCustomTargetPtrInput)(nil)).Elem(), TargetCustomTargetArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TargetExecutionConfigInput)(nil)).Elem(), TargetExecutionConfigArgs{}) @@ -7217,6 +7733,8 @@ func init() { pulumi.RegisterOutputType(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesPtrOutput{}) pulumi.RegisterOutputType(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshOutput{}) pulumi.RegisterOutputType(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshPtrOutput{}) + pulumi.RegisterOutputType(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsOutput{}) + pulumi.RegisterOutputType(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsPtrOutput{}) pulumi.RegisterOutputType(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworkingOutput{}) pulumi.RegisterOutputType(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworkingPtrOutput{}) pulumi.RegisterOutputType(DeliveryPipelineSerialPipelineStageStrategyStandardOutput{}) @@ -7227,6 +7745,12 @@ func init() { pulumi.RegisterOutputType(DeliveryPipelineSerialPipelineStageStrategyStandardPredeployPtrOutput{}) pulumi.RegisterOutputType(TargetAnthosClusterOutput{}) pulumi.RegisterOutputType(TargetAnthosClusterPtrOutput{}) + pulumi.RegisterOutputType(TargetAssociatedEntityOutput{}) + pulumi.RegisterOutputType(TargetAssociatedEntityArrayOutput{}) + pulumi.RegisterOutputType(TargetAssociatedEntityAnthosClusterOutput{}) + pulumi.RegisterOutputType(TargetAssociatedEntityAnthosClusterArrayOutput{}) + pulumi.RegisterOutputType(TargetAssociatedEntityGkeClusterOutput{}) + pulumi.RegisterOutputType(TargetAssociatedEntityGkeClusterArrayOutput{}) pulumi.RegisterOutputType(TargetCustomTargetOutput{}) pulumi.RegisterOutputType(TargetCustomTargetPtrOutput{}) pulumi.RegisterOutputType(TargetExecutionConfigOutput{}) diff --git a/sdk/go/gcp/clouddeploy/target.go b/sdk/go/gcp/clouddeploy/target.go index b7003c7372..d48248d4da 100644 --- a/sdk/go/gcp/clouddeploy/target.go +++ b/sdk/go/gcp/clouddeploy/target.go @@ -196,6 +196,8 @@ type Target struct { Annotations pulumi.StringMapOutput `pulumi:"annotations"` // Information specifying an Anthos Cluster. AnthosCluster TargetAnthosClusterPtrOutput `pulumi:"anthosCluster"` + // 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?$`. + AssociatedEntities TargetAssociatedEntityArrayOutput `pulumi:"associatedEntities"` // Output only. Time at which the `Target` was created. CreateTime pulumi.StringOutput `pulumi:"createTime"` // Optional. Information specifying a Custom Target. @@ -287,6 +289,8 @@ type targetState struct { Annotations map[string]string `pulumi:"annotations"` // Information specifying an Anthos Cluster. AnthosCluster *TargetAnthosCluster `pulumi:"anthosCluster"` + // 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?$`. + AssociatedEntities []TargetAssociatedEntity `pulumi:"associatedEntities"` // Output only. Time at which the `Target` was created. CreateTime *string `pulumi:"createTime"` // Optional. Information specifying a Custom Target. @@ -341,6 +345,8 @@ type TargetState struct { Annotations pulumi.StringMapInput // Information specifying an Anthos Cluster. AnthosCluster TargetAnthosClusterPtrInput + // 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?$`. + AssociatedEntities TargetAssociatedEntityArrayInput // Output only. Time at which the `Target` was created. CreateTime pulumi.StringPtrInput // Optional. Information specifying a Custom Target. @@ -399,6 +405,8 @@ type targetArgs struct { Annotations map[string]string `pulumi:"annotations"` // Information specifying an Anthos Cluster. AnthosCluster *TargetAnthosCluster `pulumi:"anthosCluster"` + // 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?$`. + AssociatedEntities []TargetAssociatedEntity `pulumi:"associatedEntities"` // Optional. Information specifying a Custom Target. CustomTarget *TargetCustomTarget `pulumi:"customTarget"` // Optional. The deploy parameters to use for this target. @@ -439,6 +447,8 @@ type TargetArgs struct { Annotations pulumi.StringMapInput // Information specifying an Anthos Cluster. AnthosCluster TargetAnthosClusterPtrInput + // 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?$`. + AssociatedEntities TargetAssociatedEntityArrayInput // Optional. Information specifying a Custom Target. CustomTarget TargetCustomTargetPtrInput // Optional. The deploy parameters to use for this target. @@ -570,6 +580,11 @@ func (o TargetOutput) AnthosCluster() TargetAnthosClusterPtrOutput { return o.ApplyT(func(v *Target) TargetAnthosClusterPtrOutput { return v.AnthosCluster }).(TargetAnthosClusterPtrOutput) } +// 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?$`. +func (o TargetOutput) AssociatedEntities() TargetAssociatedEntityArrayOutput { + return o.ApplyT(func(v *Target) TargetAssociatedEntityArrayOutput { return v.AssociatedEntities }).(TargetAssociatedEntityArrayOutput) +} + // Output only. Time at which the `Target` was created. func (o TargetOutput) CreateTime() pulumi.StringOutput { return o.ApplyT(func(v *Target) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/cloudfunctionsv2/pulumiTypes.go b/sdk/go/gcp/cloudfunctionsv2/pulumiTypes.go index 8054dbece4..e11d9645da 100644 --- a/sdk/go/gcp/cloudfunctionsv2/pulumiTypes.go +++ b/sdk/go/gcp/cloudfunctionsv2/pulumiTypes.go @@ -2473,7 +2473,7 @@ func (o FunctionServiceConfigPtrOutput) VpcConnectorEgressSettings() pulumi.Stri type FunctionServiceConfigSecretEnvironmentVariable struct { // Name of the environment variable. Key string `pulumi:"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. ProjectId string `pulumi:"projectId"` // Name of the secret in secret manager (not the full resource name). Secret string `pulumi:"secret"` @@ -2495,7 +2495,7 @@ type FunctionServiceConfigSecretEnvironmentVariableInput interface { type FunctionServiceConfigSecretEnvironmentVariableArgs struct { // Name of the environment variable. Key pulumi.StringInput `pulumi:"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. ProjectId pulumi.StringInput `pulumi:"projectId"` // Name of the secret in secret manager (not the full resource name). Secret pulumi.StringInput `pulumi:"secret"` @@ -2559,7 +2559,7 @@ func (o FunctionServiceConfigSecretEnvironmentVariableOutput) Key() pulumi.Strin return o.ApplyT(func(v FunctionServiceConfigSecretEnvironmentVariable) string { return v.Key }).(pulumi.StringOutput) } -// 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. func (o FunctionServiceConfigSecretEnvironmentVariableOutput) ProjectId() pulumi.StringOutput { return o.ApplyT(func(v FunctionServiceConfigSecretEnvironmentVariable) string { return v.ProjectId }).(pulumi.StringOutput) } @@ -2597,7 +2597,7 @@ func (o FunctionServiceConfigSecretEnvironmentVariableArrayOutput) Index(i pulum type FunctionServiceConfigSecretVolume struct { // The path within the container to mount the secret volume. For example, setting the mountPath as /etc/secrets would mount the secret value files under the /etc/secrets directory. This directory will also be completely shadowed and unavailable to mount any other secrets. Recommended mount path: /etc/secrets MountPath string `pulumi:"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. ProjectId string `pulumi:"projectId"` // Name of the secret in secret manager (not the full resource name). Secret string `pulumi:"secret"` @@ -2620,7 +2620,7 @@ type FunctionServiceConfigSecretVolumeInput interface { type FunctionServiceConfigSecretVolumeArgs struct { // The path within the container to mount the secret volume. For example, setting the mountPath as /etc/secrets would mount the secret value files under the /etc/secrets directory. This directory will also be completely shadowed and unavailable to mount any other secrets. Recommended mount path: /etc/secrets MountPath pulumi.StringInput `pulumi:"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. ProjectId pulumi.StringInput `pulumi:"projectId"` // Name of the secret in secret manager (not the full resource name). Secret pulumi.StringInput `pulumi:"secret"` @@ -2685,7 +2685,7 @@ func (o FunctionServiceConfigSecretVolumeOutput) MountPath() pulumi.StringOutput return o.ApplyT(func(v FunctionServiceConfigSecretVolume) string { return v.MountPath }).(pulumi.StringOutput) } -// 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. func (o FunctionServiceConfigSecretVolumeOutput) ProjectId() pulumi.StringOutput { return o.ApplyT(func(v FunctionServiceConfigSecretVolume) string { return v.ProjectId }).(pulumi.StringOutput) } @@ -4172,7 +4172,7 @@ func (o GetFunctionServiceConfigArrayOutput) Index(i pulumi.IntInput) GetFunctio type GetFunctionServiceConfigSecretEnvironmentVariable struct { // Name of the environment variable. Key string `pulumi:"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. ProjectId string `pulumi:"projectId"` // Name of the secret in secret manager (not the full resource name). Secret string `pulumi:"secret"` @@ -4194,7 +4194,7 @@ type GetFunctionServiceConfigSecretEnvironmentVariableInput interface { type GetFunctionServiceConfigSecretEnvironmentVariableArgs struct { // Name of the environment variable. Key pulumi.StringInput `pulumi:"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. ProjectId pulumi.StringInput `pulumi:"projectId"` // Name of the secret in secret manager (not the full resource name). Secret pulumi.StringInput `pulumi:"secret"` @@ -4258,7 +4258,7 @@ func (o GetFunctionServiceConfigSecretEnvironmentVariableOutput) Key() pulumi.St return o.ApplyT(func(v GetFunctionServiceConfigSecretEnvironmentVariable) string { return v.Key }).(pulumi.StringOutput) } -// 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. func (o GetFunctionServiceConfigSecretEnvironmentVariableOutput) ProjectId() pulumi.StringOutput { return o.ApplyT(func(v GetFunctionServiceConfigSecretEnvironmentVariable) string { return v.ProjectId }).(pulumi.StringOutput) } @@ -4296,7 +4296,7 @@ func (o GetFunctionServiceConfigSecretEnvironmentVariableArrayOutput) Index(i pu type GetFunctionServiceConfigSecretVolume struct { // The path within the container to mount the secret volume. For example, setting the mountPath as /etc/secrets would mount the secret value files under the /etc/secrets directory. This directory will also be completely shadowed and unavailable to mount any other secrets. Recommended mount path: /etc/secrets MountPath string `pulumi:"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. ProjectId string `pulumi:"projectId"` // Name of the secret in secret manager (not the full resource name). Secret string `pulumi:"secret"` @@ -4318,7 +4318,7 @@ type GetFunctionServiceConfigSecretVolumeInput interface { type GetFunctionServiceConfigSecretVolumeArgs struct { // The path within the container to mount the secret volume. For example, setting the mountPath as /etc/secrets would mount the secret value files under the /etc/secrets directory. This directory will also be completely shadowed and unavailable to mount any other secrets. Recommended mount path: /etc/secrets MountPath pulumi.StringInput `pulumi:"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. ProjectId pulumi.StringInput `pulumi:"projectId"` // Name of the secret in secret manager (not the full resource name). Secret pulumi.StringInput `pulumi:"secret"` @@ -4382,7 +4382,7 @@ func (o GetFunctionServiceConfigSecretVolumeOutput) MountPath() pulumi.StringOut return o.ApplyT(func(v GetFunctionServiceConfigSecretVolume) string { return v.MountPath }).(pulumi.StringOutput) } -// 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. func (o GetFunctionServiceConfigSecretVolumeOutput) ProjectId() pulumi.StringOutput { return o.ApplyT(func(v GetFunctionServiceConfigSecretVolume) string { return v.ProjectId }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/cloudrunv2/job.go b/sdk/go/gcp/cloudrunv2/job.go index e0e64968c9..3a8db6b981 100644 --- a/sdk/go/gcp/cloudrunv2/job.go +++ b/sdk/go/gcp/cloudrunv2/job.go @@ -578,7 +578,7 @@ type Job struct { Etag pulumi.StringOutput `pulumi:"etag"` // Number of executions created for this job. ExecutionCount pulumi.IntOutput `pulumi:"executionCount"` - // 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. ExpireTime pulumi.StringOutput `pulumi:"expireTime"` // A number that monotonically increases every time the user modifies the desired state. Generation pulumi.StringOutput `pulumi:"generation"` @@ -710,7 +710,7 @@ type jobState struct { Etag *string `pulumi:"etag"` // Number of executions created for this job. ExecutionCount *int `pulumi:"executionCount"` - // 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. ExpireTime *string `pulumi:"expireTime"` // A number that monotonically increases every time the user modifies the desired state. Generation *string `pulumi:"generation"` @@ -802,7 +802,7 @@ type JobState struct { Etag pulumi.StringPtrInput // Number of executions created for this job. ExecutionCount pulumi.IntPtrInput - // 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. ExpireTime pulumi.StringPtrInput // A number that monotonically increases every time the user modifies the desired state. Generation pulumi.StringPtrInput @@ -1120,7 +1120,7 @@ func (o JobOutput) ExecutionCount() pulumi.IntOutput { return o.ApplyT(func(v *Job) pulumi.IntOutput { return v.ExecutionCount }).(pulumi.IntOutput) } -// 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. func (o JobOutput) ExpireTime() pulumi.StringOutput { return o.ApplyT(func(v *Job) pulumi.StringOutput { return v.ExpireTime }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/cloudrunv2/service.go b/sdk/go/gcp/cloudrunv2/service.go index 6c28db7ca3..2a4d7f7770 100644 --- a/sdk/go/gcp/cloudrunv2/service.go +++ b/sdk/go/gcp/cloudrunv2/service.go @@ -899,7 +899,7 @@ type Service struct { EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` // A system-generated fingerprint for this version of the resource. May be used to detect modification conflict during updates. Etag pulumi.StringOutput `pulumi:"etag"` - // 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. ExpireTime pulumi.StringOutput `pulumi:"expireTime"` // A number that monotonically increases every time the user modifies the desired state. Please note that unlike v1, this is an int64 value. As with most Google APIs, its JSON representation will be a string instead of an integer. Generation pulumi.StringOutput `pulumi:"generation"` @@ -1050,7 +1050,7 @@ type serviceState struct { EffectiveLabels map[string]string `pulumi:"effectiveLabels"` // A system-generated fingerprint for this version of the resource. May be used to detect modification conflict during updates. Etag *string `pulumi:"etag"` - // 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. ExpireTime *string `pulumi:"expireTime"` // A number that monotonically increases every time the user modifies the desired state. Please note that unlike v1, this is an int64 value. As with most Google APIs, its JSON representation will be a string instead of an integer. Generation *string `pulumi:"generation"` @@ -1161,7 +1161,7 @@ type ServiceState struct { EffectiveLabels pulumi.StringMapInput // A system-generated fingerprint for this version of the resource. May be used to detect modification conflict during updates. Etag pulumi.StringPtrInput - // 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. ExpireTime pulumi.StringPtrInput // A number that monotonically increases every time the user modifies the desired state. Please note that unlike v1, this is an int64 value. As with most Google APIs, its JSON representation will be a string instead of an integer. Generation pulumi.StringPtrInput @@ -1532,7 +1532,7 @@ func (o ServiceOutput) Etag() pulumi.StringOutput { return o.ApplyT(func(v *Service) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) } -// 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. func (o ServiceOutput) ExpireTime() pulumi.StringOutput { return o.ApplyT(func(v *Service) pulumi.StringOutput { return v.ExpireTime }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/composer/getUserWorkloadsConfigMap.go b/sdk/go/gcp/composer/getUserWorkloadsConfigMap.go index f310ecd3cc..3b92df657b 100644 --- a/sdk/go/gcp/composer/getUserWorkloadsConfigMap.go +++ b/sdk/go/gcp/composer/getUserWorkloadsConfigMap.go @@ -11,6 +11,8 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment. +// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/composer/getUserWorkloadsSecret.go b/sdk/go/gcp/composer/getUserWorkloadsSecret.go index be8e21bc80..4396159a07 100644 --- a/sdk/go/gcp/composer/getUserWorkloadsSecret.go +++ b/sdk/go/gcp/composer/getUserWorkloadsSecret.go @@ -11,6 +11,8 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment. +// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/composer/userWorkloadsConfigMap.go b/sdk/go/gcp/composer/userWorkloadsConfigMap.go index ab2412e643..895a3b9851 100644 --- a/sdk/go/gcp/composer/userWorkloadsConfigMap.go +++ b/sdk/go/gcp/composer/userWorkloadsConfigMap.go @@ -12,6 +12,13 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// 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/go/gcp/composer/userWorkloadsSecret.go b/sdk/go/gcp/composer/userWorkloadsSecret.go index 210217430e..678ee07e7e 100644 --- a/sdk/go/gcp/composer/userWorkloadsSecret.go +++ b/sdk/go/gcp/composer/userWorkloadsSecret.go @@ -12,6 +12,9 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// User workloads Secret used by Airflow tasks that run with Kubernetes Executor or KubernetesPodOperator. +// Intended for Composer 3 Environments. +// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/compute/disk.go b/sdk/go/gcp/compute/disk.go index 9f4871e3ce..3ea450a9f4 100644 --- a/sdk/go/gcp/compute/disk.go +++ b/sdk/go/gcp/compute/disk.go @@ -347,10 +347,12 @@ type Disk struct { // snapshot ID would identify the exact version of the snapshot that was // used. SourceSnapshotId pulumi.StringOutput `pulumi:"sourceSnapshotId"` - // 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} StoragePool pulumi.StringPtrOutput `pulumi:"storagePool"` // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. @@ -559,10 +561,12 @@ type diskState struct { // snapshot ID would identify the exact version of the snapshot that was // used. SourceSnapshotId *string `pulumi:"sourceSnapshotId"` - // 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} StoragePool *string `pulumi:"storagePool"` // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. @@ -737,10 +741,12 @@ type DiskState struct { // snapshot ID would identify the exact version of the snapshot that was // used. SourceSnapshotId pulumi.StringPtrInput - // 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} StoragePool pulumi.StringPtrInput // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. @@ -884,10 +890,12 @@ type diskArgs struct { // key. // Structure is documented below. SourceSnapshotEncryptionKey *DiskSourceSnapshotEncryptionKey `pulumi:"sourceSnapshotEncryptionKey"` - // 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} StoragePool *string `pulumi:"storagePool"` // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. @@ -1025,10 +1033,12 @@ type DiskArgs struct { // key. // Structure is documented below. SourceSnapshotEncryptionKey DiskSourceSnapshotEncryptionKeyPtrInput - // 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} StoragePool pulumi.StringPtrInput // URL of the disk type resource describing which disk type to use to // create the disk. Provide this when creating the disk. @@ -1385,10 +1395,12 @@ func (o DiskOutput) SourceSnapshotId() pulumi.StringOutput { return o.ApplyT(func(v *Disk) pulumi.StringOutput { return v.SourceSnapshotId }).(pulumi.StringOutput) } -// 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} func (o DiskOutput) StoragePool() pulumi.StringPtrOutput { return o.ApplyT(func(v *Disk) pulumi.StringPtrOutput { return v.StoragePool }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/compute/firewallPolicyRule.go b/sdk/go/gcp/compute/firewallPolicyRule.go index 4ae6a0ab4a..c7e880ce93 100644 --- a/sdk/go/gcp/compute/firewallPolicyRule.go +++ b/sdk/go/gcp/compute/firewallPolicyRule.go @@ -12,6 +12,12 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// 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/go/gcp/compute/getForwardingRules.go b/sdk/go/gcp/compute/getForwardingRules.go index 858c8b5813..6c3690d88c 100644 --- a/sdk/go/gcp/compute/getForwardingRules.go +++ b/sdk/go/gcp/compute/getForwardingRules.go @@ -55,7 +55,7 @@ type GetForwardingRulesArgs struct { Project *string `pulumi:"project"` // 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. Region *string `pulumi:"region"` } @@ -96,7 +96,7 @@ type GetForwardingRulesOutputArgs struct { Project pulumi.StringPtrInput `pulumi:"project"` // 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. Region pulumi.StringPtrInput `pulumi:"region"` } diff --git a/sdk/go/gcp/compute/getGlobalForwardingRule.go b/sdk/go/gcp/compute/getGlobalForwardingRule.go index 02767daa27..f2742250c3 100644 --- a/sdk/go/gcp/compute/getGlobalForwardingRule.go +++ b/sdk/go/gcp/compute/getGlobalForwardingRule.go @@ -65,6 +65,7 @@ type LookupGlobalForwardingRuleResult struct { BaseForwardingRule string `pulumi:"baseForwardingRule"` Description string `pulumi:"description"` EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + ForwardingRuleId int `pulumi:"forwardingRuleId"` // The provider-assigned unique ID for this managed resource. Id string `pulumi:"id"` IpAddress string `pulumi:"ipAddress"` @@ -154,6 +155,10 @@ func (o LookupGlobalForwardingRuleResultOutput) EffectiveLabels() pulumi.StringM return o.ApplyT(func(v LookupGlobalForwardingRuleResult) map[string]string { return v.EffectiveLabels }).(pulumi.StringMapOutput) } +func (o LookupGlobalForwardingRuleResultOutput) ForwardingRuleId() pulumi.IntOutput { + return o.ApplyT(func(v LookupGlobalForwardingRuleResult) int { return v.ForwardingRuleId }).(pulumi.IntOutput) +} + // The provider-assigned unique ID for this managed resource. func (o LookupGlobalForwardingRuleResultOutput) Id() pulumi.StringOutput { return o.ApplyT(func(v LookupGlobalForwardingRuleResult) string { return v.Id }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/compute/getInstanceGroupManager.go b/sdk/go/gcp/compute/getInstanceGroupManager.go index 59d8748d59..47851bdcdf 100644 --- a/sdk/go/gcp/compute/getInstanceGroupManager.go +++ b/sdk/go/gcp/compute/getInstanceGroupManager.go @@ -80,6 +80,7 @@ type LookupInstanceGroupManagerResult struct { // The provider-assigned unique ID for this managed resource. Id string `pulumi:"id"` InstanceGroup string `pulumi:"instanceGroup"` + InstanceGroupManagerId int `pulumi:"instanceGroupManagerId"` InstanceLifecyclePolicies []GetInstanceGroupManagerInstanceLifecyclePolicy `pulumi:"instanceLifecyclePolicies"` ListManagedInstancesResults string `pulumi:"listManagedInstancesResults"` Name *string `pulumi:"name"` @@ -191,6 +192,10 @@ func (o LookupInstanceGroupManagerResultOutput) InstanceGroup() pulumi.StringOut return o.ApplyT(func(v LookupInstanceGroupManagerResult) string { return v.InstanceGroup }).(pulumi.StringOutput) } +func (o LookupInstanceGroupManagerResultOutput) InstanceGroupManagerId() pulumi.IntOutput { + return o.ApplyT(func(v LookupInstanceGroupManagerResult) int { return v.InstanceGroupManagerId }).(pulumi.IntOutput) +} + func (o LookupInstanceGroupManagerResultOutput) InstanceLifecyclePolicies() GetInstanceGroupManagerInstanceLifecyclePolicyArrayOutput { return o.ApplyT(func(v LookupInstanceGroupManagerResult) []GetInstanceGroupManagerInstanceLifecyclePolicy { return v.InstanceLifecyclePolicies diff --git a/sdk/go/gcp/compute/getNetwork.go b/sdk/go/gcp/compute/getNetwork.go index 51ce42e792..5ddf529b45 100644 --- a/sdk/go/gcp/compute/getNetwork.go +++ b/sdk/go/gcp/compute/getNetwork.go @@ -54,6 +54,8 @@ type LookupNetworkArgs struct { // // *** Name string `pulumi:"name"` + // Beta A full or partial URL of the network profile to apply to this network. + NetworkProfile *string `pulumi:"networkProfile"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -68,9 +70,13 @@ type LookupNetworkResult struct { // The provider-assigned unique ID for this managed resource. Id string `pulumi:"id"` // The ula internal ipv6 range assigned to this network. - InternalIpv6Range string `pulumi:"internalIpv6Range"` - Name string `pulumi:"name"` - Project *string `pulumi:"project"` + InternalIpv6Range string `pulumi:"internalIpv6Range"` + Name string `pulumi:"name"` + // Beta A full or partial URL of the network profile to apply to this network. + NetworkProfile *string `pulumi:"networkProfile"` + // The numeric unique identifier for the resource. + NumericId string `pulumi:"numericId"` + Project *string `pulumi:"project"` // The URI of the resource. SelfLink string `pulumi:"selfLink"` // the list of subnetworks which belong to the network @@ -102,6 +108,8 @@ type LookupNetworkOutputArgs struct { // // *** Name pulumi.StringInput `pulumi:"name"` + // Beta A full or partial URL of the network profile to apply to this network. + NetworkProfile pulumi.StringPtrInput `pulumi:"networkProfile"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput `pulumi:"project"` @@ -150,6 +158,16 @@ func (o LookupNetworkResultOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v LookupNetworkResult) string { return v.Name }).(pulumi.StringOutput) } +// Beta A full or partial URL of the network profile to apply to this network. +func (o LookupNetworkResultOutput) NetworkProfile() pulumi.StringPtrOutput { + return o.ApplyT(func(v LookupNetworkResult) *string { return v.NetworkProfile }).(pulumi.StringPtrOutput) +} + +// The numeric unique identifier for the resource. +func (o LookupNetworkResultOutput) NumericId() pulumi.StringOutput { + return o.ApplyT(func(v LookupNetworkResult) string { return v.NumericId }).(pulumi.StringOutput) +} + func (o LookupNetworkResultOutput) Project() pulumi.StringPtrOutput { return o.ApplyT(func(v LookupNetworkResult) *string { return v.Project }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/compute/getRegionInstanceGroupManager.go b/sdk/go/gcp/compute/getRegionInstanceGroupManager.go index aa0e54a6c1..2a07dfba0d 100644 --- a/sdk/go/gcp/compute/getRegionInstanceGroupManager.go +++ b/sdk/go/gcp/compute/getRegionInstanceGroupManager.go @@ -78,6 +78,7 @@ type LookupRegionInstanceGroupManagerResult struct { Id string `pulumi:"id"` InstanceFlexibilityPolicies []GetRegionInstanceGroupManagerInstanceFlexibilityPolicy `pulumi:"instanceFlexibilityPolicies"` InstanceGroup string `pulumi:"instanceGroup"` + InstanceGroupManagerId int `pulumi:"instanceGroupManagerId"` InstanceLifecyclePolicies []GetRegionInstanceGroupManagerInstanceLifecyclePolicy `pulumi:"instanceLifecyclePolicies"` ListManagedInstancesResults string `pulumi:"listManagedInstancesResults"` Name *string `pulumi:"name"` @@ -203,6 +204,10 @@ func (o LookupRegionInstanceGroupManagerResultOutput) InstanceGroup() pulumi.Str return o.ApplyT(func(v LookupRegionInstanceGroupManagerResult) string { return v.InstanceGroup }).(pulumi.StringOutput) } +func (o LookupRegionInstanceGroupManagerResultOutput) InstanceGroupManagerId() pulumi.IntOutput { + return o.ApplyT(func(v LookupRegionInstanceGroupManagerResult) int { return v.InstanceGroupManagerId }).(pulumi.IntOutput) +} + func (o LookupRegionInstanceGroupManagerResultOutput) InstanceLifecyclePolicies() GetRegionInstanceGroupManagerInstanceLifecyclePolicyArrayOutput { return o.ApplyT(func(v LookupRegionInstanceGroupManagerResult) []GetRegionInstanceGroupManagerInstanceLifecyclePolicy { return v.InstanceLifecyclePolicies diff --git a/sdk/go/gcp/compute/getRegionNetworkEndpointGroup.go b/sdk/go/gcp/compute/getRegionNetworkEndpointGroup.go index d112958e53..4188463faf 100644 --- a/sdk/go/gcp/compute/getRegionNetworkEndpointGroup.go +++ b/sdk/go/gcp/compute/getRegionNetworkEndpointGroup.go @@ -82,8 +82,9 @@ type LookupRegionNetworkEndpointGroupResult struct { // The network to which all network endpoints in the RNEG belong. Network string `pulumi:"network"` // Type of network endpoints in this network endpoint group. - NetworkEndpointType string `pulumi:"networkEndpointType"` - Project *string `pulumi:"project"` + NetworkEndpointType string `pulumi:"networkEndpointType"` + Project *string `pulumi:"project"` + PscDatas []GetRegionNetworkEndpointGroupPscData `pulumi:"pscDatas"` // The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. PscTargetService string `pulumi:"pscTargetService"` Region *string `pulumi:"region"` @@ -189,6 +190,12 @@ func (o LookupRegionNetworkEndpointGroupResultOutput) Project() pulumi.StringPtr return o.ApplyT(func(v LookupRegionNetworkEndpointGroupResult) *string { return v.Project }).(pulumi.StringPtrOutput) } +func (o LookupRegionNetworkEndpointGroupResultOutput) PscDatas() GetRegionNetworkEndpointGroupPscDataArrayOutput { + return o.ApplyT(func(v LookupRegionNetworkEndpointGroupResult) []GetRegionNetworkEndpointGroupPscData { + return v.PscDatas + }).(GetRegionNetworkEndpointGroupPscDataArrayOutput) +} + // The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. func (o LookupRegionNetworkEndpointGroupResultOutput) PscTargetService() pulumi.StringOutput { return o.ApplyT(func(v LookupRegionNetworkEndpointGroupResult) string { return v.PscTargetService }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/compute/globalForwardingRule.go b/sdk/go/gcp/compute/globalForwardingRule.go index 69bd636584..1b010c5b8e 100644 --- a/sdk/go/gcp/compute/globalForwardingRule.go +++ b/sdk/go/gcp/compute/globalForwardingRule.go @@ -679,6 +679,8 @@ type GlobalForwardingRule struct { Description pulumi.StringPtrOutput `pulumi:"description"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // The unique identifier number for the resource. This identifier is defined by the server. + ForwardingRuleId pulumi.IntOutput `pulumi:"forwardingRuleId"` // IP address for which this forwarding rule accepts traffic. When a client // sends traffic to this IP address, the forwarding rule directs the traffic // to the referenced `target`. @@ -882,6 +884,8 @@ type globalForwardingRuleState struct { Description *string `pulumi:"description"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // The unique identifier number for the resource. This identifier is defined by the server. + ForwardingRuleId *int `pulumi:"forwardingRuleId"` // IP address for which this forwarding rule accepts traffic. When a client // sends traffic to this IP address, the forwarding rule directs the traffic // to the referenced `target`. @@ -1048,6 +1052,8 @@ type GlobalForwardingRuleState struct { Description pulumi.StringPtrInput // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. EffectiveLabels pulumi.StringMapInput + // The unique identifier number for the resource. This identifier is defined by the server. + ForwardingRuleId pulumi.IntPtrInput // IP address for which this forwarding rule accepts traffic. When a client // sends traffic to this IP address, the forwarding rule directs the traffic // to the referenced `target`. @@ -1617,6 +1623,11 @@ func (o GlobalForwardingRuleOutput) EffectiveLabels() pulumi.StringMapOutput { return o.ApplyT(func(v *GlobalForwardingRule) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) } +// The unique identifier number for the resource. This identifier is defined by the server. +func (o GlobalForwardingRuleOutput) ForwardingRuleId() pulumi.IntOutput { + return o.ApplyT(func(v *GlobalForwardingRule) pulumi.IntOutput { return v.ForwardingRuleId }).(pulumi.IntOutput) +} + // IP address for which this forwarding rule accepts traffic. When a client // sends traffic to this IP address, the forwarding rule directs the traffic // to the referenced `target`. diff --git a/sdk/go/gcp/compute/instanceGroupManager.go b/sdk/go/gcp/compute/instanceGroupManager.go index ca0223f473..0f8aa4b846 100644 --- a/sdk/go/gcp/compute/instanceGroupManager.go +++ b/sdk/go/gcp/compute/instanceGroupManager.go @@ -226,6 +226,8 @@ type InstanceGroupManager struct { Fingerprint pulumi.StringOutput `pulumi:"fingerprint"` // The full URL of the instance group created by the manager. InstanceGroup pulumi.StringOutput `pulumi:"instanceGroup"` + // The unique identifier number for the resource. This identifier is defined by the server. + InstanceGroupManagerId pulumi.IntOutput `pulumi:"instanceGroupManagerId"` // The instance lifecycle policy for this managed instance group. InstanceLifecyclePolicy InstanceGroupManagerInstanceLifecyclePolicyOutput `pulumi:"instanceLifecyclePolicy"` // Pagination behavior of the `listManagedInstances` API @@ -355,6 +357,8 @@ type instanceGroupManagerState struct { Fingerprint *string `pulumi:"fingerprint"` // The full URL of the instance group created by the manager. InstanceGroup *string `pulumi:"instanceGroup"` + // The unique identifier number for the resource. This identifier is defined by the server. + InstanceGroupManagerId *int `pulumi:"instanceGroupManagerId"` // The instance lifecycle policy for this managed instance group. InstanceLifecyclePolicy *InstanceGroupManagerInstanceLifecyclePolicy `pulumi:"instanceLifecyclePolicy"` // Pagination behavior of the `listManagedInstances` API @@ -449,6 +453,8 @@ type InstanceGroupManagerState struct { Fingerprint pulumi.StringPtrInput // The full URL of the instance group created by the manager. InstanceGroup pulumi.StringPtrInput + // The unique identifier number for the resource. This identifier is defined by the server. + InstanceGroupManagerId pulumi.IntPtrInput // The instance lifecycle policy for this managed instance group. InstanceLifecyclePolicy InstanceGroupManagerInstanceLifecyclePolicyPtrInput // Pagination behavior of the `listManagedInstances` API @@ -825,6 +831,11 @@ func (o InstanceGroupManagerOutput) InstanceGroup() pulumi.StringOutput { return o.ApplyT(func(v *InstanceGroupManager) pulumi.StringOutput { return v.InstanceGroup }).(pulumi.StringOutput) } +// The unique identifier number for the resource. This identifier is defined by the server. +func (o InstanceGroupManagerOutput) InstanceGroupManagerId() pulumi.IntOutput { + return o.ApplyT(func(v *InstanceGroupManager) pulumi.IntOutput { return v.InstanceGroupManagerId }).(pulumi.IntOutput) +} + // The instance lifecycle policy for this managed instance group. func (o InstanceGroupManagerOutput) InstanceLifecyclePolicy() InstanceGroupManagerInstanceLifecyclePolicyOutput { return o.ApplyT(func(v *InstanceGroupManager) InstanceGroupManagerInstanceLifecyclePolicyOutput { diff --git a/sdk/go/gcp/compute/network.go b/sdk/go/gcp/compute/network.go index f4e1a903fb..99d408d546 100644 --- a/sdk/go/gcp/compute/network.go +++ b/sdk/go/gcp/compute/network.go @@ -267,6 +267,12 @@ type Network struct { // Default value is `AFTER_CLASSIC_FIREWALL`. // Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. NetworkFirewallPolicyEnforcementOrder pulumi.StringPtrOutput `pulumi:"networkFirewallPolicyEnforcementOrder"` + // 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} + NetworkProfile pulumi.StringPtrOutput `pulumi:"networkProfile"` // The unique identifier for the resource. This identifier is defined by the server. NumericId pulumi.StringOutput `pulumi:"numericId"` // The ID of the project in which the resource belongs. @@ -366,6 +372,12 @@ type networkState struct { // Default value is `AFTER_CLASSIC_FIREWALL`. // Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. NetworkFirewallPolicyEnforcementOrder *string `pulumi:"networkFirewallPolicyEnforcementOrder"` + // 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} + NetworkProfile *string `pulumi:"networkProfile"` // The unique identifier for the resource. This identifier is defined by the server. NumericId *string `pulumi:"numericId"` // The ID of the project in which the resource belongs. @@ -436,6 +448,12 @@ type NetworkState struct { // Default value is `AFTER_CLASSIC_FIREWALL`. // Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. NetworkFirewallPolicyEnforcementOrder pulumi.StringPtrInput + // 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} + NetworkProfile pulumi.StringPtrInput // The unique identifier for the resource. This identifier is defined by the server. NumericId pulumi.StringPtrInput // The ID of the project in which the resource belongs. @@ -507,6 +525,12 @@ type networkArgs struct { // Default value is `AFTER_CLASSIC_FIREWALL`. // Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. NetworkFirewallPolicyEnforcementOrder *string `pulumi:"networkFirewallPolicyEnforcementOrder"` + // 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} + NetworkProfile *string `pulumi:"networkProfile"` // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` @@ -571,6 +595,12 @@ type NetworkArgs struct { // Default value is `AFTER_CLASSIC_FIREWALL`. // Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. NetworkFirewallPolicyEnforcementOrder pulumi.StringPtrInput + // 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} + NetworkProfile pulumi.StringPtrInput // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput @@ -759,6 +789,15 @@ func (o NetworkOutput) NetworkFirewallPolicyEnforcementOrder() pulumi.StringPtrO return o.ApplyT(func(v *Network) pulumi.StringPtrOutput { return v.NetworkFirewallPolicyEnforcementOrder }).(pulumi.StringPtrOutput) } +// 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} +func (o NetworkOutput) NetworkProfile() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Network) pulumi.StringPtrOutput { return v.NetworkProfile }).(pulumi.StringPtrOutput) +} + // The unique identifier for the resource. This identifier is defined by the server. func (o NetworkOutput) NumericId() pulumi.StringOutput { return o.ApplyT(func(v *Network) pulumi.StringOutput { return v.NumericId }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/compute/pulumiTypes.go b/sdk/go/gcp/compute/pulumiTypes.go index f90083fbfb..24ef6ce8b2 100644 --- a/sdk/go/gcp/compute/pulumiTypes.go +++ b/sdk/go/gcp/compute/pulumiTypes.go @@ -15279,6 +15279,10 @@ func (o ImageRawDiskPtrOutput) Source() pulumi.StringPtrOutput { type InstanceAdvancedMachineFeatures struct { // Defines whether the instance should have nested virtualization enabled. Defaults to false. EnableNestedVirtualization *bool `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for instance creation. + EnableUefiNetworking *bool `pulumi:"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`. + PerformanceMonitoringUnit *string `pulumi:"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. ThreadsPerCore *int `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). @@ -15301,6 +15305,10 @@ type InstanceAdvancedMachineFeaturesInput interface { type InstanceAdvancedMachineFeaturesArgs struct { // Defines whether the instance should have nested virtualization enabled. Defaults to false. EnableNestedVirtualization pulumi.BoolPtrInput `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for instance creation. + EnableUefiNetworking pulumi.BoolPtrInput `pulumi:"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`. + PerformanceMonitoringUnit pulumi.StringPtrInput `pulumi:"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. ThreadsPerCore pulumi.IntPtrInput `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). @@ -15391,6 +15399,16 @@ func (o InstanceAdvancedMachineFeaturesOutput) EnableNestedVirtualization() pulu return o.ApplyT(func(v InstanceAdvancedMachineFeatures) *bool { return v.EnableNestedVirtualization }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for instance creation. +func (o InstanceAdvancedMachineFeaturesOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v InstanceAdvancedMachineFeatures) *bool { return v.EnableUefiNetworking }).(pulumi.BoolPtrOutput) +} + +// [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`. +func (o InstanceAdvancedMachineFeaturesOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v InstanceAdvancedMachineFeatures) *string { return v.PerformanceMonitoringUnit }).(pulumi.StringPtrOutput) +} + // 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. func (o InstanceAdvancedMachineFeaturesOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v InstanceAdvancedMachineFeatures) *int { return v.ThreadsPerCore }).(pulumi.IntPtrOutput) @@ -15440,6 +15458,26 @@ func (o InstanceAdvancedMachineFeaturesPtrOutput) EnableNestedVirtualization() p }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for instance creation. +func (o InstanceAdvancedMachineFeaturesPtrOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *InstanceAdvancedMachineFeatures) *bool { + if v == nil { + return nil + } + return v.EnableUefiNetworking + }).(pulumi.BoolPtrOutput) +} + +// [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`. +func (o InstanceAdvancedMachineFeaturesPtrOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *InstanceAdvancedMachineFeatures) *string { + if v == nil { + return nil + } + return v.PerformanceMonitoringUnit + }).(pulumi.StringPtrOutput) +} + // 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. func (o InstanceAdvancedMachineFeaturesPtrOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v *InstanceAdvancedMachineFeatures) *int { @@ -16034,10 +16072,12 @@ type InstanceBootDiskInitializeParams struct { // The size of the image in gigabytes. If not specified, it // will inherit the size of its base image. Size *int `pulumi:"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} StoragePool *string `pulumi:"storagePool"` // The GCE disk type. Such as pd-standard, pd-balanced or pd-ssd. Type *string `pulumi:"type"` @@ -16094,10 +16134,12 @@ type InstanceBootDiskInitializeParamsArgs struct { // The size of the image in gigabytes. If not specified, it // will inherit the size of its base image. Size pulumi.IntPtrInput `pulumi:"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} StoragePool pulumi.StringPtrInput `pulumi:"storagePool"` // The GCE disk type. Such as pd-standard, pd-balanced or pd-ssd. Type pulumi.StringPtrInput `pulumi:"type"` @@ -16243,10 +16285,12 @@ func (o InstanceBootDiskInitializeParamsOutput) Size() pulumi.IntPtrOutput { return o.ApplyT(func(v InstanceBootDiskInitializeParams) *int { return v.Size }).(pulumi.IntPtrOutput) } -// 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} func (o InstanceBootDiskInitializeParamsOutput) StoragePool() pulumi.StringPtrOutput { return o.ApplyT(func(v InstanceBootDiskInitializeParams) *string { return v.StoragePool }).(pulumi.StringPtrOutput) } @@ -16383,10 +16427,12 @@ func (o InstanceBootDiskInitializeParamsPtrOutput) Size() pulumi.IntPtrOutput { }).(pulumi.IntPtrOutput) } -// 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} func (o InstanceBootDiskInitializeParamsPtrOutput) StoragePool() pulumi.StringPtrOutput { return o.ApplyT(func(v *InstanceBootDiskInitializeParams) *string { if v == nil { @@ -16565,6 +16611,10 @@ func (o InstanceConfidentialInstanceConfigPtrOutput) EnableConfidentialCompute() type InstanceFromMachineImageAdvancedMachineFeatures struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization *bool `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for the instance. + EnableUefiNetworking *bool `pulumi:"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". + PerformanceMonitoringUnit *string `pulumi:"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. ThreadsPerCore *int `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -16587,6 +16637,10 @@ type InstanceFromMachineImageAdvancedMachineFeaturesInput interface { type InstanceFromMachineImageAdvancedMachineFeaturesArgs struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization pulumi.BoolPtrInput `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for the instance. + EnableUefiNetworking pulumi.BoolPtrInput `pulumi:"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". + PerformanceMonitoringUnit pulumi.StringPtrInput `pulumi:"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. ThreadsPerCore pulumi.IntPtrInput `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -16677,6 +16731,16 @@ func (o InstanceFromMachineImageAdvancedMachineFeaturesOutput) EnableNestedVirtu return o.ApplyT(func(v InstanceFromMachineImageAdvancedMachineFeatures) *bool { return v.EnableNestedVirtualization }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for the instance. +func (o InstanceFromMachineImageAdvancedMachineFeaturesOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v InstanceFromMachineImageAdvancedMachineFeatures) *bool { return v.EnableUefiNetworking }).(pulumi.BoolPtrOutput) +} + +// 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". +func (o InstanceFromMachineImageAdvancedMachineFeaturesOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v InstanceFromMachineImageAdvancedMachineFeatures) *string { return v.PerformanceMonitoringUnit }).(pulumi.StringPtrOutput) +} + // 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. func (o InstanceFromMachineImageAdvancedMachineFeaturesOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v InstanceFromMachineImageAdvancedMachineFeatures) *int { return v.ThreadsPerCore }).(pulumi.IntPtrOutput) @@ -16726,6 +16790,26 @@ func (o InstanceFromMachineImageAdvancedMachineFeaturesPtrOutput) EnableNestedVi }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for the instance. +func (o InstanceFromMachineImageAdvancedMachineFeaturesPtrOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *InstanceFromMachineImageAdvancedMachineFeatures) *bool { + if v == nil { + return nil + } + return v.EnableUefiNetworking + }).(pulumi.BoolPtrOutput) +} + +// 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". +func (o InstanceFromMachineImageAdvancedMachineFeaturesPtrOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *InstanceFromMachineImageAdvancedMachineFeatures) *string { + if v == nil { + return nil + } + return v.PerformanceMonitoringUnit + }).(pulumi.StringPtrOutput) +} + // 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. func (o InstanceFromMachineImageAdvancedMachineFeaturesPtrOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v *InstanceFromMachineImageAdvancedMachineFeatures) *int { @@ -17677,7 +17761,7 @@ type InstanceFromMachineImageNetworkInterface struct { NetworkAttachment *string `pulumi:"networkAttachment"` // The private IP address assigned to the instance. NetworkIp *string `pulumi:"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 NicType *string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount *int `pulumi:"queueCount"` @@ -17724,7 +17808,7 @@ type InstanceFromMachineImageNetworkInterfaceArgs struct { NetworkAttachment pulumi.StringPtrInput `pulumi:"networkAttachment"` // The private IP address assigned to the instance. NetworkIp pulumi.StringPtrInput `pulumi:"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 NicType pulumi.StringPtrInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntPtrInput `pulumi:"queueCount"` @@ -17846,7 +17930,7 @@ func (o InstanceFromMachineImageNetworkInterfaceOutput) NetworkIp() pulumi.Strin return o.ApplyT(func(v InstanceFromMachineImageNetworkInterface) *string { return v.NetworkIp }).(pulumi.StringPtrOutput) } -// 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 func (o InstanceFromMachineImageNetworkInterfaceOutput) NicType() pulumi.StringPtrOutput { return o.ApplyT(func(v InstanceFromMachineImageNetworkInterface) *string { return v.NicType }).(pulumi.StringPtrOutput) } @@ -20261,6 +20345,10 @@ func (o InstanceFromMachineImageShieldedInstanceConfigPtrOutput) EnableVtpm() pu type InstanceFromTemplateAdvancedMachineFeatures struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization *bool `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for the instance. + EnableUefiNetworking *bool `pulumi:"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". + PerformanceMonitoringUnit *string `pulumi:"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. ThreadsPerCore *int `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -20283,6 +20371,10 @@ type InstanceFromTemplateAdvancedMachineFeaturesInput interface { type InstanceFromTemplateAdvancedMachineFeaturesArgs struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization pulumi.BoolPtrInput `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for the instance. + EnableUefiNetworking pulumi.BoolPtrInput `pulumi:"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". + PerformanceMonitoringUnit pulumi.StringPtrInput `pulumi:"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. ThreadsPerCore pulumi.IntPtrInput `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -20373,6 +20465,16 @@ func (o InstanceFromTemplateAdvancedMachineFeaturesOutput) EnableNestedVirtualiz return o.ApplyT(func(v InstanceFromTemplateAdvancedMachineFeatures) *bool { return v.EnableNestedVirtualization }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for the instance. +func (o InstanceFromTemplateAdvancedMachineFeaturesOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v InstanceFromTemplateAdvancedMachineFeatures) *bool { return v.EnableUefiNetworking }).(pulumi.BoolPtrOutput) +} + +// 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". +func (o InstanceFromTemplateAdvancedMachineFeaturesOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v InstanceFromTemplateAdvancedMachineFeatures) *string { return v.PerformanceMonitoringUnit }).(pulumi.StringPtrOutput) +} + // 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. func (o InstanceFromTemplateAdvancedMachineFeaturesOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v InstanceFromTemplateAdvancedMachineFeatures) *int { return v.ThreadsPerCore }).(pulumi.IntPtrOutput) @@ -20422,6 +20524,26 @@ func (o InstanceFromTemplateAdvancedMachineFeaturesPtrOutput) EnableNestedVirtua }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for the instance. +func (o InstanceFromTemplateAdvancedMachineFeaturesPtrOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *InstanceFromTemplateAdvancedMachineFeatures) *bool { + if v == nil { + return nil + } + return v.EnableUefiNetworking + }).(pulumi.BoolPtrOutput) +} + +// 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". +func (o InstanceFromTemplateAdvancedMachineFeaturesPtrOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *InstanceFromTemplateAdvancedMachineFeatures) *string { + if v == nil { + return nil + } + return v.PerformanceMonitoringUnit + }).(pulumi.StringPtrOutput) +} + // 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. func (o InstanceFromTemplateAdvancedMachineFeaturesPtrOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v *InstanceFromTemplateAdvancedMachineFeatures) *int { @@ -21491,7 +21613,7 @@ type InstanceFromTemplateNetworkInterface struct { NetworkAttachment *string `pulumi:"networkAttachment"` // The private IP address assigned to the instance. NetworkIp *string `pulumi:"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 NicType *string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount *int `pulumi:"queueCount"` @@ -21538,7 +21660,7 @@ type InstanceFromTemplateNetworkInterfaceArgs struct { NetworkAttachment pulumi.StringPtrInput `pulumi:"networkAttachment"` // The private IP address assigned to the instance. NetworkIp pulumi.StringPtrInput `pulumi:"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 NicType pulumi.StringPtrInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntPtrInput `pulumi:"queueCount"` @@ -21660,7 +21782,7 @@ func (o InstanceFromTemplateNetworkInterfaceOutput) NetworkIp() pulumi.StringPtr return o.ApplyT(func(v InstanceFromTemplateNetworkInterface) *string { return v.NetworkIp }).(pulumi.StringPtrOutput) } -// 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 func (o InstanceFromTemplateNetworkInterfaceOutput) NicType() pulumi.StringPtrOutput { return o.ApplyT(func(v InstanceFromTemplateNetworkInterface) *string { return v.NicType }).(pulumi.StringPtrOutput) } @@ -27025,7 +27147,7 @@ type InstanceNetworkInterface struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp *string `pulumi:"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. NicType *string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount *int `pulumi:"queueCount"` @@ -27089,7 +27211,7 @@ type InstanceNetworkInterfaceArgs struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp pulumi.StringPtrInput `pulumi:"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. NicType pulumi.StringPtrInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntPtrInput `pulumi:"queueCount"` @@ -27224,7 +27346,7 @@ func (o InstanceNetworkInterfaceOutput) NetworkIp() pulumi.StringPtrOutput { return o.ApplyT(func(v InstanceNetworkInterface) *string { return v.NetworkIp }).(pulumi.StringPtrOutput) } -// 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. func (o InstanceNetworkInterfaceOutput) NicType() pulumi.StringPtrOutput { return o.ApplyT(func(v InstanceNetworkInterface) *string { return v.NicType }).(pulumi.StringPtrOutput) } @@ -29909,6 +30031,10 @@ func (o InstanceShieldedInstanceConfigPtrOutput) EnableVtpm() pulumi.BoolPtrOutp type InstanceTemplateAdvancedMachineFeatures struct { // Defines whether the instance should have nested virtualization enabled. Defaults to false. EnableNestedVirtualization *bool `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for instance creation. + EnableUefiNetworking *bool `pulumi:"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`. + PerformanceMonitoringUnit *string `pulumi:"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. ThreadsPerCore *int `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). @@ -29931,6 +30057,10 @@ type InstanceTemplateAdvancedMachineFeaturesInput interface { type InstanceTemplateAdvancedMachineFeaturesArgs struct { // Defines whether the instance should have nested virtualization enabled. Defaults to false. EnableNestedVirtualization pulumi.BoolPtrInput `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for instance creation. + EnableUefiNetworking pulumi.BoolPtrInput `pulumi:"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`. + PerformanceMonitoringUnit pulumi.StringPtrInput `pulumi:"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. ThreadsPerCore pulumi.IntPtrInput `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). @@ -30021,6 +30151,16 @@ func (o InstanceTemplateAdvancedMachineFeaturesOutput) EnableNestedVirtualizatio return o.ApplyT(func(v InstanceTemplateAdvancedMachineFeatures) *bool { return v.EnableNestedVirtualization }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for instance creation. +func (o InstanceTemplateAdvancedMachineFeaturesOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v InstanceTemplateAdvancedMachineFeatures) *bool { return v.EnableUefiNetworking }).(pulumi.BoolPtrOutput) +} + +// [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`. +func (o InstanceTemplateAdvancedMachineFeaturesOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v InstanceTemplateAdvancedMachineFeatures) *string { return v.PerformanceMonitoringUnit }).(pulumi.StringPtrOutput) +} + // 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. func (o InstanceTemplateAdvancedMachineFeaturesOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v InstanceTemplateAdvancedMachineFeatures) *int { return v.ThreadsPerCore }).(pulumi.IntPtrOutput) @@ -30070,6 +30210,26 @@ func (o InstanceTemplateAdvancedMachineFeaturesPtrOutput) EnableNestedVirtualiza }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for instance creation. +func (o InstanceTemplateAdvancedMachineFeaturesPtrOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *InstanceTemplateAdvancedMachineFeatures) *bool { + if v == nil { + return nil + } + return v.EnableUefiNetworking + }).(pulumi.BoolPtrOutput) +} + +// [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`. +func (o InstanceTemplateAdvancedMachineFeaturesPtrOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *InstanceTemplateAdvancedMachineFeatures) *string { + if v == nil { + return nil + } + return v.PerformanceMonitoringUnit + }).(pulumi.StringPtrOutput) +} + // 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. func (o InstanceTemplateAdvancedMachineFeaturesPtrOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v *InstanceTemplateAdvancedMachineFeatures) *int { @@ -31270,7 +31430,7 @@ type InstanceTemplateNetworkInterface struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp *string `pulumi:"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. NicType *string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount *int `pulumi:"queueCount"` @@ -31330,7 +31490,7 @@ type InstanceTemplateNetworkInterfaceArgs struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp pulumi.StringPtrInput `pulumi:"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. NicType pulumi.StringPtrInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntPtrInput `pulumi:"queueCount"` @@ -31465,7 +31625,7 @@ func (o InstanceTemplateNetworkInterfaceOutput) NetworkIp() pulumi.StringPtrOutp return o.ApplyT(func(v InstanceTemplateNetworkInterface) *string { return v.NetworkIp }).(pulumi.StringPtrOutput) } -// 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. func (o InstanceTemplateNetworkInterfaceOutput) NicType() pulumi.StringPtrOutput { return o.ApplyT(func(v InstanceTemplateNetworkInterface) *string { return v.NicType }).(pulumi.StringPtrOutput) } @@ -54022,6 +54182,10 @@ func (o RegionInstanceGroupManagerVersionTargetSizePtrOutput) Percent() pulumi.I type RegionInstanceTemplateAdvancedMachineFeatures struct { // Defines whether the instance should have nested virtualization enabled. Defaults to false. EnableNestedVirtualization *bool `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for instance creation. + EnableUefiNetworking *bool `pulumi:"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`. + PerformanceMonitoringUnit *string `pulumi:"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. ThreadsPerCore *int `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). @@ -54044,6 +54208,10 @@ type RegionInstanceTemplateAdvancedMachineFeaturesInput interface { type RegionInstanceTemplateAdvancedMachineFeaturesArgs struct { // Defines whether the instance should have nested virtualization enabled. Defaults to false. EnableNestedVirtualization pulumi.BoolPtrInput `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for instance creation. + EnableUefiNetworking pulumi.BoolPtrInput `pulumi:"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`. + PerformanceMonitoringUnit pulumi.StringPtrInput `pulumi:"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. ThreadsPerCore pulumi.IntPtrInput `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). @@ -54134,6 +54302,16 @@ func (o RegionInstanceTemplateAdvancedMachineFeaturesOutput) EnableNestedVirtual return o.ApplyT(func(v RegionInstanceTemplateAdvancedMachineFeatures) *bool { return v.EnableNestedVirtualization }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for instance creation. +func (o RegionInstanceTemplateAdvancedMachineFeaturesOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v RegionInstanceTemplateAdvancedMachineFeatures) *bool { return v.EnableUefiNetworking }).(pulumi.BoolPtrOutput) +} + +// [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`. +func (o RegionInstanceTemplateAdvancedMachineFeaturesOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v RegionInstanceTemplateAdvancedMachineFeatures) *string { return v.PerformanceMonitoringUnit }).(pulumi.StringPtrOutput) +} + // 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. func (o RegionInstanceTemplateAdvancedMachineFeaturesOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v RegionInstanceTemplateAdvancedMachineFeatures) *int { return v.ThreadsPerCore }).(pulumi.IntPtrOutput) @@ -54183,6 +54361,26 @@ func (o RegionInstanceTemplateAdvancedMachineFeaturesPtrOutput) EnableNestedVirt }).(pulumi.BoolPtrOutput) } +// Whether to enable UEFI networking for instance creation. +func (o RegionInstanceTemplateAdvancedMachineFeaturesPtrOutput) EnableUefiNetworking() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *RegionInstanceTemplateAdvancedMachineFeatures) *bool { + if v == nil { + return nil + } + return v.EnableUefiNetworking + }).(pulumi.BoolPtrOutput) +} + +// [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`. +func (o RegionInstanceTemplateAdvancedMachineFeaturesPtrOutput) PerformanceMonitoringUnit() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RegionInstanceTemplateAdvancedMachineFeatures) *string { + if v == nil { + return nil + } + return v.PerformanceMonitoringUnit + }).(pulumi.StringPtrOutput) +} + // 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. func (o RegionInstanceTemplateAdvancedMachineFeaturesPtrOutput) ThreadsPerCore() pulumi.IntPtrOutput { return o.ApplyT(func(v *RegionInstanceTemplateAdvancedMachineFeatures) *int { @@ -55376,7 +55574,7 @@ type RegionInstanceTemplateNetworkInterface struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp *string `pulumi:"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. NicType *string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount *int `pulumi:"queueCount"` @@ -55427,7 +55625,7 @@ type RegionInstanceTemplateNetworkInterfaceArgs struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp pulumi.StringPtrInput `pulumi:"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. NicType pulumi.StringPtrInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntPtrInput `pulumi:"queueCount"` @@ -55550,7 +55748,7 @@ func (o RegionInstanceTemplateNetworkInterfaceOutput) NetworkIp() pulumi.StringP return o.ApplyT(func(v RegionInstanceTemplateNetworkInterface) *string { return v.NetworkIp }).(pulumi.StringPtrOutput) } -// 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. func (o RegionInstanceTemplateNetworkInterfaceOutput) NicType() pulumi.StringPtrOutput { return o.ApplyT(func(v RegionInstanceTemplateNetworkInterface) *string { return v.NicType }).(pulumi.StringPtrOutput) } @@ -58387,6 +58585,155 @@ func (o RegionNetworkEndpointGroupCloudRunPtrOutput) UrlMask() pulumi.StringPtrO }).(pulumi.StringPtrOutput) } +type RegionNetworkEndpointGroupPscData struct { + // 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. + ProducerPort *string `pulumi:"producerPort"` +} + +// RegionNetworkEndpointGroupPscDataInput is an input type that accepts RegionNetworkEndpointGroupPscDataArgs and RegionNetworkEndpointGroupPscDataOutput values. +// You can construct a concrete instance of `RegionNetworkEndpointGroupPscDataInput` via: +// +// RegionNetworkEndpointGroupPscDataArgs{...} +type RegionNetworkEndpointGroupPscDataInput interface { + pulumi.Input + + ToRegionNetworkEndpointGroupPscDataOutput() RegionNetworkEndpointGroupPscDataOutput + ToRegionNetworkEndpointGroupPscDataOutputWithContext(context.Context) RegionNetworkEndpointGroupPscDataOutput +} + +type RegionNetworkEndpointGroupPscDataArgs struct { + // 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. + ProducerPort pulumi.StringPtrInput `pulumi:"producerPort"` +} + +func (RegionNetworkEndpointGroupPscDataArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RegionNetworkEndpointGroupPscData)(nil)).Elem() +} + +func (i RegionNetworkEndpointGroupPscDataArgs) ToRegionNetworkEndpointGroupPscDataOutput() RegionNetworkEndpointGroupPscDataOutput { + return i.ToRegionNetworkEndpointGroupPscDataOutputWithContext(context.Background()) +} + +func (i RegionNetworkEndpointGroupPscDataArgs) ToRegionNetworkEndpointGroupPscDataOutputWithContext(ctx context.Context) RegionNetworkEndpointGroupPscDataOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionNetworkEndpointGroupPscDataOutput) +} + +func (i RegionNetworkEndpointGroupPscDataArgs) ToRegionNetworkEndpointGroupPscDataPtrOutput() RegionNetworkEndpointGroupPscDataPtrOutput { + return i.ToRegionNetworkEndpointGroupPscDataPtrOutputWithContext(context.Background()) +} + +func (i RegionNetworkEndpointGroupPscDataArgs) ToRegionNetworkEndpointGroupPscDataPtrOutputWithContext(ctx context.Context) RegionNetworkEndpointGroupPscDataPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionNetworkEndpointGroupPscDataOutput).ToRegionNetworkEndpointGroupPscDataPtrOutputWithContext(ctx) +} + +// RegionNetworkEndpointGroupPscDataPtrInput is an input type that accepts RegionNetworkEndpointGroupPscDataArgs, RegionNetworkEndpointGroupPscDataPtr and RegionNetworkEndpointGroupPscDataPtrOutput values. +// You can construct a concrete instance of `RegionNetworkEndpointGroupPscDataPtrInput` via: +// +// RegionNetworkEndpointGroupPscDataArgs{...} +// +// or: +// +// nil +type RegionNetworkEndpointGroupPscDataPtrInput interface { + pulumi.Input + + ToRegionNetworkEndpointGroupPscDataPtrOutput() RegionNetworkEndpointGroupPscDataPtrOutput + ToRegionNetworkEndpointGroupPscDataPtrOutputWithContext(context.Context) RegionNetworkEndpointGroupPscDataPtrOutput +} + +type regionNetworkEndpointGroupPscDataPtrType RegionNetworkEndpointGroupPscDataArgs + +func RegionNetworkEndpointGroupPscDataPtr(v *RegionNetworkEndpointGroupPscDataArgs) RegionNetworkEndpointGroupPscDataPtrInput { + return (*regionNetworkEndpointGroupPscDataPtrType)(v) +} + +func (*regionNetworkEndpointGroupPscDataPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RegionNetworkEndpointGroupPscData)(nil)).Elem() +} + +func (i *regionNetworkEndpointGroupPscDataPtrType) ToRegionNetworkEndpointGroupPscDataPtrOutput() RegionNetworkEndpointGroupPscDataPtrOutput { + return i.ToRegionNetworkEndpointGroupPscDataPtrOutputWithContext(context.Background()) +} + +func (i *regionNetworkEndpointGroupPscDataPtrType) ToRegionNetworkEndpointGroupPscDataPtrOutputWithContext(ctx context.Context) RegionNetworkEndpointGroupPscDataPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RegionNetworkEndpointGroupPscDataPtrOutput) +} + +type RegionNetworkEndpointGroupPscDataOutput struct{ *pulumi.OutputState } + +func (RegionNetworkEndpointGroupPscDataOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RegionNetworkEndpointGroupPscData)(nil)).Elem() +} + +func (o RegionNetworkEndpointGroupPscDataOutput) ToRegionNetworkEndpointGroupPscDataOutput() RegionNetworkEndpointGroupPscDataOutput { + return o +} + +func (o RegionNetworkEndpointGroupPscDataOutput) ToRegionNetworkEndpointGroupPscDataOutputWithContext(ctx context.Context) RegionNetworkEndpointGroupPscDataOutput { + return o +} + +func (o RegionNetworkEndpointGroupPscDataOutput) ToRegionNetworkEndpointGroupPscDataPtrOutput() RegionNetworkEndpointGroupPscDataPtrOutput { + return o.ToRegionNetworkEndpointGroupPscDataPtrOutputWithContext(context.Background()) +} + +func (o RegionNetworkEndpointGroupPscDataOutput) ToRegionNetworkEndpointGroupPscDataPtrOutputWithContext(ctx context.Context) RegionNetworkEndpointGroupPscDataPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RegionNetworkEndpointGroupPscData) *RegionNetworkEndpointGroupPscData { + return &v + }).(RegionNetworkEndpointGroupPscDataPtrOutput) +} + +// 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. +func (o RegionNetworkEndpointGroupPscDataOutput) ProducerPort() pulumi.StringPtrOutput { + return o.ApplyT(func(v RegionNetworkEndpointGroupPscData) *string { return v.ProducerPort }).(pulumi.StringPtrOutput) +} + +type RegionNetworkEndpointGroupPscDataPtrOutput struct{ *pulumi.OutputState } + +func (RegionNetworkEndpointGroupPscDataPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RegionNetworkEndpointGroupPscData)(nil)).Elem() +} + +func (o RegionNetworkEndpointGroupPscDataPtrOutput) ToRegionNetworkEndpointGroupPscDataPtrOutput() RegionNetworkEndpointGroupPscDataPtrOutput { + return o +} + +func (o RegionNetworkEndpointGroupPscDataPtrOutput) ToRegionNetworkEndpointGroupPscDataPtrOutputWithContext(ctx context.Context) RegionNetworkEndpointGroupPscDataPtrOutput { + return o +} + +func (o RegionNetworkEndpointGroupPscDataPtrOutput) Elem() RegionNetworkEndpointGroupPscDataOutput { + return o.ApplyT(func(v *RegionNetworkEndpointGroupPscData) RegionNetworkEndpointGroupPscData { + if v != nil { + return *v + } + var ret RegionNetworkEndpointGroupPscData + return ret + }).(RegionNetworkEndpointGroupPscDataOutput) +} + +// 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. +func (o RegionNetworkEndpointGroupPscDataPtrOutput) ProducerPort() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RegionNetworkEndpointGroupPscData) *string { + if v == nil { + return nil + } + return v.ProducerPort + }).(pulumi.StringPtrOutput) +} + type RegionNetworkEndpointGroupServerlessDeployment struct { // The platform of the NEG backend target(s). Possible values: // API Gateway: apigateway.googleapis.com @@ -88408,6 +88755,8 @@ type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig struct { Enable *bool `pulumi:"enable"` // Rule visibility. Supported values include: "STANDARD", "PREMIUM". RuleVisibility *string `pulumi:"ruleVisibility"` + // Configuration options for layer7 adaptive protection for various customizable thresholds. + ThresholdConfigs []SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig `pulumi:"thresholdConfigs"` } // SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput is an input type that accepts SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs and SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput values. @@ -88426,6 +88775,8 @@ type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs struct { Enable pulumi.BoolPtrInput `pulumi:"enable"` // Rule visibility. Supported values include: "STANDARD", "PREMIUM". RuleVisibility pulumi.StringPtrInput `pulumi:"ruleVisibility"` + // Configuration options for layer7 adaptive protection for various customizable thresholds. + ThresholdConfigs SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput `pulumi:"thresholdConfigs"` } func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs) ElementType() reflect.Type { @@ -88515,6 +88866,13 @@ func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) Rul return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig) *string { return v.RuleVisibility }).(pulumi.StringPtrOutput) } +// Configuration options for layer7 adaptive protection for various customizable thresholds. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) ThresholdConfigs() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig) []SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + return v.ThresholdConfigs + }).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) +} + type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrOutput struct{ *pulumi.OutputState } func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrOutput) ElementType() reflect.Type { @@ -88559,373 +88917,201 @@ func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrOutput) }).(pulumi.StringPtrOutput) } -type SecurityPolicyAdvancedOptionsConfig struct { - // Custom configuration to apply the JSON parsing. Only applicable when - // `jsonParsing` is set to `STANDARD`. Structure is documented below. - JsonCustomConfig *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig `pulumi:"jsonCustomConfig"` - // Whether or not to JSON parse the payload body. Defaults to `DISABLED`. - // * `DISABLED` - Don't parse JSON payloads in POST bodies. - // * `STANDARD` - Parse JSON payloads in POST bodies. - // * `STANDARD_WITH_GRAPHQL` - Parse JSON and GraphQL payloads in POST bodies. - JsonParsing *string `pulumi:"jsonParsing"` - // Log level to use. Defaults to `NORMAL`. - // * `NORMAL` - Normal log level. - // * `VERBOSE` - Verbose log level. - LogLevel *string `pulumi:"logLevel"` - // An optional list of case-insensitive request header names to use for resolving the callers client IP address. - UserIpRequestHeaders []string `pulumi:"userIpRequestHeaders"` -} - -// SecurityPolicyAdvancedOptionsConfigInput is an input type that accepts SecurityPolicyAdvancedOptionsConfigArgs and SecurityPolicyAdvancedOptionsConfigOutput values. -// You can construct a concrete instance of `SecurityPolicyAdvancedOptionsConfigInput` via: -// -// SecurityPolicyAdvancedOptionsConfigArgs{...} -type SecurityPolicyAdvancedOptionsConfigInput interface { - pulumi.Input - - ToSecurityPolicyAdvancedOptionsConfigOutput() SecurityPolicyAdvancedOptionsConfigOutput - ToSecurityPolicyAdvancedOptionsConfigOutputWithContext(context.Context) SecurityPolicyAdvancedOptionsConfigOutput -} - -type SecurityPolicyAdvancedOptionsConfigArgs struct { - // Custom configuration to apply the JSON parsing. Only applicable when - // `jsonParsing` is set to `STANDARD`. Structure is documented below. - JsonCustomConfig SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput `pulumi:"jsonCustomConfig"` - // Whether or not to JSON parse the payload body. Defaults to `DISABLED`. - // * `DISABLED` - Don't parse JSON payloads in POST bodies. - // * `STANDARD` - Parse JSON payloads in POST bodies. - // * `STANDARD_WITH_GRAPHQL` - Parse JSON and GraphQL payloads in POST bodies. - JsonParsing pulumi.StringPtrInput `pulumi:"jsonParsing"` - // Log level to use. Defaults to `NORMAL`. - // * `NORMAL` - Normal log level. - // * `VERBOSE` - Verbose log level. - LogLevel pulumi.StringPtrInput `pulumi:"logLevel"` - // An optional list of case-insensitive request header names to use for resolving the callers client IP address. - UserIpRequestHeaders pulumi.StringArrayInput `pulumi:"userIpRequestHeaders"` -} - -func (SecurityPolicyAdvancedOptionsConfigArgs) ElementType() reflect.Type { - return reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfig)(nil)).Elem() -} - -func (i SecurityPolicyAdvancedOptionsConfigArgs) ToSecurityPolicyAdvancedOptionsConfigOutput() SecurityPolicyAdvancedOptionsConfigOutput { - return i.ToSecurityPolicyAdvancedOptionsConfigOutputWithContext(context.Background()) -} - -func (i SecurityPolicyAdvancedOptionsConfigArgs) ToSecurityPolicyAdvancedOptionsConfigOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigOutput { - return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigOutput) -} - -func (i SecurityPolicyAdvancedOptionsConfigArgs) ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput { - return i.ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(context.Background()) +// Configuration options for layer7 adaptive protection for various customizable thresholds. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrOutput) ThresholdConfigs() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { + return o.ApplyT(func(v *SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig) []SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + if v == nil { + return nil + } + return v.ThresholdConfigs + }).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) } -func (i SecurityPolicyAdvancedOptionsConfigArgs) ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigOutput).ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx) +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig struct { + // Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + AutoDeployConfidenceThreshold *float64 `pulumi:"autoDeployConfidenceThreshold"` + // Duration over which Adaptive Protection's auto-deployed actions last. + AutoDeployExpirationSec *int `pulumi:"autoDeployExpirationSec"` + // Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + AutoDeployImpactedBaselineThreshold *float64 `pulumi:"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. + AutoDeployLoadThreshold *float64 `pulumi:"autoDeployLoadThreshold"` + // Detection threshold based on absolute QPS. + DetectionAbsoluteQps *float64 `pulumi:"detectionAbsoluteQps"` + // Detection threshold based on the backend service's load. + DetectionLoadThreshold *float64 `pulumi:"detectionLoadThreshold"` + // Detection threshold based on QPS relative to the average of baseline traffic. + DetectionRelativeToBaselineQps *float64 `pulumi:"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. + Name string `pulumi:"name"` + // Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + TrafficGranularityConfigs []SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig `pulumi:"trafficGranularityConfigs"` } -// SecurityPolicyAdvancedOptionsConfigPtrInput is an input type that accepts SecurityPolicyAdvancedOptionsConfigArgs, SecurityPolicyAdvancedOptionsConfigPtr and SecurityPolicyAdvancedOptionsConfigPtrOutput values. -// You can construct a concrete instance of `SecurityPolicyAdvancedOptionsConfigPtrInput` via: +// SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput is an input type that accepts SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs and SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput values. +// You can construct a concrete instance of `SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput` via: // -// SecurityPolicyAdvancedOptionsConfigArgs{...} -// -// or: -// -// nil -type SecurityPolicyAdvancedOptionsConfigPtrInput interface { +// SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs{...} +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput interface { pulumi.Input - ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput - ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput -} - -type securityPolicyAdvancedOptionsConfigPtrType SecurityPolicyAdvancedOptionsConfigArgs - -func SecurityPolicyAdvancedOptionsConfigPtr(v *SecurityPolicyAdvancedOptionsConfigArgs) SecurityPolicyAdvancedOptionsConfigPtrInput { - return (*securityPolicyAdvancedOptionsConfigPtrType)(v) -} - -func (*securityPolicyAdvancedOptionsConfigPtrType) ElementType() reflect.Type { - return reflect.TypeOf((**SecurityPolicyAdvancedOptionsConfig)(nil)).Elem() -} - -func (i *securityPolicyAdvancedOptionsConfigPtrType) ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput { - return i.ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(context.Background()) -} - -func (i *securityPolicyAdvancedOptionsConfigPtrType) ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigPtrOutput) -} - -type SecurityPolicyAdvancedOptionsConfigOutput struct{ *pulumi.OutputState } - -func (SecurityPolicyAdvancedOptionsConfigOutput) ElementType() reflect.Type { - return reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfig)(nil)).Elem() -} - -func (o SecurityPolicyAdvancedOptionsConfigOutput) ToSecurityPolicyAdvancedOptionsConfigOutput() SecurityPolicyAdvancedOptionsConfigOutput { - return o -} - -func (o SecurityPolicyAdvancedOptionsConfigOutput) ToSecurityPolicyAdvancedOptionsConfigOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigOutput { - return o -} - -func (o SecurityPolicyAdvancedOptionsConfigOutput) ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput { - return o.ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(context.Background()) -} - -func (o SecurityPolicyAdvancedOptionsConfigOutput) ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput { - return o.ApplyTWithContext(ctx, func(_ context.Context, v SecurityPolicyAdvancedOptionsConfig) *SecurityPolicyAdvancedOptionsConfig { - return &v - }).(SecurityPolicyAdvancedOptionsConfigPtrOutput) -} - -// Custom configuration to apply the JSON parsing. Only applicable when -// `jsonParsing` is set to `STANDARD`. Structure is documented below. -func (o SecurityPolicyAdvancedOptionsConfigOutput) JsonCustomConfig() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { - return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfig) *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig { - return v.JsonCustomConfig - }).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) -} - -// Whether or not to JSON parse the payload body. Defaults to `DISABLED`. -// * `DISABLED` - Don't parse JSON payloads in POST bodies. -// * `STANDARD` - Parse JSON payloads in POST bodies. -// * `STANDARD_WITH_GRAPHQL` - Parse JSON and GraphQL payloads in POST bodies. -func (o SecurityPolicyAdvancedOptionsConfigOutput) JsonParsing() pulumi.StringPtrOutput { - return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfig) *string { return v.JsonParsing }).(pulumi.StringPtrOutput) + ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput + ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutputWithContext(context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput } -// Log level to use. Defaults to `NORMAL`. -// * `NORMAL` - Normal log level. -// * `VERBOSE` - Verbose log level. -func (o SecurityPolicyAdvancedOptionsConfigOutput) LogLevel() pulumi.StringPtrOutput { - return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfig) *string { return v.LogLevel }).(pulumi.StringPtrOutput) -} - -// An optional list of case-insensitive request header names to use for resolving the callers client IP address. -func (o SecurityPolicyAdvancedOptionsConfigOutput) UserIpRequestHeaders() pulumi.StringArrayOutput { - return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfig) []string { return v.UserIpRequestHeaders }).(pulumi.StringArrayOutput) -} - -type SecurityPolicyAdvancedOptionsConfigPtrOutput struct{ *pulumi.OutputState } - -func (SecurityPolicyAdvancedOptionsConfigPtrOutput) ElementType() reflect.Type { - return reflect.TypeOf((**SecurityPolicyAdvancedOptionsConfig)(nil)).Elem() -} - -func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput { - return o -} - -func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput { - return o -} - -func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) Elem() SecurityPolicyAdvancedOptionsConfigOutput { - return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) SecurityPolicyAdvancedOptionsConfig { - if v != nil { - return *v - } - var ret SecurityPolicyAdvancedOptionsConfig - return ret - }).(SecurityPolicyAdvancedOptionsConfigOutput) -} - -// Custom configuration to apply the JSON parsing. Only applicable when -// `jsonParsing` is set to `STANDARD`. Structure is documented below. -func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) JsonCustomConfig() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { - return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig { - if v == nil { - return nil - } - return v.JsonCustomConfig - }).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) -} - -// Whether or not to JSON parse the payload body. Defaults to `DISABLED`. -// * `DISABLED` - Don't parse JSON payloads in POST bodies. -// * `STANDARD` - Parse JSON payloads in POST bodies. -// * `STANDARD_WITH_GRAPHQL` - Parse JSON and GraphQL payloads in POST bodies. -func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) JsonParsing() pulumi.StringPtrOutput { - return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) *string { - if v == nil { - return nil - } - return v.JsonParsing - }).(pulumi.StringPtrOutput) +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs struct { + // Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + AutoDeployConfidenceThreshold pulumi.Float64PtrInput `pulumi:"autoDeployConfidenceThreshold"` + // Duration over which Adaptive Protection's auto-deployed actions last. + AutoDeployExpirationSec pulumi.IntPtrInput `pulumi:"autoDeployExpirationSec"` + // Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + AutoDeployImpactedBaselineThreshold pulumi.Float64PtrInput `pulumi:"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. + AutoDeployLoadThreshold pulumi.Float64PtrInput `pulumi:"autoDeployLoadThreshold"` + // Detection threshold based on absolute QPS. + DetectionAbsoluteQps pulumi.Float64PtrInput `pulumi:"detectionAbsoluteQps"` + // Detection threshold based on the backend service's load. + DetectionLoadThreshold pulumi.Float64PtrInput `pulumi:"detectionLoadThreshold"` + // Detection threshold based on QPS relative to the average of baseline traffic. + DetectionRelativeToBaselineQps pulumi.Float64PtrInput `pulumi:"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. + Name pulumi.StringInput `pulumi:"name"` + // Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + TrafficGranularityConfigs SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput `pulumi:"trafficGranularityConfigs"` } -// Log level to use. Defaults to `NORMAL`. -// * `NORMAL` - Normal log level. -// * `VERBOSE` - Verbose log level. -func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) LogLevel() pulumi.StringPtrOutput { - return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) *string { - if v == nil { - return nil - } - return v.LogLevel - }).(pulumi.StringPtrOutput) +func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)(nil)).Elem() } -// An optional list of case-insensitive request header names to use for resolving the callers client IP address. -func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) UserIpRequestHeaders() pulumi.StringArrayOutput { - return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) []string { - if v == nil { - return nil - } - return v.UserIpRequestHeaders - }).(pulumi.StringArrayOutput) +func (i SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return i.ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutputWithContext(context.Background()) } -type SecurityPolicyAdvancedOptionsConfigJsonCustomConfig struct { - // A list of custom Content-Type header values to apply the JSON parsing. The - // format of the Content-Type header values is defined in - // [RFC 1341](https://www.ietf.org/rfc/rfc1341.txt). When configuring a custom Content-Type header - // value, only the type/subtype needs to be specified, and the parameters should be excluded. - ContentTypes []string `pulumi:"contentTypes"` +func (i SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) } -// SecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput is an input type that accepts SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs and SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput values. -// You can construct a concrete instance of `SecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput` via: +// SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput is an input type that accepts SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray and SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput values. +// You can construct a concrete instance of `SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput` via: // -// SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{...} -type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput interface { +// SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray{ SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs{...} } +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput interface { pulumi.Input - ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput - ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput + ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput + ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutputWithContext(context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput } -type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs struct { - // A list of custom Content-Type header values to apply the JSON parsing. The - // format of the Content-Type header values is defined in - // [RFC 1341](https://www.ietf.org/rfc/rfc1341.txt). When configuring a custom Content-Type header - // value, only the type/subtype needs to be specified, and the parameters should be excluded. - ContentTypes pulumi.StringArrayInput `pulumi:"contentTypes"` -} +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray []SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput -func (SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ElementType() reflect.Type { - return reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)(nil)).Elem() } -func (i SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { - return i.ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(context.Background()) +func (i SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { + return i.ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutputWithContext(context.Background()) } -func (i SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { - return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) +func (i SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) } -func (i SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { - return i.ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(context.Background()) -} +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput struct{ *pulumi.OutputState } -func (i SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput).ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx) +func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)(nil)).Elem() } -// SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput is an input type that accepts SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs, SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtr and SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput values. -// You can construct a concrete instance of `SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput` via: -// -// SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{...} -// -// or: -// -// nil -type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput interface { - pulumi.Input - - ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput - ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return o } -type securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs - -func SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtr(v *SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput { - return (*securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType)(v) +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return o } -func (*securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType) ElementType() reflect.Type { - return reflect.TypeOf((**SecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +// Confidence threshold above which Adaptive Protection's auto-deploy takes actions. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) AutoDeployConfidenceThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) *float64 { + return v.AutoDeployConfidenceThreshold + }).(pulumi.Float64PtrOutput) } -func (i *securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { - return i.ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(context.Background()) +// Duration over which Adaptive Protection's auto-deployed actions last. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) AutoDeployExpirationSec() pulumi.IntPtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) *int { + return v.AutoDeployExpirationSec + }).(pulumi.IntPtrOutput) } -func (i *securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { - return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) +// Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) AutoDeployImpactedBaselineThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) *float64 { + return v.AutoDeployImpactedBaselineThreshold + }).(pulumi.Float64PtrOutput) } -type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput struct{ *pulumi.OutputState } - -func (SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ElementType() reflect.Type { - return reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +// Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) AutoDeployLoadThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) *float64 { + return v.AutoDeployLoadThreshold + }).(pulumi.Float64PtrOutput) } -func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { - return o +// Detection threshold based on absolute QPS. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) DetectionAbsoluteQps() pulumi.Float64PtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) *float64 { + return v.DetectionAbsoluteQps + }).(pulumi.Float64PtrOutput) } -func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { - return o +// Detection threshold based on the backend service's load. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) DetectionLoadThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) *float64 { + return v.DetectionLoadThreshold + }).(pulumi.Float64PtrOutput) } -func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { - return o.ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(context.Background()) +// Detection threshold based on QPS relative to the average of baseline traffic. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) DetectionRelativeToBaselineQps() pulumi.Float64PtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) *float64 { + return v.DetectionRelativeToBaselineQps + }).(pulumi.Float64PtrOutput) } -func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { - return o.ApplyTWithContext(ctx, func(_ context.Context, v SecurityPolicyAdvancedOptionsConfigJsonCustomConfig) *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig { - return &v - }).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) +// 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. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) string { + return v.Name + }).(pulumi.StringOutput) } -// A list of custom Content-Type header values to apply the JSON parsing. The -// format of the Content-Type header values is defined in -// [RFC 1341](https://www.ietf.org/rfc/rfc1341.txt). When configuring a custom Content-Type header -// value, only the type/subtype needs to be specified, and the parameters should be excluded. -func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ContentTypes() pulumi.StringArrayOutput { - return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfigJsonCustomConfig) []string { return v.ContentTypes }).(pulumi.StringArrayOutput) +// Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) TrafficGranularityConfigs() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) []SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig { + return v.TrafficGranularityConfigs + }).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) } -type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput struct{ *pulumi.OutputState } +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput struct{ *pulumi.OutputState } -func (SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) ElementType() reflect.Type { - return reflect.TypeOf((**SecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)(nil)).Elem() } -func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { return o } -func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { return o } -func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) Elem() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { - return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig) SecurityPolicyAdvancedOptionsConfigJsonCustomConfig { - if v != nil { - return *v - } - var ret SecurityPolicyAdvancedOptionsConfigJsonCustomConfig - return ret - }).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) -} - -// A list of custom Content-Type header values to apply the JSON parsing. The -// format of the Content-Type header values is defined in -// [RFC 1341](https://www.ietf.org/rfc/rfc1341.txt). When configuring a custom Content-Type header -// value, only the type/subtype needs to be specified, and the parameters should be excluded. -func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) ContentTypes() pulumi.StringArrayOutput { - return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig) []string { - if v == nil { - return nil - } - return v.ContentTypes - }).(pulumi.StringArrayOutput) +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) Index(i pulumi.IntInput) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + return vs[0].([]SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)[vs[1].(int)] + }).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) } func init() { @@ -89569,6 +89755,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*RegionNetworkEndpointGroupCloudFunctionPtrInput)(nil)).Elem(), RegionNetworkEndpointGroupCloudFunctionArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionNetworkEndpointGroupCloudRunInput)(nil)).Elem(), RegionNetworkEndpointGroupCloudRunArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionNetworkEndpointGroupCloudRunPtrInput)(nil)).Elem(), RegionNetworkEndpointGroupCloudRunArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionNetworkEndpointGroupPscDataInput)(nil)).Elem(), RegionNetworkEndpointGroupPscDataArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RegionNetworkEndpointGroupPscDataPtrInput)(nil)).Elem(), RegionNetworkEndpointGroupPscDataArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionNetworkEndpointGroupServerlessDeploymentInput)(nil)).Elem(), RegionNetworkEndpointGroupServerlessDeploymentArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionNetworkEndpointGroupServerlessDeploymentPtrInput)(nil)).Elem(), RegionNetworkEndpointGroupServerlessDeploymentArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*RegionNetworkFirewallPolicyRuleMatchInput)(nil)).Elem(), RegionNetworkFirewallPolicyRuleMatchArgs{}) @@ -89922,10 +90110,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigInput)(nil)).Elem(), SecurityPolicyAdvancedOptionsConfigArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigPtrInput)(nil)).Elem(), SecurityPolicyAdvancedOptionsConfigArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput)(nil)).Elem(), SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput)(nil)).Elem(), SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray{}) pulumi.RegisterOutputType(AutoscalerAutoscalingPolicyOutput{}) pulumi.RegisterOutputType(AutoscalerAutoscalingPolicyPtrOutput{}) pulumi.RegisterOutputType(AutoscalerAutoscalingPolicyCpuUtilizationOutput{}) @@ -90566,6 +90752,8 @@ func init() { pulumi.RegisterOutputType(RegionNetworkEndpointGroupCloudFunctionPtrOutput{}) pulumi.RegisterOutputType(RegionNetworkEndpointGroupCloudRunOutput{}) pulumi.RegisterOutputType(RegionNetworkEndpointGroupCloudRunPtrOutput{}) + pulumi.RegisterOutputType(RegionNetworkEndpointGroupPscDataOutput{}) + pulumi.RegisterOutputType(RegionNetworkEndpointGroupPscDataPtrOutput{}) pulumi.RegisterOutputType(RegionNetworkEndpointGroupServerlessDeploymentOutput{}) pulumi.RegisterOutputType(RegionNetworkEndpointGroupServerlessDeploymentPtrOutput{}) pulumi.RegisterOutputType(RegionNetworkFirewallPolicyRuleMatchOutput{}) @@ -90919,8 +91107,6 @@ func init() { pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput{}) pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput{}) pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrOutput{}) - pulumi.RegisterOutputType(SecurityPolicyAdvancedOptionsConfigOutput{}) - pulumi.RegisterOutputType(SecurityPolicyAdvancedOptionsConfigPtrOutput{}) - pulumi.RegisterOutputType(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput{}) - pulumi.RegisterOutputType(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput{}) + pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput{}) + pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput{}) } diff --git a/sdk/go/gcp/compute/pulumiTypes1.go b/sdk/go/gcp/compute/pulumiTypes1.go index 158073dd09..52bf7f699a 100644 --- a/sdk/go/gcp/compute/pulumiTypes1.go +++ b/sdk/go/gcp/compute/pulumiTypes1.go @@ -13,6 +13,502 @@ import ( var _ = internal.GetEnvOrDefault +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig struct { + // 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. + EnableEachUniqueValue *bool `pulumi:"enableEachUniqueValue"` + // The type of this configuration, a granular traffic unit can be one of the following: + // * `HTTP_HEADER_HOST` + // * `HTTP_PATH` + Type string `pulumi:"type"` + // Requests that match this value constitute a granular traffic unit. + Value *string `pulumi:"value"` +} + +// SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput is an input type that accepts SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs and SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput values. +// You can construct a concrete instance of `SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput` via: +// +// SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs{...} +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput interface { + pulumi.Input + + ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput + ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutputWithContext(context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput +} + +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs struct { + // 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. + EnableEachUniqueValue pulumi.BoolPtrInput `pulumi:"enableEachUniqueValue"` + // The type of this configuration, a granular traffic unit can be one of the following: + // * `HTTP_HEADER_HOST` + // * `HTTP_PATH` + Type pulumi.StringInput `pulumi:"type"` + // Requests that match this value constitute a granular traffic unit. + Value pulumi.StringPtrInput `pulumi:"value"` +} + +func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)(nil)).Elem() +} + +func (i SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return i.ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutputWithContext(context.Background()) +} + +func (i SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) +} + +// SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput is an input type that accepts SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray and SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput values. +// You can construct a concrete instance of `SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput` via: +// +// SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray{ SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs{...} } +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput interface { + pulumi.Input + + ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput + ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutputWithContext(context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput +} + +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray []SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput + +func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)(nil)).Elem() +} + +func (i SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return i.ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutputWithContext(context.Background()) +} + +func (i SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) +} + +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput struct{ *pulumi.OutputState } + +func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)(nil)).Elem() +} + +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return o +} + +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return o +} + +// 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. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) EnableEachUniqueValue() pulumi.BoolPtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig) *bool { + return v.EnableEachUniqueValue + }).(pulumi.BoolPtrOutput) +} + +// The type of this configuration, a granular traffic unit can be one of the following: +// * `HTTP_HEADER_HOST` +// * `HTTP_PATH` +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig) string { + return v.Type + }).(pulumi.StringOutput) +} + +// Requests that match this value constitute a granular traffic unit. +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) Value() pulumi.StringPtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig) *string { + return v.Value + }).(pulumi.StringPtrOutput) +} + +type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput struct{ *pulumi.OutputState } + +func (SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)(nil)).Elem() +} + +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return o +} + +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) ToSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return o +} + +func (o SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) Index(i pulumi.IntInput) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig { + return vs[0].([]SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)[vs[1].(int)] + }).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) +} + +type SecurityPolicyAdvancedOptionsConfig struct { + // Custom configuration to apply the JSON parsing. Only applicable when + // `jsonParsing` is set to `STANDARD`. Structure is documented below. + JsonCustomConfig *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig `pulumi:"jsonCustomConfig"` + // Whether or not to JSON parse the payload body. Defaults to `DISABLED`. + // * `DISABLED` - Don't parse JSON payloads in POST bodies. + // * `STANDARD` - Parse JSON payloads in POST bodies. + // * `STANDARD_WITH_GRAPHQL` - Parse JSON and GraphQL payloads in POST bodies. + JsonParsing *string `pulumi:"jsonParsing"` + // Log level to use. Defaults to `NORMAL`. + // * `NORMAL` - Normal log level. + // * `VERBOSE` - Verbose log level. + LogLevel *string `pulumi:"logLevel"` + // An optional list of case-insensitive request header names to use for resolving the callers client IP address. + UserIpRequestHeaders []string `pulumi:"userIpRequestHeaders"` +} + +// SecurityPolicyAdvancedOptionsConfigInput is an input type that accepts SecurityPolicyAdvancedOptionsConfigArgs and SecurityPolicyAdvancedOptionsConfigOutput values. +// You can construct a concrete instance of `SecurityPolicyAdvancedOptionsConfigInput` via: +// +// SecurityPolicyAdvancedOptionsConfigArgs{...} +type SecurityPolicyAdvancedOptionsConfigInput interface { + pulumi.Input + + ToSecurityPolicyAdvancedOptionsConfigOutput() SecurityPolicyAdvancedOptionsConfigOutput + ToSecurityPolicyAdvancedOptionsConfigOutputWithContext(context.Context) SecurityPolicyAdvancedOptionsConfigOutput +} + +type SecurityPolicyAdvancedOptionsConfigArgs struct { + // Custom configuration to apply the JSON parsing. Only applicable when + // `jsonParsing` is set to `STANDARD`. Structure is documented below. + JsonCustomConfig SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput `pulumi:"jsonCustomConfig"` + // Whether or not to JSON parse the payload body. Defaults to `DISABLED`. + // * `DISABLED` - Don't parse JSON payloads in POST bodies. + // * `STANDARD` - Parse JSON payloads in POST bodies. + // * `STANDARD_WITH_GRAPHQL` - Parse JSON and GraphQL payloads in POST bodies. + JsonParsing pulumi.StringPtrInput `pulumi:"jsonParsing"` + // Log level to use. Defaults to `NORMAL`. + // * `NORMAL` - Normal log level. + // * `VERBOSE` - Verbose log level. + LogLevel pulumi.StringPtrInput `pulumi:"logLevel"` + // An optional list of case-insensitive request header names to use for resolving the callers client IP address. + UserIpRequestHeaders pulumi.StringArrayInput `pulumi:"userIpRequestHeaders"` +} + +func (SecurityPolicyAdvancedOptionsConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfig)(nil)).Elem() +} + +func (i SecurityPolicyAdvancedOptionsConfigArgs) ToSecurityPolicyAdvancedOptionsConfigOutput() SecurityPolicyAdvancedOptionsConfigOutput { + return i.ToSecurityPolicyAdvancedOptionsConfigOutputWithContext(context.Background()) +} + +func (i SecurityPolicyAdvancedOptionsConfigArgs) ToSecurityPolicyAdvancedOptionsConfigOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigOutput) +} + +func (i SecurityPolicyAdvancedOptionsConfigArgs) ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput { + return i.ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(context.Background()) +} + +func (i SecurityPolicyAdvancedOptionsConfigArgs) ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigOutput).ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx) +} + +// SecurityPolicyAdvancedOptionsConfigPtrInput is an input type that accepts SecurityPolicyAdvancedOptionsConfigArgs, SecurityPolicyAdvancedOptionsConfigPtr and SecurityPolicyAdvancedOptionsConfigPtrOutput values. +// You can construct a concrete instance of `SecurityPolicyAdvancedOptionsConfigPtrInput` via: +// +// SecurityPolicyAdvancedOptionsConfigArgs{...} +// +// or: +// +// nil +type SecurityPolicyAdvancedOptionsConfigPtrInput interface { + pulumi.Input + + ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput + ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput +} + +type securityPolicyAdvancedOptionsConfigPtrType SecurityPolicyAdvancedOptionsConfigArgs + +func SecurityPolicyAdvancedOptionsConfigPtr(v *SecurityPolicyAdvancedOptionsConfigArgs) SecurityPolicyAdvancedOptionsConfigPtrInput { + return (*securityPolicyAdvancedOptionsConfigPtrType)(v) +} + +func (*securityPolicyAdvancedOptionsConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**SecurityPolicyAdvancedOptionsConfig)(nil)).Elem() +} + +func (i *securityPolicyAdvancedOptionsConfigPtrType) ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput { + return i.ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(context.Background()) +} + +func (i *securityPolicyAdvancedOptionsConfigPtrType) ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigPtrOutput) +} + +type SecurityPolicyAdvancedOptionsConfigOutput struct{ *pulumi.OutputState } + +func (SecurityPolicyAdvancedOptionsConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfig)(nil)).Elem() +} + +func (o SecurityPolicyAdvancedOptionsConfigOutput) ToSecurityPolicyAdvancedOptionsConfigOutput() SecurityPolicyAdvancedOptionsConfigOutput { + return o +} + +func (o SecurityPolicyAdvancedOptionsConfigOutput) ToSecurityPolicyAdvancedOptionsConfigOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigOutput { + return o +} + +func (o SecurityPolicyAdvancedOptionsConfigOutput) ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput { + return o.ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(context.Background()) +} + +func (o SecurityPolicyAdvancedOptionsConfigOutput) ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v SecurityPolicyAdvancedOptionsConfig) *SecurityPolicyAdvancedOptionsConfig { + return &v + }).(SecurityPolicyAdvancedOptionsConfigPtrOutput) +} + +// Custom configuration to apply the JSON parsing. Only applicable when +// `jsonParsing` is set to `STANDARD`. Structure is documented below. +func (o SecurityPolicyAdvancedOptionsConfigOutput) JsonCustomConfig() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfig) *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig { + return v.JsonCustomConfig + }).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) +} + +// Whether or not to JSON parse the payload body. Defaults to `DISABLED`. +// * `DISABLED` - Don't parse JSON payloads in POST bodies. +// * `STANDARD` - Parse JSON payloads in POST bodies. +// * `STANDARD_WITH_GRAPHQL` - Parse JSON and GraphQL payloads in POST bodies. +func (o SecurityPolicyAdvancedOptionsConfigOutput) JsonParsing() pulumi.StringPtrOutput { + return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfig) *string { return v.JsonParsing }).(pulumi.StringPtrOutput) +} + +// Log level to use. Defaults to `NORMAL`. +// * `NORMAL` - Normal log level. +// * `VERBOSE` - Verbose log level. +func (o SecurityPolicyAdvancedOptionsConfigOutput) LogLevel() pulumi.StringPtrOutput { + return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfig) *string { return v.LogLevel }).(pulumi.StringPtrOutput) +} + +// An optional list of case-insensitive request header names to use for resolving the callers client IP address. +func (o SecurityPolicyAdvancedOptionsConfigOutput) UserIpRequestHeaders() pulumi.StringArrayOutput { + return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfig) []string { return v.UserIpRequestHeaders }).(pulumi.StringArrayOutput) +} + +type SecurityPolicyAdvancedOptionsConfigPtrOutput struct{ *pulumi.OutputState } + +func (SecurityPolicyAdvancedOptionsConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**SecurityPolicyAdvancedOptionsConfig)(nil)).Elem() +} + +func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) ToSecurityPolicyAdvancedOptionsConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigPtrOutput { + return o +} + +func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) ToSecurityPolicyAdvancedOptionsConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigPtrOutput { + return o +} + +func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) Elem() SecurityPolicyAdvancedOptionsConfigOutput { + return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) SecurityPolicyAdvancedOptionsConfig { + if v != nil { + return *v + } + var ret SecurityPolicyAdvancedOptionsConfig + return ret + }).(SecurityPolicyAdvancedOptionsConfigOutput) +} + +// Custom configuration to apply the JSON parsing. Only applicable when +// `jsonParsing` is set to `STANDARD`. Structure is documented below. +func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) JsonCustomConfig() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig { + if v == nil { + return nil + } + return v.JsonCustomConfig + }).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) +} + +// Whether or not to JSON parse the payload body. Defaults to `DISABLED`. +// * `DISABLED` - Don't parse JSON payloads in POST bodies. +// * `STANDARD` - Parse JSON payloads in POST bodies. +// * `STANDARD_WITH_GRAPHQL` - Parse JSON and GraphQL payloads in POST bodies. +func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) JsonParsing() pulumi.StringPtrOutput { + return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) *string { + if v == nil { + return nil + } + return v.JsonParsing + }).(pulumi.StringPtrOutput) +} + +// Log level to use. Defaults to `NORMAL`. +// * `NORMAL` - Normal log level. +// * `VERBOSE` - Verbose log level. +func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) LogLevel() pulumi.StringPtrOutput { + return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) *string { + if v == nil { + return nil + } + return v.LogLevel + }).(pulumi.StringPtrOutput) +} + +// An optional list of case-insensitive request header names to use for resolving the callers client IP address. +func (o SecurityPolicyAdvancedOptionsConfigPtrOutput) UserIpRequestHeaders() pulumi.StringArrayOutput { + return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfig) []string { + if v == nil { + return nil + } + return v.UserIpRequestHeaders + }).(pulumi.StringArrayOutput) +} + +type SecurityPolicyAdvancedOptionsConfigJsonCustomConfig struct { + // A list of custom Content-Type header values to apply the JSON parsing. The + // format of the Content-Type header values is defined in + // [RFC 1341](https://www.ietf.org/rfc/rfc1341.txt). When configuring a custom Content-Type header + // value, only the type/subtype needs to be specified, and the parameters should be excluded. + ContentTypes []string `pulumi:"contentTypes"` +} + +// SecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput is an input type that accepts SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs and SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput values. +// You can construct a concrete instance of `SecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput` via: +// +// SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{...} +type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput interface { + pulumi.Input + + ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput + ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput +} + +type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs struct { + // A list of custom Content-Type header values to apply the JSON parsing. The + // format of the Content-Type header values is defined in + // [RFC 1341](https://www.ietf.org/rfc/rfc1341.txt). When configuring a custom Content-Type header + // value, only the type/subtype needs to be specified, and the parameters should be excluded. + ContentTypes pulumi.StringArrayInput `pulumi:"contentTypes"` +} + +func (SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +} + +func (i SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return i.ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(context.Background()) +} + +func (i SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) +} + +func (i SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return i.ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(context.Background()) +} + +func (i SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput).ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx) +} + +// SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput is an input type that accepts SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs, SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtr and SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput values. +// You can construct a concrete instance of `SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput` via: +// +// SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{...} +// +// or: +// +// nil +type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput interface { + pulumi.Input + + ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput + ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput +} + +type securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs + +func SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtr(v *SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput { + return (*securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType)(v) +} + +func (*securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**SecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +} + +func (i *securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return i.ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(context.Background()) +} + +func (i *securityPolicyAdvancedOptionsConfigJsonCustomConfigPtrType) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) +} + +type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput struct{ *pulumi.OutputState } + +func (SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +} + +func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return o +} + +func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return o +} + +func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return o.ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(context.Background()) +} + +func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v SecurityPolicyAdvancedOptionsConfigJsonCustomConfig) *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig { + return &v + }).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) +} + +// A list of custom Content-Type header values to apply the JSON parsing. The +// format of the Content-Type header values is defined in +// [RFC 1341](https://www.ietf.org/rfc/rfc1341.txt). When configuring a custom Content-Type header +// value, only the type/subtype needs to be specified, and the parameters should be excluded. +func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) ContentTypes() pulumi.StringArrayOutput { + return o.ApplyT(func(v SecurityPolicyAdvancedOptionsConfigJsonCustomConfig) []string { return v.ContentTypes }).(pulumi.StringArrayOutput) +} + +type SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput struct{ *pulumi.OutputState } + +func (SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**SecurityPolicyAdvancedOptionsConfigJsonCustomConfig)(nil)).Elem() +} + +func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return o +} + +func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) ToSecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput { + return o +} + +func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) Elem() SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput { + return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig) SecurityPolicyAdvancedOptionsConfigJsonCustomConfig { + if v != nil { + return *v + } + var ret SecurityPolicyAdvancedOptionsConfigJsonCustomConfig + return ret + }).(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput) +} + +// A list of custom Content-Type header values to apply the JSON parsing. The +// format of the Content-Type header values is defined in +// [RFC 1341](https://www.ietf.org/rfc/rfc1341.txt). When configuring a custom Content-Type header +// value, only the type/subtype needs to be specified, and the parameters should be excluded. +func (o SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput) ContentTypes() pulumi.StringArrayOutput { + return o.ApplyT(func(v *SecurityPolicyAdvancedOptionsConfigJsonCustomConfig) []string { + if v == nil { + return nil + } + return v.ContentTypes + }).(pulumi.StringArrayOutput) +} + type SecurityPolicyRecaptchaOptionsConfig struct { // A field to supply a reCAPTCHA site key to be used for all the rules using the redirect action with the type of `GOOGLE_RECAPTCHA` under the security policy. The specified site key needs to be created from the reCAPTCHA API. The user is responsible for the validity of the specified site key. If not specified, a Google-managed site key is used. RedirectSiteKey string `pulumi:"redirectSiteKey"` @@ -9832,7 +10328,7 @@ func (o URLMapHostRuleArrayOutput) Index(i pulumi.IntInput) URLMapHostRuleOutput } type URLMapPathMatcher struct { - // 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 @@ -9896,7 +10392,7 @@ type URLMapPathMatcherInput interface { } type URLMapPathMatcherArgs struct { - // 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 @@ -9999,7 +10495,7 @@ func (o URLMapPathMatcherOutput) ToURLMapPathMatcherOutputWithContext(ctx contex return o } -// 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 @@ -14011,7 +14507,7 @@ func (o URLMapPathMatcherHeaderActionResponseHeadersToAddArrayOutput) Index(i pu } type URLMapPathMatcherPathRule struct { - // 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 @@ -14054,7 +14550,7 @@ type URLMapPathMatcherPathRuleInput interface { } type URLMapPathMatcherPathRuleArgs struct { - // 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 @@ -14136,7 +14632,7 @@ func (o URLMapPathMatcherPathRuleOutput) ToURLMapPathMatcherPathRuleOutputWithCo return o } -// 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 @@ -27611,7 +28107,7 @@ type GetForwardingRulesRule struct { RecreateClosedPsc bool `pulumi:"recreateClosedPsc"` // 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. Region string `pulumi:"region"` // The URI of the resource. SelfLink string `pulumi:"selfLink"` @@ -27895,7 +28391,7 @@ type GetForwardingRulesRuleArgs struct { RecreateClosedPsc pulumi.BoolInput `pulumi:"recreateClosedPsc"` // 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. Region pulumi.StringInput `pulumi:"region"` // The URI of the resource. SelfLink pulumi.StringInput `pulumi:"selfLink"` @@ -28300,7 +28796,7 @@ func (o GetForwardingRulesRuleOutput) RecreateClosedPsc() pulumi.BoolOutput { // 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. func (o GetForwardingRulesRuleOutput) Region() pulumi.StringOutput { return o.ApplyT(func(v GetForwardingRulesRule) string { return v.Region }).(pulumi.StringOutput) } @@ -30337,6 +30833,10 @@ func (o GetHealthCheckTcpHealthCheckArrayOutput) Index(i pulumi.IntInput) GetHea type GetInstanceAdvancedMachineFeature struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization bool `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for the instance. + EnableUefiNetworking bool `pulumi:"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". + PerformanceMonitoringUnit string `pulumi:"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. ThreadsPerCore int `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -30359,6 +30859,10 @@ type GetInstanceAdvancedMachineFeatureInput interface { type GetInstanceAdvancedMachineFeatureArgs struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization pulumi.BoolInput `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking for the instance. + EnableUefiNetworking pulumi.BoolInput `pulumi:"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". + PerformanceMonitoringUnit pulumi.StringInput `pulumi:"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. ThreadsPerCore pulumi.IntInput `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -30423,6 +30927,16 @@ func (o GetInstanceAdvancedMachineFeatureOutput) EnableNestedVirtualization() pu return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) bool { return v.EnableNestedVirtualization }).(pulumi.BoolOutput) } +// Whether to enable UEFI networking for the instance. +func (o GetInstanceAdvancedMachineFeatureOutput) EnableUefiNetworking() pulumi.BoolOutput { + return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) bool { return v.EnableUefiNetworking }).(pulumi.BoolOutput) +} + +// 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". +func (o GetInstanceAdvancedMachineFeatureOutput) PerformanceMonitoringUnit() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) string { return v.PerformanceMonitoringUnit }).(pulumi.StringOutput) +} + // 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. func (o GetInstanceAdvancedMachineFeatureOutput) ThreadsPerCore() pulumi.IntOutput { return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) int { return v.ThreadsPerCore }).(pulumi.IntOutput) @@ -33303,7 +33817,7 @@ type GetInstanceNetworkInterface struct { NetworkAttachment string `pulumi:"networkAttachment"` // The internal ip address of the instance, either manually or dynamically assigned. NetworkIp string `pulumi:"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 NicType string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount int `pulumi:"queueCount"` @@ -33350,7 +33864,7 @@ type GetInstanceNetworkInterfaceArgs struct { NetworkAttachment pulumi.StringInput `pulumi:"networkAttachment"` // The internal ip address of the instance, either manually or dynamically assigned. NetworkIp pulumi.StringInput `pulumi:"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 NicType pulumi.StringInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntInput `pulumi:"queueCount"` @@ -33468,7 +33982,7 @@ func (o GetInstanceNetworkInterfaceOutput) NetworkIp() pulumi.StringOutput { return o.ApplyT(func(v GetInstanceNetworkInterface) string { return v.NetworkIp }).(pulumi.StringOutput) } -// 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 func (o GetInstanceNetworkInterfaceOutput) NicType() pulumi.StringOutput { return o.ApplyT(func(v GetInstanceNetworkInterface) string { return v.NicType }).(pulumi.StringOutput) } @@ -35301,6 +35815,10 @@ func (o GetInstanceShieldedInstanceConfigArrayOutput) Index(i pulumi.IntInput) G type GetInstanceTemplateAdvancedMachineFeature struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization bool `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking or not. + EnableUefiNetworking bool `pulumi:"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". + PerformanceMonitoringUnit string `pulumi:"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. ThreadsPerCore int `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -35323,6 +35841,10 @@ type GetInstanceTemplateAdvancedMachineFeatureInput interface { type GetInstanceTemplateAdvancedMachineFeatureArgs struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization pulumi.BoolInput `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking or not. + EnableUefiNetworking pulumi.BoolInput `pulumi:"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". + PerformanceMonitoringUnit pulumi.StringInput `pulumi:"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. ThreadsPerCore pulumi.IntInput `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -35387,6 +35909,16 @@ func (o GetInstanceTemplateAdvancedMachineFeatureOutput) EnableNestedVirtualizat return o.ApplyT(func(v GetInstanceTemplateAdvancedMachineFeature) bool { return v.EnableNestedVirtualization }).(pulumi.BoolOutput) } +// Whether to enable UEFI networking or not. +func (o GetInstanceTemplateAdvancedMachineFeatureOutput) EnableUefiNetworking() pulumi.BoolOutput { + return o.ApplyT(func(v GetInstanceTemplateAdvancedMachineFeature) bool { return v.EnableUefiNetworking }).(pulumi.BoolOutput) +} + +// 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". +func (o GetInstanceTemplateAdvancedMachineFeatureOutput) PerformanceMonitoringUnit() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceTemplateAdvancedMachineFeature) string { return v.PerformanceMonitoringUnit }).(pulumi.StringOutput) +} + // 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. func (o GetInstanceTemplateAdvancedMachineFeatureOutput) ThreadsPerCore() pulumi.IntOutput { return o.ApplyT(func(v GetInstanceTemplateAdvancedMachineFeature) int { return v.ThreadsPerCore }).(pulumi.IntOutput) @@ -36372,7 +36904,7 @@ type GetInstanceTemplateNetworkInterface struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp string `pulumi:"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 NicType string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount int `pulumi:"queueCount"` @@ -36429,7 +36961,7 @@ type GetInstanceTemplateNetworkInterfaceArgs struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp pulumi.StringInput `pulumi:"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 NicType pulumi.StringInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntInput `pulumi:"queueCount"` @@ -36561,7 +37093,7 @@ func (o GetInstanceTemplateNetworkInterfaceOutput) NetworkIp() pulumi.StringOutp return o.ApplyT(func(v GetInstanceTemplateNetworkInterface) string { return v.NetworkIp }).(pulumi.StringOutput) } -// 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 func (o GetInstanceTemplateNetworkInterfaceOutput) NicType() pulumi.StringOutput { return o.ApplyT(func(v GetInstanceTemplateNetworkInterface) string { return v.NicType }).(pulumi.StringOutput) } @@ -41493,6 +42025,10 @@ func (o GetRegionInstanceGroupManagerVersionTargetSizeArrayOutput) Index(i pulum type GetRegionInstanceTemplateAdvancedMachineFeature struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization bool `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking or not. + EnableUefiNetworking bool `pulumi:"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". + PerformanceMonitoringUnit string `pulumi:"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. ThreadsPerCore int `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -41515,6 +42051,10 @@ type GetRegionInstanceTemplateAdvancedMachineFeatureInput interface { type GetRegionInstanceTemplateAdvancedMachineFeatureArgs struct { // Whether to enable nested virtualization or not. EnableNestedVirtualization pulumi.BoolInput `pulumi:"enableNestedVirtualization"` + // Whether to enable UEFI networking or not. + EnableUefiNetworking pulumi.BoolInput `pulumi:"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". + PerformanceMonitoringUnit pulumi.StringInput `pulumi:"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. ThreadsPerCore pulumi.IntInput `pulumi:"threadsPerCore"` // Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". @@ -41579,6 +42119,16 @@ func (o GetRegionInstanceTemplateAdvancedMachineFeatureOutput) EnableNestedVirtu return o.ApplyT(func(v GetRegionInstanceTemplateAdvancedMachineFeature) bool { return v.EnableNestedVirtualization }).(pulumi.BoolOutput) } +// Whether to enable UEFI networking or not. +func (o GetRegionInstanceTemplateAdvancedMachineFeatureOutput) EnableUefiNetworking() pulumi.BoolOutput { + return o.ApplyT(func(v GetRegionInstanceTemplateAdvancedMachineFeature) bool { return v.EnableUefiNetworking }).(pulumi.BoolOutput) +} + +// 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". +func (o GetRegionInstanceTemplateAdvancedMachineFeatureOutput) PerformanceMonitoringUnit() pulumi.StringOutput { + return o.ApplyT(func(v GetRegionInstanceTemplateAdvancedMachineFeature) string { return v.PerformanceMonitoringUnit }).(pulumi.StringOutput) +} + // 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. func (o GetRegionInstanceTemplateAdvancedMachineFeatureOutput) ThreadsPerCore() pulumi.IntOutput { return o.ApplyT(func(v GetRegionInstanceTemplateAdvancedMachineFeature) int { return v.ThreadsPerCore }).(pulumi.IntOutput) @@ -42556,7 +43106,7 @@ type GetRegionInstanceTemplateNetworkInterface struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp string `pulumi:"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 NicType string `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount int `pulumi:"queueCount"` @@ -42605,7 +43155,7 @@ type GetRegionInstanceTemplateNetworkInterfaceArgs struct { // The private IP address to assign to the instance. If // empty, the address will be automatically assigned. NetworkIp pulumi.StringInput `pulumi:"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 NicType pulumi.StringInput `pulumi:"nicType"` // The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. QueueCount pulumi.IntInput `pulumi:"queueCount"` @@ -42726,7 +43276,7 @@ func (o GetRegionInstanceTemplateNetworkInterfaceOutput) NetworkIp() pulumi.Stri return o.ApplyT(func(v GetRegionInstanceTemplateNetworkInterface) string { return v.NetworkIp }).(pulumi.StringOutput) } -// 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 func (o GetRegionInstanceTemplateNetworkInterfaceOutput) NicType() pulumi.StringOutput { return o.ApplyT(func(v GetRegionInstanceTemplateNetworkInterface) string { return v.NicType }).(pulumi.StringOutput) } @@ -44822,6 +45372,112 @@ func (o GetRegionNetworkEndpointGroupCloudRunArrayOutput) Index(i pulumi.IntInpu }).(GetRegionNetworkEndpointGroupCloudRunOutput) } +type GetRegionNetworkEndpointGroupPscData struct { + // 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. + ProducerPort string `pulumi:"producerPort"` +} + +// GetRegionNetworkEndpointGroupPscDataInput is an input type that accepts GetRegionNetworkEndpointGroupPscDataArgs and GetRegionNetworkEndpointGroupPscDataOutput values. +// You can construct a concrete instance of `GetRegionNetworkEndpointGroupPscDataInput` via: +// +// GetRegionNetworkEndpointGroupPscDataArgs{...} +type GetRegionNetworkEndpointGroupPscDataInput interface { + pulumi.Input + + ToGetRegionNetworkEndpointGroupPscDataOutput() GetRegionNetworkEndpointGroupPscDataOutput + ToGetRegionNetworkEndpointGroupPscDataOutputWithContext(context.Context) GetRegionNetworkEndpointGroupPscDataOutput +} + +type GetRegionNetworkEndpointGroupPscDataArgs struct { + // 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. + ProducerPort pulumi.StringInput `pulumi:"producerPort"` +} + +func (GetRegionNetworkEndpointGroupPscDataArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetRegionNetworkEndpointGroupPscData)(nil)).Elem() +} + +func (i GetRegionNetworkEndpointGroupPscDataArgs) ToGetRegionNetworkEndpointGroupPscDataOutput() GetRegionNetworkEndpointGroupPscDataOutput { + return i.ToGetRegionNetworkEndpointGroupPscDataOutputWithContext(context.Background()) +} + +func (i GetRegionNetworkEndpointGroupPscDataArgs) ToGetRegionNetworkEndpointGroupPscDataOutputWithContext(ctx context.Context) GetRegionNetworkEndpointGroupPscDataOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetRegionNetworkEndpointGroupPscDataOutput) +} + +// GetRegionNetworkEndpointGroupPscDataArrayInput is an input type that accepts GetRegionNetworkEndpointGroupPscDataArray and GetRegionNetworkEndpointGroupPscDataArrayOutput values. +// You can construct a concrete instance of `GetRegionNetworkEndpointGroupPscDataArrayInput` via: +// +// GetRegionNetworkEndpointGroupPscDataArray{ GetRegionNetworkEndpointGroupPscDataArgs{...} } +type GetRegionNetworkEndpointGroupPscDataArrayInput interface { + pulumi.Input + + ToGetRegionNetworkEndpointGroupPscDataArrayOutput() GetRegionNetworkEndpointGroupPscDataArrayOutput + ToGetRegionNetworkEndpointGroupPscDataArrayOutputWithContext(context.Context) GetRegionNetworkEndpointGroupPscDataArrayOutput +} + +type GetRegionNetworkEndpointGroupPscDataArray []GetRegionNetworkEndpointGroupPscDataInput + +func (GetRegionNetworkEndpointGroupPscDataArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetRegionNetworkEndpointGroupPscData)(nil)).Elem() +} + +func (i GetRegionNetworkEndpointGroupPscDataArray) ToGetRegionNetworkEndpointGroupPscDataArrayOutput() GetRegionNetworkEndpointGroupPscDataArrayOutput { + return i.ToGetRegionNetworkEndpointGroupPscDataArrayOutputWithContext(context.Background()) +} + +func (i GetRegionNetworkEndpointGroupPscDataArray) ToGetRegionNetworkEndpointGroupPscDataArrayOutputWithContext(ctx context.Context) GetRegionNetworkEndpointGroupPscDataArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetRegionNetworkEndpointGroupPscDataArrayOutput) +} + +type GetRegionNetworkEndpointGroupPscDataOutput struct{ *pulumi.OutputState } + +func (GetRegionNetworkEndpointGroupPscDataOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetRegionNetworkEndpointGroupPscData)(nil)).Elem() +} + +func (o GetRegionNetworkEndpointGroupPscDataOutput) ToGetRegionNetworkEndpointGroupPscDataOutput() GetRegionNetworkEndpointGroupPscDataOutput { + return o +} + +func (o GetRegionNetworkEndpointGroupPscDataOutput) ToGetRegionNetworkEndpointGroupPscDataOutputWithContext(ctx context.Context) GetRegionNetworkEndpointGroupPscDataOutput { + return o +} + +// 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. +func (o GetRegionNetworkEndpointGroupPscDataOutput) ProducerPort() pulumi.StringOutput { + return o.ApplyT(func(v GetRegionNetworkEndpointGroupPscData) string { return v.ProducerPort }).(pulumi.StringOutput) +} + +type GetRegionNetworkEndpointGroupPscDataArrayOutput struct{ *pulumi.OutputState } + +func (GetRegionNetworkEndpointGroupPscDataArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetRegionNetworkEndpointGroupPscData)(nil)).Elem() +} + +func (o GetRegionNetworkEndpointGroupPscDataArrayOutput) ToGetRegionNetworkEndpointGroupPscDataArrayOutput() GetRegionNetworkEndpointGroupPscDataArrayOutput { + return o +} + +func (o GetRegionNetworkEndpointGroupPscDataArrayOutput) ToGetRegionNetworkEndpointGroupPscDataArrayOutputWithContext(ctx context.Context) GetRegionNetworkEndpointGroupPscDataArrayOutput { + return o +} + +func (o GetRegionNetworkEndpointGroupPscDataArrayOutput) Index(i pulumi.IntInput) GetRegionNetworkEndpointGroupPscDataOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetRegionNetworkEndpointGroupPscData { + return vs[0].([]GetRegionNetworkEndpointGroupPscData)[vs[1].(int)] + }).(GetRegionNetworkEndpointGroupPscDataOutput) +} + type GetRegionNetworkEndpointGroupServerlessDeployment struct { // The platform of the NEG backend target(s). Possible values: // API Gateway: apigateway.googleapis.com @@ -48990,6 +49646,8 @@ type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig struct { Enable bool `pulumi:"enable"` // Rule visibility. Supported values include: "STANDARD", "PREMIUM". RuleVisibility string `pulumi:"ruleVisibility"` + // Configuration options for layer7 adaptive protection for various customizable thresholds. + ThresholdConfigs []GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig `pulumi:"thresholdConfigs"` } // GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs and GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput values. @@ -49008,6 +49666,8 @@ type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs struct Enable pulumi.BoolInput `pulumi:"enable"` // Rule visibility. Supported values include: "STANDARD", "PREMIUM". RuleVisibility pulumi.StringInput `pulumi:"ruleVisibility"` + // Configuration options for layer7 adaptive protection for various customizable thresholds. + ThresholdConfigs GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput `pulumi:"thresholdConfigs"` } func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs) ElementType() reflect.Type { @@ -49073,6 +49733,13 @@ func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) }).(pulumi.StringOutput) } +// Configuration options for layer7 adaptive protection for various customizable thresholds. +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) ThresholdConfigs() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig) []GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + return v.ThresholdConfigs + }).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) +} + type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput struct{ *pulumi.OutputState } func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput) ElementType() reflect.Type { @@ -49093,6 +49760,290 @@ func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOut }).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput) } +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig struct { + AutoDeployConfidenceThreshold float64 `pulumi:"autoDeployConfidenceThreshold"` + AutoDeployExpirationSec int `pulumi:"autoDeployExpirationSec"` + AutoDeployImpactedBaselineThreshold float64 `pulumi:"autoDeployImpactedBaselineThreshold"` + AutoDeployLoadThreshold float64 `pulumi:"autoDeployLoadThreshold"` + DetectionAbsoluteQps float64 `pulumi:"detectionAbsoluteQps"` + DetectionLoadThreshold float64 `pulumi:"detectionLoadThreshold"` + DetectionRelativeToBaselineQps float64 `pulumi:"detectionRelativeToBaselineQps"` + // The name of the security policy. Provide either this or a `selfLink`. + Name string `pulumi:"name"` + TrafficGranularityConfigs []GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig `pulumi:"trafficGranularityConfigs"` +} + +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs and GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs{...} +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs struct { + AutoDeployConfidenceThreshold pulumi.Float64Input `pulumi:"autoDeployConfidenceThreshold"` + AutoDeployExpirationSec pulumi.IntInput `pulumi:"autoDeployExpirationSec"` + AutoDeployImpactedBaselineThreshold pulumi.Float64Input `pulumi:"autoDeployImpactedBaselineThreshold"` + AutoDeployLoadThreshold pulumi.Float64Input `pulumi:"autoDeployLoadThreshold"` + DetectionAbsoluteQps pulumi.Float64Input `pulumi:"detectionAbsoluteQps"` + DetectionLoadThreshold pulumi.Float64Input `pulumi:"detectionLoadThreshold"` + DetectionRelativeToBaselineQps pulumi.Float64Input `pulumi:"detectionRelativeToBaselineQps"` + // The name of the security policy. Provide either this or a `selfLink`. + Name pulumi.StringInput `pulumi:"name"` + TrafficGranularityConfigs GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput `pulumi:"trafficGranularityConfigs"` +} + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) +} + +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray and GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray{ GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs{...} } +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray []GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) AutoDeployConfidenceThreshold() pulumi.Float64Output { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) float64 { + return v.AutoDeployConfidenceThreshold + }).(pulumi.Float64Output) +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) AutoDeployExpirationSec() pulumi.IntOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) int { + return v.AutoDeployExpirationSec + }).(pulumi.IntOutput) +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) AutoDeployImpactedBaselineThreshold() pulumi.Float64Output { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) float64 { + return v.AutoDeployImpactedBaselineThreshold + }).(pulumi.Float64Output) +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) AutoDeployLoadThreshold() pulumi.Float64Output { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) float64 { + return v.AutoDeployLoadThreshold + }).(pulumi.Float64Output) +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) DetectionAbsoluteQps() pulumi.Float64Output { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) float64 { + return v.DetectionAbsoluteQps + }).(pulumi.Float64Output) +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) DetectionLoadThreshold() pulumi.Float64Output { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) float64 { + return v.DetectionLoadThreshold + }).(pulumi.Float64Output) +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) DetectionRelativeToBaselineQps() pulumi.Float64Output { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) float64 { + return v.DetectionRelativeToBaselineQps + }).(pulumi.Float64Output) +} + +// The name of the security policy. Provide either this or a `selfLink`. +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) string { + return v.Name + }).(pulumi.StringOutput) +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) TrafficGranularityConfigs() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig) []GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig { + return v.TrafficGranularityConfigs + }).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + return vs[0].([]GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig)[vs[1].(int)] + }).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig struct { + // 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. + EnableEachUniqueValue bool `pulumi:"enableEachUniqueValue"` + // Type of this configuration. + Type string `pulumi:"type"` + // Requests that match this value constitute a granular traffic unit. + Value string `pulumi:"value"` +} + +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs and GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs{...} +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs struct { + // 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. + EnableEachUniqueValue pulumi.BoolInput `pulumi:"enableEachUniqueValue"` + // Type of this configuration. + Type pulumi.StringInput `pulumi:"type"` + // Requests that match this value constitute a granular traffic unit. + Value pulumi.StringInput `pulumi:"value"` +} + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) +} + +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput is an input type that accepts GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray and GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput values. +// You can construct a concrete instance of `GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput` via: +// +// GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray{ GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs{...} } +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput interface { + pulumi.Input + + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput + ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutputWithContext(context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray []GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)(nil)).Elem() +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return i.ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutputWithContext(context.Background()) +} + +func (i GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return o +} + +// 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. +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) EnableEachUniqueValue() pulumi.BoolOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig) bool { + return v.EnableEachUniqueValue + }).(pulumi.BoolOutput) +} + +// Type of this configuration. +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig) string { + return v.Type + }).(pulumi.StringOutput) +} + +// Requests that match this value constitute a granular traffic unit. +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) Value() pulumi.StringOutput { + return o.ApplyT(func(v GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig) string { + return v.Value + }).(pulumi.StringOutput) +} + +type GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)(nil)).Elem() +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput() GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) ToGetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutputWithContext(ctx context.Context) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput { + return o +} + +func (o GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput) Index(i pulumi.IntInput) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig { + return vs[0].([]GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig)[vs[1].(int)] + }).(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput) +} + type GetSecurityPolicyAdvancedOptionsConfig struct { // Custom configuration to apply the JSON parsing. Only applicable when JSON parsing is set to STANDARD. JsonCustomConfigs []GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfig `pulumi:"jsonCustomConfigs"` @@ -52200,6 +53151,12 @@ func (o GetSubnetworksSubnetworkArrayOutput) Index(i pulumi.IntInput) GetSubnetw } func init() { + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigInput)(nil)).Elem(), SecurityPolicyAdvancedOptionsConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigPtrInput)(nil)).Elem(), SecurityPolicyAdvancedOptionsConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput)(nil)).Elem(), SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrInput)(nil)).Elem(), SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyRecaptchaOptionsConfigInput)(nil)).Elem(), SecurityPolicyRecaptchaOptionsConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyRecaptchaOptionsConfigPtrInput)(nil)).Elem(), SecurityPolicyRecaptchaOptionsConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyRuleTypeInput)(nil)).Elem(), SecurityPolicyRuleTypeArgs{}) @@ -52772,6 +53729,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetRegionNetworkEndpointGroupCloudFunctionArrayInput)(nil)).Elem(), GetRegionNetworkEndpointGroupCloudFunctionArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetRegionNetworkEndpointGroupCloudRunInput)(nil)).Elem(), GetRegionNetworkEndpointGroupCloudRunArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetRegionNetworkEndpointGroupCloudRunArrayInput)(nil)).Elem(), GetRegionNetworkEndpointGroupCloudRunArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetRegionNetworkEndpointGroupPscDataInput)(nil)).Elem(), GetRegionNetworkEndpointGroupPscDataArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetRegionNetworkEndpointGroupPscDataArrayInput)(nil)).Elem(), GetRegionNetworkEndpointGroupPscDataArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetRegionNetworkEndpointGroupServerlessDeploymentInput)(nil)).Elem(), GetRegionNetworkEndpointGroupServerlessDeploymentArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetRegionNetworkEndpointGroupServerlessDeploymentArrayInput)(nil)).Elem(), GetRegionNetworkEndpointGroupServerlessDeploymentArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetReservationShareSettingInput)(nil)).Elem(), GetReservationShareSettingArgs{}) @@ -52834,6 +53793,10 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfigInput)(nil)).Elem(), GetSecurityPolicyAdvancedOptionsConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfigArrayInput)(nil)).Elem(), GetSecurityPolicyAdvancedOptionsConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigInput)(nil)).Elem(), GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs{}) @@ -52888,6 +53851,12 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetSubnetworkSecondaryIpRangeArrayInput)(nil)).Elem(), GetSubnetworkSecondaryIpRangeArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSubnetworksSubnetworkInput)(nil)).Elem(), GetSubnetworksSubnetworkArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSubnetworksSubnetworkArrayInput)(nil)).Elem(), GetSubnetworksSubnetworkArray{}) + pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput{}) + pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput{}) + pulumi.RegisterOutputType(SecurityPolicyAdvancedOptionsConfigOutput{}) + pulumi.RegisterOutputType(SecurityPolicyAdvancedOptionsConfigPtrOutput{}) + pulumi.RegisterOutputType(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput{}) + pulumi.RegisterOutputType(SecurityPolicyAdvancedOptionsConfigJsonCustomConfigPtrOutput{}) pulumi.RegisterOutputType(SecurityPolicyRecaptchaOptionsConfigOutput{}) pulumi.RegisterOutputType(SecurityPolicyRecaptchaOptionsConfigPtrOutput{}) pulumi.RegisterOutputType(SecurityPolicyRuleTypeOutput{}) @@ -53460,6 +54429,8 @@ func init() { pulumi.RegisterOutputType(GetRegionNetworkEndpointGroupCloudFunctionArrayOutput{}) pulumi.RegisterOutputType(GetRegionNetworkEndpointGroupCloudRunOutput{}) pulumi.RegisterOutputType(GetRegionNetworkEndpointGroupCloudRunArrayOutput{}) + pulumi.RegisterOutputType(GetRegionNetworkEndpointGroupPscDataOutput{}) + pulumi.RegisterOutputType(GetRegionNetworkEndpointGroupPscDataArrayOutput{}) pulumi.RegisterOutputType(GetRegionNetworkEndpointGroupServerlessDeploymentOutput{}) pulumi.RegisterOutputType(GetRegionNetworkEndpointGroupServerlessDeploymentArrayOutput{}) pulumi.RegisterOutputType(GetReservationShareSettingOutput{}) @@ -53522,6 +54493,10 @@ func init() { pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArrayOutput{}) pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput{}) pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArrayOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigOutput{}) + pulumi.RegisterOutputType(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArrayOutput{}) pulumi.RegisterOutputType(GetSecurityPolicyAdvancedOptionsConfigOutput{}) pulumi.RegisterOutputType(GetSecurityPolicyAdvancedOptionsConfigArrayOutput{}) pulumi.RegisterOutputType(GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigOutput{}) diff --git a/sdk/go/gcp/compute/regionHealthCheck.go b/sdk/go/gcp/compute/regionHealthCheck.go index 6111313a97..36c983a268 100644 --- a/sdk/go/gcp/compute/regionHealthCheck.go +++ b/sdk/go/gcp/compute/regionHealthCheck.go @@ -508,6 +508,8 @@ type RegionHealthCheck struct { // A nested object resource. // Structure is documented below. GrpcHealthCheck RegionHealthCheckGrpcHealthCheckPtrOutput `pulumi:"grpcHealthCheck"` + // The unique identifier number for the resource. This identifier is defined by the server. + HealthCheckId pulumi.IntOutput `pulumi:"healthCheckId"` // A so-far unhealthy instance will be marked healthy after this many // consecutive successes. The default value is 2. HealthyThreshold pulumi.IntPtrOutput `pulumi:"healthyThreshold"` @@ -599,6 +601,8 @@ type regionHealthCheckState struct { // A nested object resource. // Structure is documented below. GrpcHealthCheck *RegionHealthCheckGrpcHealthCheck `pulumi:"grpcHealthCheck"` + // The unique identifier number for the resource. This identifier is defined by the server. + HealthCheckId *int `pulumi:"healthCheckId"` // A so-far unhealthy instance will be marked healthy after this many // consecutive successes. The default value is 2. HealthyThreshold *int `pulumi:"healthyThreshold"` @@ -661,6 +665,8 @@ type RegionHealthCheckState struct { // A nested object resource. // Structure is documented below. GrpcHealthCheck RegionHealthCheckGrpcHealthCheckPtrInput + // The unique identifier number for the resource. This identifier is defined by the server. + HealthCheckId pulumi.IntPtrInput // A so-far unhealthy instance will be marked healthy after this many // consecutive successes. The default value is 2. HealthyThreshold pulumi.IntPtrInput @@ -938,6 +944,11 @@ func (o RegionHealthCheckOutput) GrpcHealthCheck() RegionHealthCheckGrpcHealthCh return o.ApplyT(func(v *RegionHealthCheck) RegionHealthCheckGrpcHealthCheckPtrOutput { return v.GrpcHealthCheck }).(RegionHealthCheckGrpcHealthCheckPtrOutput) } +// The unique identifier number for the resource. This identifier is defined by the server. +func (o RegionHealthCheckOutput) HealthCheckId() pulumi.IntOutput { + return o.ApplyT(func(v *RegionHealthCheck) pulumi.IntOutput { return v.HealthCheckId }).(pulumi.IntOutput) +} + // A so-far unhealthy instance will be marked healthy after this many // consecutive successes. The default value is 2. func (o RegionHealthCheckOutput) HealthyThreshold() pulumi.IntPtrOutput { diff --git a/sdk/go/gcp/compute/regionInstanceGroupManager.go b/sdk/go/gcp/compute/regionInstanceGroupManager.go index 4f948232e0..d909dea649 100644 --- a/sdk/go/gcp/compute/regionInstanceGroupManager.go +++ b/sdk/go/gcp/compute/regionInstanceGroupManager.go @@ -223,6 +223,8 @@ type RegionInstanceGroupManager struct { InstanceFlexibilityPolicy RegionInstanceGroupManagerInstanceFlexibilityPolicyPtrOutput `pulumi:"instanceFlexibilityPolicy"` // The full URL of the instance group created by the manager. InstanceGroup pulumi.StringOutput `pulumi:"instanceGroup"` + // The unique identifier number for the resource. This identifier is defined by the server. + InstanceGroupManagerId pulumi.IntOutput `pulumi:"instanceGroupManagerId"` // The instance lifecycle policy for this managed instance group. InstanceLifecyclePolicy RegionInstanceGroupManagerInstanceLifecyclePolicyOutput `pulumi:"instanceLifecyclePolicy"` // Pagination behavior of the `listManagedInstances` API @@ -356,6 +358,8 @@ type regionInstanceGroupManagerState struct { InstanceFlexibilityPolicy *RegionInstanceGroupManagerInstanceFlexibilityPolicy `pulumi:"instanceFlexibilityPolicy"` // The full URL of the instance group created by the manager. InstanceGroup *string `pulumi:"instanceGroup"` + // The unique identifier number for the resource. This identifier is defined by the server. + InstanceGroupManagerId *int `pulumi:"instanceGroupManagerId"` // The instance lifecycle policy for this managed instance group. InstanceLifecyclePolicy *RegionInstanceGroupManagerInstanceLifecyclePolicy `pulumi:"instanceLifecyclePolicy"` // Pagination behavior of the `listManagedInstances` API @@ -454,6 +458,8 @@ type RegionInstanceGroupManagerState struct { InstanceFlexibilityPolicy RegionInstanceGroupManagerInstanceFlexibilityPolicyPtrInput // The full URL of the instance group created by the manager. InstanceGroup pulumi.StringPtrInput + // The unique identifier number for the resource. This identifier is defined by the server. + InstanceGroupManagerId pulumi.IntPtrInput // The instance lifecycle policy for this managed instance group. InstanceLifecyclePolicy RegionInstanceGroupManagerInstanceLifecyclePolicyPtrInput // Pagination behavior of the `listManagedInstances` API @@ -855,6 +861,11 @@ func (o RegionInstanceGroupManagerOutput) InstanceGroup() pulumi.StringOutput { return o.ApplyT(func(v *RegionInstanceGroupManager) pulumi.StringOutput { return v.InstanceGroup }).(pulumi.StringOutput) } +// The unique identifier number for the resource. This identifier is defined by the server. +func (o RegionInstanceGroupManagerOutput) InstanceGroupManagerId() pulumi.IntOutput { + return o.ApplyT(func(v *RegionInstanceGroupManager) pulumi.IntOutput { return v.InstanceGroupManagerId }).(pulumi.IntOutput) +} + // The instance lifecycle policy for this managed instance group. func (o RegionInstanceGroupManagerOutput) InstanceLifecyclePolicy() RegionInstanceGroupManagerInstanceLifecyclePolicyOutput { return o.ApplyT(func(v *RegionInstanceGroupManager) RegionInstanceGroupManagerInstanceLifecyclePolicyOutput { diff --git a/sdk/go/gcp/compute/regionNetworkEndpoint.go b/sdk/go/gcp/compute/regionNetworkEndpoint.go index 4f3e80e8c7..fe42f24384 100644 --- a/sdk/go/gcp/compute/regionNetworkEndpoint.go +++ b/sdk/go/gcp/compute/regionNetworkEndpoint.go @@ -244,6 +244,8 @@ type RegionNetworkEndpoint struct { // IPv4 address external endpoint. // This can only be specified when networkEndpointType of the NEG is INTERNET_IP_PORT. IpAddress pulumi.StringPtrOutput `pulumi:"ipAddress"` + // The unique identifier number for the resource. This identifier is defined by the server. + NetworkEndpointId pulumi.IntOutput `pulumi:"networkEndpointId"` // Port number of network endpoint. Port pulumi.IntOutput `pulumi:"port"` // The ID of the project in which the resource belongs. @@ -304,6 +306,8 @@ type regionNetworkEndpointState struct { // IPv4 address external endpoint. // This can only be specified when networkEndpointType of the NEG is INTERNET_IP_PORT. IpAddress *string `pulumi:"ipAddress"` + // The unique identifier number for the resource. This identifier is defined by the server. + NetworkEndpointId *int `pulumi:"networkEndpointId"` // Port number of network endpoint. Port *int `pulumi:"port"` // The ID of the project in which the resource belongs. @@ -329,6 +333,8 @@ type RegionNetworkEndpointState struct { // IPv4 address external endpoint. // This can only be specified when networkEndpointType of the NEG is INTERNET_IP_PORT. IpAddress pulumi.StringPtrInput + // The unique identifier number for the resource. This identifier is defined by the server. + NetworkEndpointId pulumi.IntPtrInput // Port number of network endpoint. Port pulumi.IntPtrInput // The ID of the project in which the resource belongs. @@ -507,6 +513,11 @@ func (o RegionNetworkEndpointOutput) IpAddress() pulumi.StringPtrOutput { return o.ApplyT(func(v *RegionNetworkEndpoint) pulumi.StringPtrOutput { return v.IpAddress }).(pulumi.StringPtrOutput) } +// The unique identifier number for the resource. This identifier is defined by the server. +func (o RegionNetworkEndpointOutput) NetworkEndpointId() pulumi.IntOutput { + return o.ApplyT(func(v *RegionNetworkEndpoint) pulumi.IntOutput { return v.NetworkEndpointId }).(pulumi.IntOutput) +} + // Port number of network endpoint. func (o RegionNetworkEndpointOutput) Port() pulumi.IntOutput { return o.ApplyT(func(v *RegionNetworkEndpoint) pulumi.IntOutput { return v.Port }).(pulumi.IntOutput) diff --git a/sdk/go/gcp/compute/regionNetworkEndpointGroup.go b/sdk/go/gcp/compute/regionNetworkEndpointGroup.go index 4f6a6d330c..fd3f54bd7f 100644 --- a/sdk/go/gcp/compute/regionNetworkEndpointGroup.go +++ b/sdk/go/gcp/compute/regionNetworkEndpointGroup.go @@ -364,9 +364,13 @@ import ( // Region: pulumi.String("europe-west4"), // LoadBalancingScheme: pulumi.String("INTERNAL"), // BackendService: defaultRegionBackendService.ID(), -// AllPorts: pulumi.Bool(true), -// Network: _default.Name, -// Subnetwork: defaultSubnetwork.Name, +// Ports: pulumi.StringArray{ +// pulumi.String("80"), +// pulumi.String("88"), +// pulumi.String("443"), +// }, +// Network: _default.Name, +// Subnetwork: defaultSubnetwork.Name, // }) // if err != nil { // return err @@ -390,8 +394,11 @@ import ( // Region: pulumi.String("europe-west4"), // NetworkEndpointType: pulumi.String("PRIVATE_SERVICE_CONNECT"), // PscTargetService: defaultServiceAttachment.SelfLink, -// Network: _default.SelfLink, -// Subnetwork: defaultSubnetwork.SelfLink, +// PscData: &compute.RegionNetworkEndpointGroupPscDataArgs{ +// ProducerPort: pulumi.String("88"), +// }, +// Network: _default.SelfLink, +// Subnetwork: defaultSubnetwork.SelfLink, // }) // if err != nil { // return err @@ -580,6 +587,9 @@ type RegionNetworkEndpointGroup struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` + // This field is only used for PSC NEGs. + // Structure is documented below. + PscData RegionNetworkEndpointGroupPscDataPtrOutput `pulumi:"pscData"` // This field is only used for PSC and INTERNET NEGs. // The target service url used to set up private service connection to // a Google API or a PSC Producer Service Attachment. @@ -666,6 +676,9 @@ type regionNetworkEndpointGroupState struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` + // This field is only used for PSC NEGs. + // Structure is documented below. + PscData *RegionNetworkEndpointGroupPscData `pulumi:"pscData"` // This field is only used for PSC and INTERNET NEGs. // The target service url used to set up private service connection to // a Google API or a PSC Producer Service Attachment. @@ -720,6 +733,9 @@ type RegionNetworkEndpointGroupState struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput + // This field is only used for PSC NEGs. + // Structure is documented below. + PscData RegionNetworkEndpointGroupPscDataPtrInput // This field is only used for PSC and INTERNET NEGs. // The target service url used to set up private service connection to // a Google API or a PSC Producer Service Attachment. @@ -778,6 +794,9 @@ type regionNetworkEndpointGroupArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` + // This field is only used for PSC NEGs. + // Structure is documented below. + PscData *RegionNetworkEndpointGroupPscData `pulumi:"pscData"` // This field is only used for PSC and INTERNET NEGs. // The target service url used to set up private service connection to // a Google API or a PSC Producer Service Attachment. @@ -831,6 +850,9 @@ type RegionNetworkEndpointGroupArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput + // This field is only used for PSC NEGs. + // Structure is documented below. + PscData RegionNetworkEndpointGroupPscDataPtrInput // This field is only used for PSC and INTERNET NEGs. // The target service url used to set up private service connection to // a Google API or a PSC Producer Service Attachment. @@ -995,6 +1017,12 @@ func (o RegionNetworkEndpointGroupOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *RegionNetworkEndpointGroup) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } +// This field is only used for PSC NEGs. +// Structure is documented below. +func (o RegionNetworkEndpointGroupOutput) PscData() RegionNetworkEndpointGroupPscDataPtrOutput { + return o.ApplyT(func(v *RegionNetworkEndpointGroup) RegionNetworkEndpointGroupPscDataPtrOutput { return v.PscData }).(RegionNetworkEndpointGroupPscDataPtrOutput) +} + // This field is only used for PSC and INTERNET NEGs. // The target service url used to set up private service connection to // a Google API or a PSC Producer Service Attachment. diff --git a/sdk/go/gcp/compute/subnetwork.go b/sdk/go/gcp/compute/subnetwork.go index e474baa03f..f085f7a0ad 100644 --- a/sdk/go/gcp/compute/subnetwork.go +++ b/sdk/go/gcp/compute/subnetwork.go @@ -570,6 +570,8 @@ type Subnetwork struct { // If not specified IPV4_ONLY will be used. // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. StackType pulumi.StringOutput `pulumi:"stackType"` + // The unique identifier number for the resource. This identifier is defined by the server. + SubnetworkId pulumi.IntOutput `pulumi:"subnetworkId"` } // NewSubnetwork registers a new resource with the given unique name, arguments, and options. @@ -706,6 +708,8 @@ type subnetworkState struct { // If not specified IPV4_ONLY will be used. // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. StackType *string `pulumi:"stackType"` + // The unique identifier number for the resource. This identifier is defined by the server. + SubnetworkId *int `pulumi:"subnetworkId"` } type SubnetworkState struct { @@ -810,6 +814,8 @@ type SubnetworkState struct { // If not specified IPV4_ONLY will be used. // Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. StackType pulumi.StringPtrInput + // The unique identifier number for the resource. This identifier is defined by the server. + SubnetworkId pulumi.IntPtrInput } func (SubnetworkState) ElementType() reflect.Type { @@ -1255,6 +1261,11 @@ func (o SubnetworkOutput) StackType() pulumi.StringOutput { return o.ApplyT(func(v *Subnetwork) pulumi.StringOutput { return v.StackType }).(pulumi.StringOutput) } +// The unique identifier number for the resource. This identifier is defined by the server. +func (o SubnetworkOutput) SubnetworkId() pulumi.IntOutput { + return o.ApplyT(func(v *Subnetwork) pulumi.IntOutput { return v.SubnetworkId }).(pulumi.IntOutput) +} + type SubnetworkArrayOutput struct{ *pulumi.OutputState } func (SubnetworkArrayOutput) ElementType() reflect.Type { diff --git a/sdk/go/gcp/compute/urlmap.go b/sdk/go/gcp/compute/urlmap.go index 8d8c9d6c1b..3e0ccf9fbc 100644 --- a/sdk/go/gcp/compute/urlmap.go +++ b/sdk/go/gcp/compute/urlmap.go @@ -1137,7 +1137,7 @@ type URLMap struct { // Creation timestamp in RFC3339 text format. CreationTimestamp pulumi.StringOutput `pulumi:"creationTimestamp"` - // 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 @@ -1233,7 +1233,7 @@ func GetURLMap(ctx *pulumi.Context, type urlmapState struct { // Creation timestamp in RFC3339 text format. CreationTimestamp *string `pulumi:"creationTimestamp"` - // 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 @@ -1300,7 +1300,7 @@ type urlmapState struct { type URLMapState struct { // Creation timestamp in RFC3339 text format. CreationTimestamp pulumi.StringPtrInput - // 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 @@ -1369,7 +1369,7 @@ func (URLMapState) ElementType() reflect.Type { } type urlmapArgs struct { - // 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 @@ -1428,7 +1428,7 @@ type urlmapArgs struct { // The set of arguments for constructing a URLMap resource. type URLMapArgs struct { - // 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 @@ -1577,7 +1577,7 @@ func (o URLMapOutput) CreationTimestamp() pulumi.StringOutput { return o.ApplyT(func(v *URLMap) pulumi.StringOutput { return v.CreationTimestamp }).(pulumi.StringOutput) } -// 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/go/gcp/config/config.go b/sdk/go/gcp/config/config.go index 4a685ebde1..16678e3976 100644 --- a/sdk/go/gcp/config/config.go +++ b/sdk/go/gcp/config/config.go @@ -281,6 +281,9 @@ func GetFirebaserulesCustomEndpoint(ctx *pulumi.Context) string { func GetFirestoreCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:firestoreCustomEndpoint") } +func GetGeminiCustomEndpoint(ctx *pulumi.Context) string { + return config.Get(ctx, "gcp:geminiCustomEndpoint") +} func GetGkeBackupCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:gkeBackupCustomEndpoint") } diff --git a/sdk/go/gcp/container/cluster.go b/sdk/go/gcp/container/cluster.go index 881e30b493..68fed05728 100644 --- a/sdk/go/gcp/container/cluster.go +++ b/sdk/go/gcp/container/cluster.go @@ -294,6 +294,10 @@ type Cluster struct { EnableTpu pulumi.BoolOutput `pulumi:"enableTpu"` // The IP address of this cluster's Kubernetes master. Endpoint pulumi.StringOutput `pulumi:"endpoint"` + // Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + // + // The `defaultSnatStatus` block supports + EnterpriseConfig ClusterEnterpriseConfigOutput `pulumi:"enterpriseConfig"` // Fleet configuration for the cluster. Structure is documented below. Fleet ClusterFleetPtrOutput `pulumi:"fleet"` // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. @@ -503,8 +507,6 @@ type Cluster struct { // Structure is documented below. VerticalPodAutoscaling ClusterVerticalPodAutoscalingOutput `pulumi:"verticalPodAutoscaling"` // 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. - // - // The `defaultSnatStatus` block supports WorkloadAltsConfig ClusterWorkloadAltsConfigOutput `pulumi:"workloadAltsConfig"` // Workload Identity allows Kubernetes service accounts to act as a user-managed // [Google IAM Service Account](https://cloud.google.com/iam/docs/service-accounts#user-managed_service_accounts). @@ -637,6 +639,10 @@ type clusterState struct { EnableTpu *bool `pulumi:"enableTpu"` // The IP address of this cluster's Kubernetes master. Endpoint *string `pulumi:"endpoint"` + // Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + // + // The `defaultSnatStatus` block supports + EnterpriseConfig *ClusterEnterpriseConfig `pulumi:"enterpriseConfig"` // Fleet configuration for the cluster. Structure is documented below. Fleet *ClusterFleet `pulumi:"fleet"` // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. @@ -846,8 +852,6 @@ type clusterState struct { // Structure is documented below. VerticalPodAutoscaling *ClusterVerticalPodAutoscaling `pulumi:"verticalPodAutoscaling"` // 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. - // - // The `defaultSnatStatus` block supports WorkloadAltsConfig *ClusterWorkloadAltsConfig `pulumi:"workloadAltsConfig"` // Workload Identity allows Kubernetes service accounts to act as a user-managed // [Google IAM Service Account](https://cloud.google.com/iam/docs/service-accounts#user-managed_service_accounts). @@ -946,6 +950,10 @@ type ClusterState struct { EnableTpu pulumi.BoolPtrInput // The IP address of this cluster's Kubernetes master. Endpoint pulumi.StringPtrInput + // Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + // + // The `defaultSnatStatus` block supports + EnterpriseConfig ClusterEnterpriseConfigPtrInput // Fleet configuration for the cluster. Structure is documented below. Fleet ClusterFleetPtrInput // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. @@ -1155,8 +1163,6 @@ type ClusterState struct { // Structure is documented below. VerticalPodAutoscaling ClusterVerticalPodAutoscalingPtrInput // 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. - // - // The `defaultSnatStatus` block supports WorkloadAltsConfig ClusterWorkloadAltsConfigPtrInput // Workload Identity allows Kubernetes service accounts to act as a user-managed // [Google IAM Service Account](https://cloud.google.com/iam/docs/service-accounts#user-managed_service_accounts). @@ -1255,6 +1261,10 @@ type clusterArgs struct { // Whether to enable Cloud TPU resources in this cluster. // See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). EnableTpu *bool `pulumi:"enableTpu"` + // Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + // + // The `defaultSnatStatus` block supports + EnterpriseConfig *ClusterEnterpriseConfig `pulumi:"enterpriseConfig"` // Fleet configuration for the cluster. Structure is documented below. Fleet *ClusterFleet `pulumi:"fleet"` // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. @@ -1444,8 +1454,6 @@ type clusterArgs struct { // Structure is documented below. VerticalPodAutoscaling *ClusterVerticalPodAutoscaling `pulumi:"verticalPodAutoscaling"` // 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. - // - // The `defaultSnatStatus` block supports WorkloadAltsConfig *ClusterWorkloadAltsConfig `pulumi:"workloadAltsConfig"` // Workload Identity allows Kubernetes service accounts to act as a user-managed // [Google IAM Service Account](https://cloud.google.com/iam/docs/service-accounts#user-managed_service_accounts). @@ -1541,6 +1549,10 @@ type ClusterArgs struct { // Whether to enable Cloud TPU resources in this cluster. // See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). EnableTpu pulumi.BoolPtrInput + // Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + // + // The `defaultSnatStatus` block supports + EnterpriseConfig ClusterEnterpriseConfigPtrInput // Fleet configuration for the cluster. Structure is documented below. Fleet ClusterFleetPtrInput // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. @@ -1730,8 +1742,6 @@ type ClusterArgs struct { // Structure is documented below. VerticalPodAutoscaling ClusterVerticalPodAutoscalingPtrInput // 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. - // - // The `defaultSnatStatus` block supports WorkloadAltsConfig ClusterWorkloadAltsConfigPtrInput // Workload Identity allows Kubernetes service accounts to act as a user-managed // [Google IAM Service Account](https://cloud.google.com/iam/docs/service-accounts#user-managed_service_accounts). @@ -2006,6 +2016,13 @@ func (o ClusterOutput) Endpoint() pulumi.StringOutput { return o.ApplyT(func(v *Cluster) pulumi.StringOutput { return v.Endpoint }).(pulumi.StringOutput) } +// Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. +// +// The `defaultSnatStatus` block supports +func (o ClusterOutput) EnterpriseConfig() ClusterEnterpriseConfigOutput { + return o.ApplyT(func(v *Cluster) ClusterEnterpriseConfigOutput { return v.EnterpriseConfig }).(ClusterEnterpriseConfigOutput) +} + // Fleet configuration for the cluster. Structure is documented below. func (o ClusterOutput) Fleet() ClusterFleetPtrOutput { return o.ApplyT(func(v *Cluster) ClusterFleetPtrOutput { return v.Fleet }).(ClusterFleetPtrOutput) @@ -2362,8 +2379,6 @@ func (o ClusterOutput) VerticalPodAutoscaling() ClusterVerticalPodAutoscalingOut } // 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. -// -// The `defaultSnatStatus` block supports func (o ClusterOutput) WorkloadAltsConfig() ClusterWorkloadAltsConfigOutput { return o.ApplyT(func(v *Cluster) ClusterWorkloadAltsConfigOutput { return v.WorkloadAltsConfig }).(ClusterWorkloadAltsConfigOutput) } diff --git a/sdk/go/gcp/container/getCluster.go b/sdk/go/gcp/container/getCluster.go index a2244f1c36..3a9c853bc2 100644 --- a/sdk/go/gcp/container/getCluster.go +++ b/sdk/go/gcp/container/getCluster.go @@ -98,6 +98,7 @@ type LookupClusterResult struct { EnableShieldedNodes bool `pulumi:"enableShieldedNodes"` EnableTpu bool `pulumi:"enableTpu"` Endpoint string `pulumi:"endpoint"` + EnterpriseConfigs []GetClusterEnterpriseConfig `pulumi:"enterpriseConfigs"` Fleets []GetClusterFleet `pulumi:"fleets"` GatewayApiConfigs []GetClusterGatewayApiConfig `pulumi:"gatewayApiConfigs"` // The provider-assigned unique ID for this managed resource. @@ -326,6 +327,10 @@ func (o LookupClusterResultOutput) Endpoint() pulumi.StringOutput { return o.ApplyT(func(v LookupClusterResult) string { return v.Endpoint }).(pulumi.StringOutput) } +func (o LookupClusterResultOutput) EnterpriseConfigs() GetClusterEnterpriseConfigArrayOutput { + return o.ApplyT(func(v LookupClusterResult) []GetClusterEnterpriseConfig { return v.EnterpriseConfigs }).(GetClusterEnterpriseConfigArrayOutput) +} + func (o LookupClusterResultOutput) Fleets() GetClusterFleetArrayOutput { return o.ApplyT(func(v LookupClusterResult) []GetClusterFleet { return v.Fleets }).(GetClusterFleetArrayOutput) } diff --git a/sdk/go/gcp/container/pulumiTypes.go b/sdk/go/gcp/container/pulumiTypes.go index d283ebed14..26508dc28a 100644 --- a/sdk/go/gcp/container/pulumiTypes.go +++ b/sdk/go/gcp/container/pulumiTypes.go @@ -14273,7 +14273,7 @@ type ClusterClusterAutoscalingAutoProvisioningDefaults struct { BootDiskKmsKey *string `pulumi:"bootDiskKmsKey"` // Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. Defaults to `100` DiskSize *int `pulumi:"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`. DiskType *string `pulumi:"diskType"` // The default image type used by NAP once a new node pool is being created. Please note that according to the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#default-image-type) the value must be one of the [COS_CONTAINERD, COS, UBUNTU_CONTAINERD, UBUNTU]. __NOTE__ : COS AND UBUNTU are deprecated as of `GKE 1.24` ImageType *string `pulumi:"imageType"` @@ -14311,7 +14311,7 @@ type ClusterClusterAutoscalingAutoProvisioningDefaultsArgs struct { BootDiskKmsKey pulumi.StringPtrInput `pulumi:"bootDiskKmsKey"` // Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. Defaults to `100` DiskSize pulumi.IntPtrInput `pulumi:"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`. DiskType pulumi.StringPtrInput `pulumi:"diskType"` // The default image type used by NAP once a new node pool is being created. Please note that according to the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#default-image-type) the value must be one of the [COS_CONTAINERD, COS, UBUNTU_CONTAINERD, UBUNTU]. __NOTE__ : COS AND UBUNTU are deprecated as of `GKE 1.24` ImageType pulumi.StringPtrInput `pulumi:"imageType"` @@ -14420,7 +14420,7 @@ func (o ClusterClusterAutoscalingAutoProvisioningDefaultsOutput) DiskSize() pulu return o.ApplyT(func(v ClusterClusterAutoscalingAutoProvisioningDefaults) *int { return v.DiskSize }).(pulumi.IntPtrOutput) } -// 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`. func (o ClusterClusterAutoscalingAutoProvisioningDefaultsOutput) DiskType() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterClusterAutoscalingAutoProvisioningDefaults) *string { return v.DiskType }).(pulumi.StringPtrOutput) } @@ -14514,7 +14514,7 @@ func (o ClusterClusterAutoscalingAutoProvisioningDefaultsPtrOutput) DiskSize() p }).(pulumi.IntPtrOutput) } -// 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`. func (o ClusterClusterAutoscalingAutoProvisioningDefaultsPtrOutput) DiskType() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterClusterAutoscalingAutoProvisioningDefaults) *string { if v == nil { @@ -17081,6 +17081,162 @@ func (o ClusterEnableK8sBetaApisPtrOutput) EnabledApis() pulumi.StringArrayOutpu }).(pulumi.StringArrayOutput) } +type ClusterEnterpriseConfig struct { + // The effective tier of the cluster. + ClusterTier *string `pulumi:"clusterTier"` + // Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + DesiredTier *string `pulumi:"desiredTier"` +} + +// ClusterEnterpriseConfigInput is an input type that accepts ClusterEnterpriseConfigArgs and ClusterEnterpriseConfigOutput values. +// You can construct a concrete instance of `ClusterEnterpriseConfigInput` via: +// +// ClusterEnterpriseConfigArgs{...} +type ClusterEnterpriseConfigInput interface { + pulumi.Input + + ToClusterEnterpriseConfigOutput() ClusterEnterpriseConfigOutput + ToClusterEnterpriseConfigOutputWithContext(context.Context) ClusterEnterpriseConfigOutput +} + +type ClusterEnterpriseConfigArgs struct { + // The effective tier of the cluster. + ClusterTier pulumi.StringPtrInput `pulumi:"clusterTier"` + // Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + DesiredTier pulumi.StringPtrInput `pulumi:"desiredTier"` +} + +func (ClusterEnterpriseConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterEnterpriseConfig)(nil)).Elem() +} + +func (i ClusterEnterpriseConfigArgs) ToClusterEnterpriseConfigOutput() ClusterEnterpriseConfigOutput { + return i.ToClusterEnterpriseConfigOutputWithContext(context.Background()) +} + +func (i ClusterEnterpriseConfigArgs) ToClusterEnterpriseConfigOutputWithContext(ctx context.Context) ClusterEnterpriseConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterEnterpriseConfigOutput) +} + +func (i ClusterEnterpriseConfigArgs) ToClusterEnterpriseConfigPtrOutput() ClusterEnterpriseConfigPtrOutput { + return i.ToClusterEnterpriseConfigPtrOutputWithContext(context.Background()) +} + +func (i ClusterEnterpriseConfigArgs) ToClusterEnterpriseConfigPtrOutputWithContext(ctx context.Context) ClusterEnterpriseConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterEnterpriseConfigOutput).ToClusterEnterpriseConfigPtrOutputWithContext(ctx) +} + +// ClusterEnterpriseConfigPtrInput is an input type that accepts ClusterEnterpriseConfigArgs, ClusterEnterpriseConfigPtr and ClusterEnterpriseConfigPtrOutput values. +// You can construct a concrete instance of `ClusterEnterpriseConfigPtrInput` via: +// +// ClusterEnterpriseConfigArgs{...} +// +// or: +// +// nil +type ClusterEnterpriseConfigPtrInput interface { + pulumi.Input + + ToClusterEnterpriseConfigPtrOutput() ClusterEnterpriseConfigPtrOutput + ToClusterEnterpriseConfigPtrOutputWithContext(context.Context) ClusterEnterpriseConfigPtrOutput +} + +type clusterEnterpriseConfigPtrType ClusterEnterpriseConfigArgs + +func ClusterEnterpriseConfigPtr(v *ClusterEnterpriseConfigArgs) ClusterEnterpriseConfigPtrInput { + return (*clusterEnterpriseConfigPtrType)(v) +} + +func (*clusterEnterpriseConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterEnterpriseConfig)(nil)).Elem() +} + +func (i *clusterEnterpriseConfigPtrType) ToClusterEnterpriseConfigPtrOutput() ClusterEnterpriseConfigPtrOutput { + return i.ToClusterEnterpriseConfigPtrOutputWithContext(context.Background()) +} + +func (i *clusterEnterpriseConfigPtrType) ToClusterEnterpriseConfigPtrOutputWithContext(ctx context.Context) ClusterEnterpriseConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterEnterpriseConfigPtrOutput) +} + +type ClusterEnterpriseConfigOutput struct{ *pulumi.OutputState } + +func (ClusterEnterpriseConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterEnterpriseConfig)(nil)).Elem() +} + +func (o ClusterEnterpriseConfigOutput) ToClusterEnterpriseConfigOutput() ClusterEnterpriseConfigOutput { + return o +} + +func (o ClusterEnterpriseConfigOutput) ToClusterEnterpriseConfigOutputWithContext(ctx context.Context) ClusterEnterpriseConfigOutput { + return o +} + +func (o ClusterEnterpriseConfigOutput) ToClusterEnterpriseConfigPtrOutput() ClusterEnterpriseConfigPtrOutput { + return o.ToClusterEnterpriseConfigPtrOutputWithContext(context.Background()) +} + +func (o ClusterEnterpriseConfigOutput) ToClusterEnterpriseConfigPtrOutputWithContext(ctx context.Context) ClusterEnterpriseConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterEnterpriseConfig) *ClusterEnterpriseConfig { + return &v + }).(ClusterEnterpriseConfigPtrOutput) +} + +// The effective tier of the cluster. +func (o ClusterEnterpriseConfigOutput) ClusterTier() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterEnterpriseConfig) *string { return v.ClusterTier }).(pulumi.StringPtrOutput) +} + +// Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. +func (o ClusterEnterpriseConfigOutput) DesiredTier() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterEnterpriseConfig) *string { return v.DesiredTier }).(pulumi.StringPtrOutput) +} + +type ClusterEnterpriseConfigPtrOutput struct{ *pulumi.OutputState } + +func (ClusterEnterpriseConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterEnterpriseConfig)(nil)).Elem() +} + +func (o ClusterEnterpriseConfigPtrOutput) ToClusterEnterpriseConfigPtrOutput() ClusterEnterpriseConfigPtrOutput { + return o +} + +func (o ClusterEnterpriseConfigPtrOutput) ToClusterEnterpriseConfigPtrOutputWithContext(ctx context.Context) ClusterEnterpriseConfigPtrOutput { + return o +} + +func (o ClusterEnterpriseConfigPtrOutput) Elem() ClusterEnterpriseConfigOutput { + return o.ApplyT(func(v *ClusterEnterpriseConfig) ClusterEnterpriseConfig { + if v != nil { + return *v + } + var ret ClusterEnterpriseConfig + return ret + }).(ClusterEnterpriseConfigOutput) +} + +// The effective tier of the cluster. +func (o ClusterEnterpriseConfigPtrOutput) ClusterTier() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterEnterpriseConfig) *string { + if v == nil { + return nil + } + return v.ClusterTier + }).(pulumi.StringPtrOutput) +} + +// Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. +func (o ClusterEnterpriseConfigPtrOutput) DesiredTier() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterEnterpriseConfig) *string { + if v == nil { + return nil + } + return v.DesiredTier + }).(pulumi.StringPtrOutput) +} + type ClusterFleet struct { // The resource name of the fleet Membership resource associated to this cluster with format `//gkehub.googleapis.com/projects/{{project}}/locations/{{location}}/memberships/{{name}}`. See the official doc for [fleet management](https://cloud.google.com/kubernetes-engine/docs/fleets-overview). Membership *string `pulumi:"membership"` @@ -20605,6 +20761,11 @@ type ClusterNodeConfig struct { // The amount of local SSD disks that will be // attached to each cluster node. Defaults to 0. LocalSsdCount *int `pulumi:"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. + LocalSsdEncryptionMode *string `pulumi:"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. LoggingVariant *string `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -20750,6 +20911,11 @@ type ClusterNodeConfigArgs struct { // The amount of local SSD disks that will be // attached to each cluster node. Defaults to 0. LocalSsdCount pulumi.IntPtrInput `pulumi:"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. + LocalSsdEncryptionMode pulumi.StringPtrInput `pulumi:"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. LoggingVariant pulumi.StringPtrInput `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -21025,6 +21191,14 @@ func (o ClusterNodeConfigOutput) LocalSsdCount() pulumi.IntPtrOutput { return o.ApplyT(func(v ClusterNodeConfig) *int { return v.LocalSsdCount }).(pulumi.IntPtrOutput) } +// 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. +func (o ClusterNodeConfigOutput) LocalSsdEncryptionMode() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterNodeConfig) *string { return v.LocalSsdEncryptionMode }).(pulumi.StringPtrOutput) +} + // 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. func (o ClusterNodeConfigOutput) LoggingVariant() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterNodeConfig) *string { return v.LoggingVariant }).(pulumi.StringPtrOutput) @@ -21408,6 +21582,19 @@ func (o ClusterNodeConfigPtrOutput) LocalSsdCount() pulumi.IntPtrOutput { }).(pulumi.IntPtrOutput) } +// 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. +func (o ClusterNodeConfigPtrOutput) LocalSsdEncryptionMode() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterNodeConfig) *string { + if v == nil { + return nil + } + return v.LocalSsdEncryptionMode + }).(pulumi.StringPtrOutput) +} + // 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. func (o ClusterNodeConfigPtrOutput) LoggingVariant() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterNodeConfig) *string { @@ -25988,6 +26175,8 @@ func (o ClusterNodePoolArrayOutput) Index(i pulumi.IntInput) ClusterNodePoolOutp } type ClusterNodePoolAutoConfig struct { + // Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroupMode` field is supported in `nodePoolAutoConfig`. Structure is documented below. + LinuxNodeConfig *ClusterNodePoolAutoConfigLinuxNodeConfig `pulumi:"linuxNodeConfig"` // The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. NetworkTags *ClusterNodePoolAutoConfigNetworkTags `pulumi:"networkTags"` // Kubelet configuration for Autopilot clusters. Currently, only `insecureKubeletReadonlyPortEnabled` is supported here. @@ -26009,6 +26198,8 @@ type ClusterNodePoolAutoConfigInput interface { } type ClusterNodePoolAutoConfigArgs struct { + // Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroupMode` field is supported in `nodePoolAutoConfig`. Structure is documented below. + LinuxNodeConfig ClusterNodePoolAutoConfigLinuxNodeConfigPtrInput `pulumi:"linuxNodeConfig"` // The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. NetworkTags ClusterNodePoolAutoConfigNetworkTagsPtrInput `pulumi:"networkTags"` // Kubelet configuration for Autopilot clusters. Currently, only `insecureKubeletReadonlyPortEnabled` is supported here. @@ -26095,6 +26286,11 @@ func (o ClusterNodePoolAutoConfigOutput) ToClusterNodePoolAutoConfigPtrOutputWit }).(ClusterNodePoolAutoConfigPtrOutput) } +// Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroupMode` field is supported in `nodePoolAutoConfig`. Structure is documented below. +func (o ClusterNodePoolAutoConfigOutput) LinuxNodeConfig() ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return o.ApplyT(func(v ClusterNodePoolAutoConfig) *ClusterNodePoolAutoConfigLinuxNodeConfig { return v.LinuxNodeConfig }).(ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput) +} + // The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. func (o ClusterNodePoolAutoConfigOutput) NetworkTags() ClusterNodePoolAutoConfigNetworkTagsPtrOutput { return o.ApplyT(func(v ClusterNodePoolAutoConfig) *ClusterNodePoolAutoConfigNetworkTags { return v.NetworkTags }).(ClusterNodePoolAutoConfigNetworkTagsPtrOutput) @@ -26137,6 +26333,16 @@ func (o ClusterNodePoolAutoConfigPtrOutput) Elem() ClusterNodePoolAutoConfigOutp }).(ClusterNodePoolAutoConfigOutput) } +// Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroupMode` field is supported in `nodePoolAutoConfig`. Structure is documented below. +func (o ClusterNodePoolAutoConfigPtrOutput) LinuxNodeConfig() ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return o.ApplyT(func(v *ClusterNodePoolAutoConfig) *ClusterNodePoolAutoConfigLinuxNodeConfig { + if v == nil { + return nil + } + return v.LinuxNodeConfig + }).(ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput) +} + // The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. func (o ClusterNodePoolAutoConfigPtrOutput) NetworkTags() ClusterNodePoolAutoConfigNetworkTagsPtrOutput { return o.ApplyT(func(v *ClusterNodePoolAutoConfig) *ClusterNodePoolAutoConfigNetworkTags { @@ -26168,6 +26374,159 @@ func (o ClusterNodePoolAutoConfigPtrOutput) ResourceManagerTags() pulumi.StringM }).(pulumi.StringMapOutput) } +type ClusterNodePoolAutoConfigLinuxNodeConfig struct { + // 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. + CgroupMode *string `pulumi:"cgroupMode"` +} + +// ClusterNodePoolAutoConfigLinuxNodeConfigInput is an input type that accepts ClusterNodePoolAutoConfigLinuxNodeConfigArgs and ClusterNodePoolAutoConfigLinuxNodeConfigOutput values. +// You can construct a concrete instance of `ClusterNodePoolAutoConfigLinuxNodeConfigInput` via: +// +// ClusterNodePoolAutoConfigLinuxNodeConfigArgs{...} +type ClusterNodePoolAutoConfigLinuxNodeConfigInput interface { + pulumi.Input + + ToClusterNodePoolAutoConfigLinuxNodeConfigOutput() ClusterNodePoolAutoConfigLinuxNodeConfigOutput + ToClusterNodePoolAutoConfigLinuxNodeConfigOutputWithContext(context.Context) ClusterNodePoolAutoConfigLinuxNodeConfigOutput +} + +type ClusterNodePoolAutoConfigLinuxNodeConfigArgs struct { + // 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. + CgroupMode pulumi.StringPtrInput `pulumi:"cgroupMode"` +} + +func (ClusterNodePoolAutoConfigLinuxNodeConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterNodePoolAutoConfigLinuxNodeConfig)(nil)).Elem() +} + +func (i ClusterNodePoolAutoConfigLinuxNodeConfigArgs) ToClusterNodePoolAutoConfigLinuxNodeConfigOutput() ClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return i.ToClusterNodePoolAutoConfigLinuxNodeConfigOutputWithContext(context.Background()) +} + +func (i ClusterNodePoolAutoConfigLinuxNodeConfigArgs) ToClusterNodePoolAutoConfigLinuxNodeConfigOutputWithContext(ctx context.Context) ClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterNodePoolAutoConfigLinuxNodeConfigOutput) +} + +func (i ClusterNodePoolAutoConfigLinuxNodeConfigArgs) ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput() ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return i.ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutputWithContext(context.Background()) +} + +func (i ClusterNodePoolAutoConfigLinuxNodeConfigArgs) ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutputWithContext(ctx context.Context) ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterNodePoolAutoConfigLinuxNodeConfigOutput).ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutputWithContext(ctx) +} + +// ClusterNodePoolAutoConfigLinuxNodeConfigPtrInput is an input type that accepts ClusterNodePoolAutoConfigLinuxNodeConfigArgs, ClusterNodePoolAutoConfigLinuxNodeConfigPtr and ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput values. +// You can construct a concrete instance of `ClusterNodePoolAutoConfigLinuxNodeConfigPtrInput` via: +// +// ClusterNodePoolAutoConfigLinuxNodeConfigArgs{...} +// +// or: +// +// nil +type ClusterNodePoolAutoConfigLinuxNodeConfigPtrInput interface { + pulumi.Input + + ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput() ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput + ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutputWithContext(context.Context) ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput +} + +type clusterNodePoolAutoConfigLinuxNodeConfigPtrType ClusterNodePoolAutoConfigLinuxNodeConfigArgs + +func ClusterNodePoolAutoConfigLinuxNodeConfigPtr(v *ClusterNodePoolAutoConfigLinuxNodeConfigArgs) ClusterNodePoolAutoConfigLinuxNodeConfigPtrInput { + return (*clusterNodePoolAutoConfigLinuxNodeConfigPtrType)(v) +} + +func (*clusterNodePoolAutoConfigLinuxNodeConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterNodePoolAutoConfigLinuxNodeConfig)(nil)).Elem() +} + +func (i *clusterNodePoolAutoConfigLinuxNodeConfigPtrType) ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput() ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return i.ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutputWithContext(context.Background()) +} + +func (i *clusterNodePoolAutoConfigLinuxNodeConfigPtrType) ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutputWithContext(ctx context.Context) ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput) +} + +type ClusterNodePoolAutoConfigLinuxNodeConfigOutput struct{ *pulumi.OutputState } + +func (ClusterNodePoolAutoConfigLinuxNodeConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterNodePoolAutoConfigLinuxNodeConfig)(nil)).Elem() +} + +func (o ClusterNodePoolAutoConfigLinuxNodeConfigOutput) ToClusterNodePoolAutoConfigLinuxNodeConfigOutput() ClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return o +} + +func (o ClusterNodePoolAutoConfigLinuxNodeConfigOutput) ToClusterNodePoolAutoConfigLinuxNodeConfigOutputWithContext(ctx context.Context) ClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return o +} + +func (o ClusterNodePoolAutoConfigLinuxNodeConfigOutput) ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput() ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return o.ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutputWithContext(context.Background()) +} + +func (o ClusterNodePoolAutoConfigLinuxNodeConfigOutput) ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutputWithContext(ctx context.Context) ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterNodePoolAutoConfigLinuxNodeConfig) *ClusterNodePoolAutoConfigLinuxNodeConfig { + return &v + }).(ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput) +} + +// 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. +func (o ClusterNodePoolAutoConfigLinuxNodeConfigOutput) CgroupMode() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterNodePoolAutoConfigLinuxNodeConfig) *string { return v.CgroupMode }).(pulumi.StringPtrOutput) +} + +type ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput struct{ *pulumi.OutputState } + +func (ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterNodePoolAutoConfigLinuxNodeConfig)(nil)).Elem() +} + +func (o ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput) ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput() ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return o +} + +func (o ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput) ToClusterNodePoolAutoConfigLinuxNodeConfigPtrOutputWithContext(ctx context.Context) ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput { + return o +} + +func (o ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput) Elem() ClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return o.ApplyT(func(v *ClusterNodePoolAutoConfigLinuxNodeConfig) ClusterNodePoolAutoConfigLinuxNodeConfig { + if v != nil { + return *v + } + var ret ClusterNodePoolAutoConfigLinuxNodeConfig + return ret + }).(ClusterNodePoolAutoConfigLinuxNodeConfigOutput) +} + +// 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. +func (o ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput) CgroupMode() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterNodePoolAutoConfigLinuxNodeConfig) *string { + if v == nil { + return nil + } + return v.CgroupMode + }).(pulumi.StringPtrOutput) +} + type ClusterNodePoolAutoConfigNetworkTags struct { // List of network tags applied to auto-provisioned node pools. Tags []string `pulumi:"tags"` @@ -28614,6 +28973,11 @@ type ClusterNodePoolNodeConfig struct { // The amount of local SSD disks that will be // attached to each cluster node. Defaults to 0. LocalSsdCount *int `pulumi:"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. + LocalSsdEncryptionMode *string `pulumi:"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. LoggingVariant *string `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -28759,6 +29123,11 @@ type ClusterNodePoolNodeConfigArgs struct { // The amount of local SSD disks that will be // attached to each cluster node. Defaults to 0. LocalSsdCount pulumi.IntPtrInput `pulumi:"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. + LocalSsdEncryptionMode pulumi.StringPtrInput `pulumi:"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. LoggingVariant pulumi.StringPtrInput `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -29048,6 +29417,14 @@ func (o ClusterNodePoolNodeConfigOutput) LocalSsdCount() pulumi.IntPtrOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfig) *int { return v.LocalSsdCount }).(pulumi.IntPtrOutput) } +// 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. +func (o ClusterNodePoolNodeConfigOutput) LocalSsdEncryptionMode() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterNodePoolNodeConfig) *string { return v.LocalSsdEncryptionMode }).(pulumi.StringPtrOutput) +} + // 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. func (o ClusterNodePoolNodeConfigOutput) LoggingVariant() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfig) *string { return v.LoggingVariant }).(pulumi.StringPtrOutput) @@ -29441,6 +29818,19 @@ func (o ClusterNodePoolNodeConfigPtrOutput) LocalSsdCount() pulumi.IntPtrOutput }).(pulumi.IntPtrOutput) } +// 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. +func (o ClusterNodePoolNodeConfigPtrOutput) LocalSsdEncryptionMode() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterNodePoolNodeConfig) *string { + if v == nil { + return nil + } + return v.LocalSsdEncryptionMode + }).(pulumi.StringPtrOutput) +} + // 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. func (o ClusterNodePoolNodeConfigPtrOutput) LoggingVariant() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterNodePoolNodeConfig) *string { @@ -38965,6 +39355,8 @@ type NodePoolNodeConfig struct { LocalNvmeSsdBlockConfig *NodePoolNodeConfigLocalNvmeSsdBlockConfig `pulumi:"localNvmeSsdBlockConfig"` // The number of local SSD disks to be attached to the node. LocalSsdCount *int `pulumi:"localSsdCount"` + // LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + LocalSsdEncryptionMode *string `pulumi:"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. LoggingVariant *string `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -39064,6 +39456,8 @@ type NodePoolNodeConfigArgs struct { LocalNvmeSsdBlockConfig NodePoolNodeConfigLocalNvmeSsdBlockConfigPtrInput `pulumi:"localNvmeSsdBlockConfig"` // The number of local SSD disks to be attached to the node. LocalSsdCount pulumi.IntPtrInput `pulumi:"localSsdCount"` + // LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + LocalSsdEncryptionMode pulumi.StringPtrInput `pulumi:"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. LoggingVariant pulumi.StringPtrInput `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -39297,6 +39691,11 @@ func (o NodePoolNodeConfigOutput) LocalSsdCount() pulumi.IntPtrOutput { return o.ApplyT(func(v NodePoolNodeConfig) *int { return v.LocalSsdCount }).(pulumi.IntPtrOutput) } +// LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. +func (o NodePoolNodeConfigOutput) LocalSsdEncryptionMode() pulumi.StringPtrOutput { + return o.ApplyT(func(v NodePoolNodeConfig) *string { return v.LocalSsdEncryptionMode }).(pulumi.StringPtrOutput) +} + // Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. func (o NodePoolNodeConfigOutput) LoggingVariant() pulumi.StringPtrOutput { return o.ApplyT(func(v NodePoolNodeConfig) *string { return v.LoggingVariant }).(pulumi.StringPtrOutput) @@ -39634,6 +40033,16 @@ func (o NodePoolNodeConfigPtrOutput) LocalSsdCount() pulumi.IntPtrOutput { }).(pulumi.IntPtrOutput) } +// LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. +func (o NodePoolNodeConfigPtrOutput) LocalSsdEncryptionMode() pulumi.StringPtrOutput { + return o.ApplyT(func(v *NodePoolNodeConfig) *string { + if v == nil { + return nil + } + return v.LocalSsdEncryptionMode + }).(pulumi.StringPtrOutput) +} + // Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. func (o NodePoolNodeConfigPtrOutput) LoggingVariant() pulumi.StringPtrOutput { return o.ApplyT(func(v *NodePoolNodeConfig) *string { @@ -48780,6 +49189,112 @@ func (o GetClusterEnableK8sBetaApiArrayOutput) Index(i pulumi.IntInput) GetClust }).(GetClusterEnableK8sBetaApiOutput) } +type GetClusterEnterpriseConfig struct { + // Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE. + ClusterTier string `pulumi:"clusterTier"` + // Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE. + DesiredTier string `pulumi:"desiredTier"` +} + +// GetClusterEnterpriseConfigInput is an input type that accepts GetClusterEnterpriseConfigArgs and GetClusterEnterpriseConfigOutput values. +// You can construct a concrete instance of `GetClusterEnterpriseConfigInput` via: +// +// GetClusterEnterpriseConfigArgs{...} +type GetClusterEnterpriseConfigInput interface { + pulumi.Input + + ToGetClusterEnterpriseConfigOutput() GetClusterEnterpriseConfigOutput + ToGetClusterEnterpriseConfigOutputWithContext(context.Context) GetClusterEnterpriseConfigOutput +} + +type GetClusterEnterpriseConfigArgs struct { + // Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE. + ClusterTier pulumi.StringInput `pulumi:"clusterTier"` + // Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE. + DesiredTier pulumi.StringInput `pulumi:"desiredTier"` +} + +func (GetClusterEnterpriseConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterEnterpriseConfig)(nil)).Elem() +} + +func (i GetClusterEnterpriseConfigArgs) ToGetClusterEnterpriseConfigOutput() GetClusterEnterpriseConfigOutput { + return i.ToGetClusterEnterpriseConfigOutputWithContext(context.Background()) +} + +func (i GetClusterEnterpriseConfigArgs) ToGetClusterEnterpriseConfigOutputWithContext(ctx context.Context) GetClusterEnterpriseConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterEnterpriseConfigOutput) +} + +// GetClusterEnterpriseConfigArrayInput is an input type that accepts GetClusterEnterpriseConfigArray and GetClusterEnterpriseConfigArrayOutput values. +// You can construct a concrete instance of `GetClusterEnterpriseConfigArrayInput` via: +// +// GetClusterEnterpriseConfigArray{ GetClusterEnterpriseConfigArgs{...} } +type GetClusterEnterpriseConfigArrayInput interface { + pulumi.Input + + ToGetClusterEnterpriseConfigArrayOutput() GetClusterEnterpriseConfigArrayOutput + ToGetClusterEnterpriseConfigArrayOutputWithContext(context.Context) GetClusterEnterpriseConfigArrayOutput +} + +type GetClusterEnterpriseConfigArray []GetClusterEnterpriseConfigInput + +func (GetClusterEnterpriseConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterEnterpriseConfig)(nil)).Elem() +} + +func (i GetClusterEnterpriseConfigArray) ToGetClusterEnterpriseConfigArrayOutput() GetClusterEnterpriseConfigArrayOutput { + return i.ToGetClusterEnterpriseConfigArrayOutputWithContext(context.Background()) +} + +func (i GetClusterEnterpriseConfigArray) ToGetClusterEnterpriseConfigArrayOutputWithContext(ctx context.Context) GetClusterEnterpriseConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterEnterpriseConfigArrayOutput) +} + +type GetClusterEnterpriseConfigOutput struct{ *pulumi.OutputState } + +func (GetClusterEnterpriseConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterEnterpriseConfig)(nil)).Elem() +} + +func (o GetClusterEnterpriseConfigOutput) ToGetClusterEnterpriseConfigOutput() GetClusterEnterpriseConfigOutput { + return o +} + +func (o GetClusterEnterpriseConfigOutput) ToGetClusterEnterpriseConfigOutputWithContext(ctx context.Context) GetClusterEnterpriseConfigOutput { + return o +} + +// Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE. +func (o GetClusterEnterpriseConfigOutput) ClusterTier() pulumi.StringOutput { + return o.ApplyT(func(v GetClusterEnterpriseConfig) string { return v.ClusterTier }).(pulumi.StringOutput) +} + +// Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE. +func (o GetClusterEnterpriseConfigOutput) DesiredTier() pulumi.StringOutput { + return o.ApplyT(func(v GetClusterEnterpriseConfig) string { return v.DesiredTier }).(pulumi.StringOutput) +} + +type GetClusterEnterpriseConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetClusterEnterpriseConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterEnterpriseConfig)(nil)).Elem() +} + +func (o GetClusterEnterpriseConfigArrayOutput) ToGetClusterEnterpriseConfigArrayOutput() GetClusterEnterpriseConfigArrayOutput { + return o +} + +func (o GetClusterEnterpriseConfigArrayOutput) ToGetClusterEnterpriseConfigArrayOutputWithContext(ctx context.Context) GetClusterEnterpriseConfigArrayOutput { + return o +} + +func (o GetClusterEnterpriseConfigArrayOutput) Index(i pulumi.IntInput) GetClusterEnterpriseConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetClusterEnterpriseConfig { + return vs[0].([]GetClusterEnterpriseConfig)[vs[1].(int)] + }).(GetClusterEnterpriseConfigOutput) +} + type GetClusterFleet struct { // Full resource name of the registered fleet membership of the cluster. Membership string `pulumi:"membership"` @@ -51108,6 +51623,8 @@ type GetClusterNodeConfig struct { LocalNvmeSsdBlockConfigs []GetClusterNodeConfigLocalNvmeSsdBlockConfig `pulumi:"localNvmeSsdBlockConfigs"` // The number of local SSD disks to be attached to the node. LocalSsdCount int `pulumi:"localSsdCount"` + // LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + LocalSsdEncryptionMode string `pulumi:"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. LoggingVariant string `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -51204,6 +51721,8 @@ type GetClusterNodeConfigArgs struct { LocalNvmeSsdBlockConfigs GetClusterNodeConfigLocalNvmeSsdBlockConfigArrayInput `pulumi:"localNvmeSsdBlockConfigs"` // The number of local SSD disks to be attached to the node. LocalSsdCount pulumi.IntInput `pulumi:"localSsdCount"` + // LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + LocalSsdEncryptionMode pulumi.StringInput `pulumi:"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. LoggingVariant pulumi.StringInput `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -51412,6 +51931,11 @@ func (o GetClusterNodeConfigOutput) LocalSsdCount() pulumi.IntOutput { return o.ApplyT(func(v GetClusterNodeConfig) int { return v.LocalSsdCount }).(pulumi.IntOutput) } +// LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. +func (o GetClusterNodeConfigOutput) LocalSsdEncryptionMode() pulumi.StringOutput { + return o.ApplyT(func(v GetClusterNodeConfig) string { return v.LocalSsdEncryptionMode }).(pulumi.StringOutput) +} + // Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. func (o GetClusterNodeConfigOutput) LoggingVariant() pulumi.StringOutput { return o.ApplyT(func(v GetClusterNodeConfig) string { return v.LoggingVariant }).(pulumi.StringOutput) @@ -54727,6 +55251,8 @@ func (o GetClusterNodePoolArrayOutput) Index(i pulumi.IntInput) GetClusterNodePo } type GetClusterNodePoolAutoConfig struct { + // Linux node configuration options. + LinuxNodeConfigs []GetClusterNodePoolAutoConfigLinuxNodeConfig `pulumi:"linuxNodeConfigs"` // Collection of Compute Engine network tags that can be applied to a node's underlying VM instance. NetworkTags []GetClusterNodePoolAutoConfigNetworkTag `pulumi:"networkTags"` // Node kubelet configs. @@ -54747,6 +55273,8 @@ type GetClusterNodePoolAutoConfigInput interface { } type GetClusterNodePoolAutoConfigArgs struct { + // Linux node configuration options. + LinuxNodeConfigs GetClusterNodePoolAutoConfigLinuxNodeConfigArrayInput `pulumi:"linuxNodeConfigs"` // Collection of Compute Engine network tags that can be applied to a node's underlying VM instance. NetworkTags GetClusterNodePoolAutoConfigNetworkTagArrayInput `pulumi:"networkTags"` // Node kubelet configs. @@ -54806,6 +55334,13 @@ func (o GetClusterNodePoolAutoConfigOutput) ToGetClusterNodePoolAutoConfigOutput return o } +// Linux node configuration options. +func (o GetClusterNodePoolAutoConfigOutput) LinuxNodeConfigs() GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput { + return o.ApplyT(func(v GetClusterNodePoolAutoConfig) []GetClusterNodePoolAutoConfigLinuxNodeConfig { + return v.LinuxNodeConfigs + }).(GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput) +} + // Collection of Compute Engine network tags that can be applied to a node's underlying VM instance. func (o GetClusterNodePoolAutoConfigOutput) NetworkTags() GetClusterNodePoolAutoConfigNetworkTagArrayOutput { return o.ApplyT(func(v GetClusterNodePoolAutoConfig) []GetClusterNodePoolAutoConfigNetworkTag { return v.NetworkTags }).(GetClusterNodePoolAutoConfigNetworkTagArrayOutput) @@ -54843,6 +55378,103 @@ func (o GetClusterNodePoolAutoConfigArrayOutput) Index(i pulumi.IntInput) GetClu }).(GetClusterNodePoolAutoConfigOutput) } +type GetClusterNodePoolAutoConfigLinuxNodeConfig struct { + // cgroupMode specifies the cgroup mode to be used on the node. + CgroupMode string `pulumi:"cgroupMode"` +} + +// GetClusterNodePoolAutoConfigLinuxNodeConfigInput is an input type that accepts GetClusterNodePoolAutoConfigLinuxNodeConfigArgs and GetClusterNodePoolAutoConfigLinuxNodeConfigOutput values. +// You can construct a concrete instance of `GetClusterNodePoolAutoConfigLinuxNodeConfigInput` via: +// +// GetClusterNodePoolAutoConfigLinuxNodeConfigArgs{...} +type GetClusterNodePoolAutoConfigLinuxNodeConfigInput interface { + pulumi.Input + + ToGetClusterNodePoolAutoConfigLinuxNodeConfigOutput() GetClusterNodePoolAutoConfigLinuxNodeConfigOutput + ToGetClusterNodePoolAutoConfigLinuxNodeConfigOutputWithContext(context.Context) GetClusterNodePoolAutoConfigLinuxNodeConfigOutput +} + +type GetClusterNodePoolAutoConfigLinuxNodeConfigArgs struct { + // cgroupMode specifies the cgroup mode to be used on the node. + CgroupMode pulumi.StringInput `pulumi:"cgroupMode"` +} + +func (GetClusterNodePoolAutoConfigLinuxNodeConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterNodePoolAutoConfigLinuxNodeConfig)(nil)).Elem() +} + +func (i GetClusterNodePoolAutoConfigLinuxNodeConfigArgs) ToGetClusterNodePoolAutoConfigLinuxNodeConfigOutput() GetClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return i.ToGetClusterNodePoolAutoConfigLinuxNodeConfigOutputWithContext(context.Background()) +} + +func (i GetClusterNodePoolAutoConfigLinuxNodeConfigArgs) ToGetClusterNodePoolAutoConfigLinuxNodeConfigOutputWithContext(ctx context.Context) GetClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterNodePoolAutoConfigLinuxNodeConfigOutput) +} + +// GetClusterNodePoolAutoConfigLinuxNodeConfigArrayInput is an input type that accepts GetClusterNodePoolAutoConfigLinuxNodeConfigArray and GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput values. +// You can construct a concrete instance of `GetClusterNodePoolAutoConfigLinuxNodeConfigArrayInput` via: +// +// GetClusterNodePoolAutoConfigLinuxNodeConfigArray{ GetClusterNodePoolAutoConfigLinuxNodeConfigArgs{...} } +type GetClusterNodePoolAutoConfigLinuxNodeConfigArrayInput interface { + pulumi.Input + + ToGetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput() GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput + ToGetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutputWithContext(context.Context) GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput +} + +type GetClusterNodePoolAutoConfigLinuxNodeConfigArray []GetClusterNodePoolAutoConfigLinuxNodeConfigInput + +func (GetClusterNodePoolAutoConfigLinuxNodeConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterNodePoolAutoConfigLinuxNodeConfig)(nil)).Elem() +} + +func (i GetClusterNodePoolAutoConfigLinuxNodeConfigArray) ToGetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput() GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput { + return i.ToGetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutputWithContext(context.Background()) +} + +func (i GetClusterNodePoolAutoConfigLinuxNodeConfigArray) ToGetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutputWithContext(ctx context.Context) GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput) +} + +type GetClusterNodePoolAutoConfigLinuxNodeConfigOutput struct{ *pulumi.OutputState } + +func (GetClusterNodePoolAutoConfigLinuxNodeConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetClusterNodePoolAutoConfigLinuxNodeConfig)(nil)).Elem() +} + +func (o GetClusterNodePoolAutoConfigLinuxNodeConfigOutput) ToGetClusterNodePoolAutoConfigLinuxNodeConfigOutput() GetClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return o +} + +func (o GetClusterNodePoolAutoConfigLinuxNodeConfigOutput) ToGetClusterNodePoolAutoConfigLinuxNodeConfigOutputWithContext(ctx context.Context) GetClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return o +} + +// cgroupMode specifies the cgroup mode to be used on the node. +func (o GetClusterNodePoolAutoConfigLinuxNodeConfigOutput) CgroupMode() pulumi.StringOutput { + return o.ApplyT(func(v GetClusterNodePoolAutoConfigLinuxNodeConfig) string { return v.CgroupMode }).(pulumi.StringOutput) +} + +type GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetClusterNodePoolAutoConfigLinuxNodeConfig)(nil)).Elem() +} + +func (o GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput) ToGetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput() GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput { + return o +} + +func (o GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput) ToGetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutputWithContext(ctx context.Context) GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput { + return o +} + +func (o GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput) Index(i pulumi.IntInput) GetClusterNodePoolAutoConfigLinuxNodeConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetClusterNodePoolAutoConfigLinuxNodeConfig { + return vs[0].([]GetClusterNodePoolAutoConfigLinuxNodeConfig)[vs[1].(int)] + }).(GetClusterNodePoolAutoConfigLinuxNodeConfigOutput) +} + type GetClusterNodePoolAutoConfigNetworkTag struct { // List of network tags applied to auto-provisioned node pools. Tags []string `pulumi:"tags"` @@ -56645,6 +57277,8 @@ type GetClusterNodePoolNodeConfig struct { LocalNvmeSsdBlockConfigs []GetClusterNodePoolNodeConfigLocalNvmeSsdBlockConfig `pulumi:"localNvmeSsdBlockConfigs"` // The number of local SSD disks to be attached to the node. LocalSsdCount int `pulumi:"localSsdCount"` + // LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + LocalSsdEncryptionMode string `pulumi:"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. LoggingVariant string `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -56741,6 +57375,8 @@ type GetClusterNodePoolNodeConfigArgs struct { LocalNvmeSsdBlockConfigs GetClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArrayInput `pulumi:"localNvmeSsdBlockConfigs"` // The number of local SSD disks to be attached to the node. LocalSsdCount pulumi.IntInput `pulumi:"localSsdCount"` + // LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + LocalSsdEncryptionMode pulumi.StringInput `pulumi:"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. LoggingVariant pulumi.StringInput `pulumi:"loggingVariant"` // The name of a Google Compute Engine machine type. @@ -56961,6 +57597,11 @@ func (o GetClusterNodePoolNodeConfigOutput) LocalSsdCount() pulumi.IntOutput { return o.ApplyT(func(v GetClusterNodePoolNodeConfig) int { return v.LocalSsdCount }).(pulumi.IntOutput) } +// LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. +func (o GetClusterNodePoolNodeConfigOutput) LocalSsdEncryptionMode() pulumi.StringOutput { + return o.ApplyT(func(v GetClusterNodePoolNodeConfig) string { return v.LocalSsdEncryptionMode }).(pulumi.StringOutput) +} + // Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. func (o GetClusterNodePoolNodeConfigOutput) LoggingVariant() pulumi.StringOutput { return o.ApplyT(func(v GetClusterNodePoolNodeConfig) string { return v.LoggingVariant }).(pulumi.StringOutput) @@ -62902,6 +63543,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterDnsConfigPtrInput)(nil)).Elem(), ClusterDnsConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterEnableK8sBetaApisInput)(nil)).Elem(), ClusterEnableK8sBetaApisArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterEnableK8sBetaApisPtrInput)(nil)).Elem(), ClusterEnableK8sBetaApisArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterEnterpriseConfigInput)(nil)).Elem(), ClusterEnterpriseConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterEnterpriseConfigPtrInput)(nil)).Elem(), ClusterEnterpriseConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterFleetInput)(nil)).Elem(), ClusterFleetArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterFleetPtrInput)(nil)).Elem(), ClusterFleetArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterGatewayApiConfigInput)(nil)).Elem(), ClusterGatewayApiConfigArgs{}) @@ -63005,6 +63648,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolArrayInput)(nil)).Elem(), ClusterNodePoolArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolAutoConfigInput)(nil)).Elem(), ClusterNodePoolAutoConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolAutoConfigPtrInput)(nil)).Elem(), ClusterNodePoolAutoConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolAutoConfigLinuxNodeConfigInput)(nil)).Elem(), ClusterNodePoolAutoConfigLinuxNodeConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolAutoConfigLinuxNodeConfigPtrInput)(nil)).Elem(), ClusterNodePoolAutoConfigLinuxNodeConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolAutoConfigNetworkTagsInput)(nil)).Elem(), ClusterNodePoolAutoConfigNetworkTagsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolAutoConfigNetworkTagsPtrInput)(nil)).Elem(), ClusterNodePoolAutoConfigNetworkTagsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterNodePoolAutoConfigNodeKubeletConfigInput)(nil)).Elem(), ClusterNodePoolAutoConfigNodeKubeletConfigArgs{}) @@ -63298,6 +63943,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetClusterDnsConfigArrayInput)(nil)).Elem(), GetClusterDnsConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterEnableK8sBetaApiInput)(nil)).Elem(), GetClusterEnableK8sBetaApiArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterEnableK8sBetaApiArrayInput)(nil)).Elem(), GetClusterEnableK8sBetaApiArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterEnterpriseConfigInput)(nil)).Elem(), GetClusterEnterpriseConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterEnterpriseConfigArrayInput)(nil)).Elem(), GetClusterEnterpriseConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterFleetInput)(nil)).Elem(), GetClusterFleetArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterFleetArrayInput)(nil)).Elem(), GetClusterFleetArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterGatewayApiConfigInput)(nil)).Elem(), GetClusterGatewayApiConfigArgs{}) @@ -63402,6 +64049,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolArrayInput)(nil)).Elem(), GetClusterNodePoolArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolAutoConfigInput)(nil)).Elem(), GetClusterNodePoolAutoConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolAutoConfigArrayInput)(nil)).Elem(), GetClusterNodePoolAutoConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolAutoConfigLinuxNodeConfigInput)(nil)).Elem(), GetClusterNodePoolAutoConfigLinuxNodeConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolAutoConfigLinuxNodeConfigArrayInput)(nil)).Elem(), GetClusterNodePoolAutoConfigLinuxNodeConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolAutoConfigNetworkTagInput)(nil)).Elem(), GetClusterNodePoolAutoConfigNetworkTagArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolAutoConfigNetworkTagArrayInput)(nil)).Elem(), GetClusterNodePoolAutoConfigNetworkTagArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetClusterNodePoolAutoConfigNodeKubeletConfigInput)(nil)).Elem(), GetClusterNodePoolAutoConfigNodeKubeletConfigArgs{}) @@ -63754,6 +64403,8 @@ func init() { pulumi.RegisterOutputType(ClusterDnsConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterEnableK8sBetaApisOutput{}) pulumi.RegisterOutputType(ClusterEnableK8sBetaApisPtrOutput{}) + pulumi.RegisterOutputType(ClusterEnterpriseConfigOutput{}) + pulumi.RegisterOutputType(ClusterEnterpriseConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterFleetOutput{}) pulumi.RegisterOutputType(ClusterFleetPtrOutput{}) pulumi.RegisterOutputType(ClusterGatewayApiConfigOutput{}) @@ -63857,6 +64508,8 @@ func init() { pulumi.RegisterOutputType(ClusterNodePoolArrayOutput{}) pulumi.RegisterOutputType(ClusterNodePoolAutoConfigOutput{}) pulumi.RegisterOutputType(ClusterNodePoolAutoConfigPtrOutput{}) + pulumi.RegisterOutputType(ClusterNodePoolAutoConfigLinuxNodeConfigOutput{}) + pulumi.RegisterOutputType(ClusterNodePoolAutoConfigLinuxNodeConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterNodePoolAutoConfigNetworkTagsOutput{}) pulumi.RegisterOutputType(ClusterNodePoolAutoConfigNetworkTagsPtrOutput{}) pulumi.RegisterOutputType(ClusterNodePoolAutoConfigNodeKubeletConfigOutput{}) @@ -64150,6 +64803,8 @@ func init() { pulumi.RegisterOutputType(GetClusterDnsConfigArrayOutput{}) pulumi.RegisterOutputType(GetClusterEnableK8sBetaApiOutput{}) pulumi.RegisterOutputType(GetClusterEnableK8sBetaApiArrayOutput{}) + pulumi.RegisterOutputType(GetClusterEnterpriseConfigOutput{}) + pulumi.RegisterOutputType(GetClusterEnterpriseConfigArrayOutput{}) pulumi.RegisterOutputType(GetClusterFleetOutput{}) pulumi.RegisterOutputType(GetClusterFleetArrayOutput{}) pulumi.RegisterOutputType(GetClusterGatewayApiConfigOutput{}) @@ -64254,6 +64909,8 @@ func init() { pulumi.RegisterOutputType(GetClusterNodePoolArrayOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolAutoConfigOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolAutoConfigArrayOutput{}) + pulumi.RegisterOutputType(GetClusterNodePoolAutoConfigLinuxNodeConfigOutput{}) + pulumi.RegisterOutputType(GetClusterNodePoolAutoConfigLinuxNodeConfigArrayOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolAutoConfigNetworkTagOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolAutoConfigNetworkTagArrayOutput{}) pulumi.RegisterOutputType(GetClusterNodePoolAutoConfigNodeKubeletConfigOutput{}) diff --git a/sdk/go/gcp/dataproc/batch.go b/sdk/go/gcp/dataproc/batch.go index 5bdd139764..5d2b2f4b55 100644 --- a/sdk/go/gcp/dataproc/batch.go +++ b/sdk/go/gcp/dataproc/batch.go @@ -384,6 +384,64 @@ import ( // } // // ``` +// ### Dataproc Batch Autotuning +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := dataproc.NewBatch(ctx, "example_batch_autotuning", &dataproc.BatchArgs{ +// BatchId: pulumi.String("tf-test-batch_16511"), +// Location: pulumi.String("us-central1"), +// Labels: pulumi.StringMap{ +// "batch_test": pulumi.String("terraform"), +// }, +// RuntimeConfig: &dataproc.BatchRuntimeConfigArgs{ +// Version: pulumi.String("2.2"), +// Properties: pulumi.StringMap{ +// "spark.dynamicAllocation.enabled": pulumi.String("false"), +// "spark.executor.instances": pulumi.String("2"), +// }, +// Cohort: pulumi.String("tf-dataproc-batch-example"), +// AutotuningConfig: &dataproc.BatchRuntimeConfigAutotuningConfigArgs{ +// Scenarios: pulumi.StringArray{ +// pulumi.String("SCALING"), +// pulumi.String("MEMORY"), +// }, +// }, +// }, +// EnvironmentConfig: &dataproc.BatchEnvironmentConfigArgs{ +// ExecutionConfig: &dataproc.BatchEnvironmentConfigExecutionConfigArgs{ +// SubnetworkUri: pulumi.String("default"), +// Ttl: pulumi.String("3600s"), +// }, +// }, +// SparkBatch: &dataproc.BatchSparkBatchArgs{ +// MainClass: pulumi.String("org.apache.spark.examples.SparkPi"), +// Args: pulumi.StringArray{ +// pulumi.String("10"), +// }, +// JarFileUris: pulumi.StringArray{ +// pulumi.String("file:///usr/lib/spark/examples/jars/spark-examples.jar"), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // diff --git a/sdk/go/gcp/dataproc/pulumiTypes.go b/sdk/go/gcp/dataproc/pulumiTypes.go index 8344a53a3f..8ceaa3869e 100644 --- a/sdk/go/gcp/dataproc/pulumiTypes.go +++ b/sdk/go/gcp/dataproc/pulumiTypes.go @@ -2255,6 +2255,11 @@ func (o BatchPysparkBatchPtrOutput) PythonFileUris() pulumi.StringArrayOutput { } type BatchRuntimeConfig struct { + // Optional. Autotuning configuration of the workload. + // Structure is documented below. + AutotuningConfig *BatchRuntimeConfigAutotuningConfig `pulumi:"autotuningConfig"` + // Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + Cohort *string `pulumi:"cohort"` // Optional custom container image for the job runtime environment. If not specified, a default container image will be used. ContainerImage *string `pulumi:"containerImage"` // (Output) @@ -2278,6 +2283,11 @@ type BatchRuntimeConfigInput interface { } type BatchRuntimeConfigArgs struct { + // Optional. Autotuning configuration of the workload. + // Structure is documented below. + AutotuningConfig BatchRuntimeConfigAutotuningConfigPtrInput `pulumi:"autotuningConfig"` + // Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + Cohort pulumi.StringPtrInput `pulumi:"cohort"` // Optional custom container image for the job runtime environment. If not specified, a default container image will be used. ContainerImage pulumi.StringPtrInput `pulumi:"containerImage"` // (Output) @@ -2366,6 +2376,17 @@ func (o BatchRuntimeConfigOutput) ToBatchRuntimeConfigPtrOutputWithContext(ctx c }).(BatchRuntimeConfigPtrOutput) } +// Optional. Autotuning configuration of the workload. +// Structure is documented below. +func (o BatchRuntimeConfigOutput) AutotuningConfig() BatchRuntimeConfigAutotuningConfigPtrOutput { + return o.ApplyT(func(v BatchRuntimeConfig) *BatchRuntimeConfigAutotuningConfig { return v.AutotuningConfig }).(BatchRuntimeConfigAutotuningConfigPtrOutput) +} + +// Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. +func (o BatchRuntimeConfigOutput) Cohort() pulumi.StringPtrOutput { + return o.ApplyT(func(v BatchRuntimeConfig) *string { return v.Cohort }).(pulumi.StringPtrOutput) +} + // Optional custom container image for the job runtime environment. If not specified, a default container image will be used. func (o BatchRuntimeConfigOutput) ContainerImage() pulumi.StringPtrOutput { return o.ApplyT(func(v BatchRuntimeConfig) *string { return v.ContainerImage }).(pulumi.StringPtrOutput) @@ -2411,6 +2432,27 @@ func (o BatchRuntimeConfigPtrOutput) Elem() BatchRuntimeConfigOutput { }).(BatchRuntimeConfigOutput) } +// Optional. Autotuning configuration of the workload. +// Structure is documented below. +func (o BatchRuntimeConfigPtrOutput) AutotuningConfig() BatchRuntimeConfigAutotuningConfigPtrOutput { + return o.ApplyT(func(v *BatchRuntimeConfig) *BatchRuntimeConfigAutotuningConfig { + if v == nil { + return nil + } + return v.AutotuningConfig + }).(BatchRuntimeConfigAutotuningConfigPtrOutput) +} + +// Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. +func (o BatchRuntimeConfigPtrOutput) Cohort() pulumi.StringPtrOutput { + return o.ApplyT(func(v *BatchRuntimeConfig) *string { + if v == nil { + return nil + } + return v.Cohort + }).(pulumi.StringPtrOutput) +} + // Optional custom container image for the job runtime environment. If not specified, a default container image will be used. func (o BatchRuntimeConfigPtrOutput) ContainerImage() pulumi.StringPtrOutput { return o.ApplyT(func(v *BatchRuntimeConfig) *string { @@ -2452,6 +2494,147 @@ func (o BatchRuntimeConfigPtrOutput) Version() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +type BatchRuntimeConfigAutotuningConfig struct { + // Optional. Scenarios for which tunings are applied. + // Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + Scenarios []string `pulumi:"scenarios"` +} + +// BatchRuntimeConfigAutotuningConfigInput is an input type that accepts BatchRuntimeConfigAutotuningConfigArgs and BatchRuntimeConfigAutotuningConfigOutput values. +// You can construct a concrete instance of `BatchRuntimeConfigAutotuningConfigInput` via: +// +// BatchRuntimeConfigAutotuningConfigArgs{...} +type BatchRuntimeConfigAutotuningConfigInput interface { + pulumi.Input + + ToBatchRuntimeConfigAutotuningConfigOutput() BatchRuntimeConfigAutotuningConfigOutput + ToBatchRuntimeConfigAutotuningConfigOutputWithContext(context.Context) BatchRuntimeConfigAutotuningConfigOutput +} + +type BatchRuntimeConfigAutotuningConfigArgs struct { + // Optional. Scenarios for which tunings are applied. + // Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + Scenarios pulumi.StringArrayInput `pulumi:"scenarios"` +} + +func (BatchRuntimeConfigAutotuningConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*BatchRuntimeConfigAutotuningConfig)(nil)).Elem() +} + +func (i BatchRuntimeConfigAutotuningConfigArgs) ToBatchRuntimeConfigAutotuningConfigOutput() BatchRuntimeConfigAutotuningConfigOutput { + return i.ToBatchRuntimeConfigAutotuningConfigOutputWithContext(context.Background()) +} + +func (i BatchRuntimeConfigAutotuningConfigArgs) ToBatchRuntimeConfigAutotuningConfigOutputWithContext(ctx context.Context) BatchRuntimeConfigAutotuningConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(BatchRuntimeConfigAutotuningConfigOutput) +} + +func (i BatchRuntimeConfigAutotuningConfigArgs) ToBatchRuntimeConfigAutotuningConfigPtrOutput() BatchRuntimeConfigAutotuningConfigPtrOutput { + return i.ToBatchRuntimeConfigAutotuningConfigPtrOutputWithContext(context.Background()) +} + +func (i BatchRuntimeConfigAutotuningConfigArgs) ToBatchRuntimeConfigAutotuningConfigPtrOutputWithContext(ctx context.Context) BatchRuntimeConfigAutotuningConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(BatchRuntimeConfigAutotuningConfigOutput).ToBatchRuntimeConfigAutotuningConfigPtrOutputWithContext(ctx) +} + +// BatchRuntimeConfigAutotuningConfigPtrInput is an input type that accepts BatchRuntimeConfigAutotuningConfigArgs, BatchRuntimeConfigAutotuningConfigPtr and BatchRuntimeConfigAutotuningConfigPtrOutput values. +// You can construct a concrete instance of `BatchRuntimeConfigAutotuningConfigPtrInput` via: +// +// BatchRuntimeConfigAutotuningConfigArgs{...} +// +// or: +// +// nil +type BatchRuntimeConfigAutotuningConfigPtrInput interface { + pulumi.Input + + ToBatchRuntimeConfigAutotuningConfigPtrOutput() BatchRuntimeConfigAutotuningConfigPtrOutput + ToBatchRuntimeConfigAutotuningConfigPtrOutputWithContext(context.Context) BatchRuntimeConfigAutotuningConfigPtrOutput +} + +type batchRuntimeConfigAutotuningConfigPtrType BatchRuntimeConfigAutotuningConfigArgs + +func BatchRuntimeConfigAutotuningConfigPtr(v *BatchRuntimeConfigAutotuningConfigArgs) BatchRuntimeConfigAutotuningConfigPtrInput { + return (*batchRuntimeConfigAutotuningConfigPtrType)(v) +} + +func (*batchRuntimeConfigAutotuningConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**BatchRuntimeConfigAutotuningConfig)(nil)).Elem() +} + +func (i *batchRuntimeConfigAutotuningConfigPtrType) ToBatchRuntimeConfigAutotuningConfigPtrOutput() BatchRuntimeConfigAutotuningConfigPtrOutput { + return i.ToBatchRuntimeConfigAutotuningConfigPtrOutputWithContext(context.Background()) +} + +func (i *batchRuntimeConfigAutotuningConfigPtrType) ToBatchRuntimeConfigAutotuningConfigPtrOutputWithContext(ctx context.Context) BatchRuntimeConfigAutotuningConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(BatchRuntimeConfigAutotuningConfigPtrOutput) +} + +type BatchRuntimeConfigAutotuningConfigOutput struct{ *pulumi.OutputState } + +func (BatchRuntimeConfigAutotuningConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*BatchRuntimeConfigAutotuningConfig)(nil)).Elem() +} + +func (o BatchRuntimeConfigAutotuningConfigOutput) ToBatchRuntimeConfigAutotuningConfigOutput() BatchRuntimeConfigAutotuningConfigOutput { + return o +} + +func (o BatchRuntimeConfigAutotuningConfigOutput) ToBatchRuntimeConfigAutotuningConfigOutputWithContext(ctx context.Context) BatchRuntimeConfigAutotuningConfigOutput { + return o +} + +func (o BatchRuntimeConfigAutotuningConfigOutput) ToBatchRuntimeConfigAutotuningConfigPtrOutput() BatchRuntimeConfigAutotuningConfigPtrOutput { + return o.ToBatchRuntimeConfigAutotuningConfigPtrOutputWithContext(context.Background()) +} + +func (o BatchRuntimeConfigAutotuningConfigOutput) ToBatchRuntimeConfigAutotuningConfigPtrOutputWithContext(ctx context.Context) BatchRuntimeConfigAutotuningConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v BatchRuntimeConfigAutotuningConfig) *BatchRuntimeConfigAutotuningConfig { + return &v + }).(BatchRuntimeConfigAutotuningConfigPtrOutput) +} + +// Optional. Scenarios for which tunings are applied. +// Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. +func (o BatchRuntimeConfigAutotuningConfigOutput) Scenarios() pulumi.StringArrayOutput { + return o.ApplyT(func(v BatchRuntimeConfigAutotuningConfig) []string { return v.Scenarios }).(pulumi.StringArrayOutput) +} + +type BatchRuntimeConfigAutotuningConfigPtrOutput struct{ *pulumi.OutputState } + +func (BatchRuntimeConfigAutotuningConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**BatchRuntimeConfigAutotuningConfig)(nil)).Elem() +} + +func (o BatchRuntimeConfigAutotuningConfigPtrOutput) ToBatchRuntimeConfigAutotuningConfigPtrOutput() BatchRuntimeConfigAutotuningConfigPtrOutput { + return o +} + +func (o BatchRuntimeConfigAutotuningConfigPtrOutput) ToBatchRuntimeConfigAutotuningConfigPtrOutputWithContext(ctx context.Context) BatchRuntimeConfigAutotuningConfigPtrOutput { + return o +} + +func (o BatchRuntimeConfigAutotuningConfigPtrOutput) Elem() BatchRuntimeConfigAutotuningConfigOutput { + return o.ApplyT(func(v *BatchRuntimeConfigAutotuningConfig) BatchRuntimeConfigAutotuningConfig { + if v != nil { + return *v + } + var ret BatchRuntimeConfigAutotuningConfig + return ret + }).(BatchRuntimeConfigAutotuningConfigOutput) +} + +// Optional. Scenarios for which tunings are applied. +// Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. +func (o BatchRuntimeConfigAutotuningConfigPtrOutput) Scenarios() pulumi.StringArrayOutput { + return o.ApplyT(func(v *BatchRuntimeConfigAutotuningConfig) []string { + if v == nil { + return nil + } + return v.Scenarios + }).(pulumi.StringArrayOutput) +} + type BatchRuntimeInfo struct { // (Output) // Approximate workload resource usage, calculated when the workload completes(see [Dataproc Serverless pricing](https://cloud.google.com/dataproc-serverless/pricing)) @@ -5792,6 +5975,8 @@ func (o ClusterClusterConfigEndpointConfigPtrOutput) HttpPorts() pulumi.StringMa } type ClusterClusterConfigGceClusterConfig struct { + // Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + ConfidentialInstanceConfig *ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig `pulumi:"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 // instances in the cluster will only have internal IP addresses. Note: Private Google Access @@ -5850,6 +6035,8 @@ type ClusterClusterConfigGceClusterConfigInput interface { } type ClusterClusterConfigGceClusterConfigArgs struct { + // Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + ConfidentialInstanceConfig ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrInput `pulumi:"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 // instances in the cluster will only have internal IP addresses. Note: Private Google Access @@ -5973,6 +6160,13 @@ func (o ClusterClusterConfigGceClusterConfigOutput) ToClusterClusterConfigGceClu }).(ClusterClusterConfigGceClusterConfigPtrOutput) } +// Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) +func (o ClusterClusterConfigGceClusterConfigOutput) ConfidentialInstanceConfig() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return o.ApplyT(func(v ClusterClusterConfigGceClusterConfig) *ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig { + return v.ConfidentialInstanceConfig + }).(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput) +} + // 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 // instances in the cluster will only have internal IP addresses. Note: Private Google Access @@ -6080,6 +6274,16 @@ func (o ClusterClusterConfigGceClusterConfigPtrOutput) Elem() ClusterClusterConf }).(ClusterClusterConfigGceClusterConfigOutput) } +// Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) +func (o ClusterClusterConfigGceClusterConfigPtrOutput) ConfidentialInstanceConfig() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfig) *ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig { + if v == nil { + return nil + } + return v.ConfidentialInstanceConfig + }).(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput) +} + // 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 // instances in the cluster will only have internal IP addresses. Note: Private Google Access @@ -6212,6 +6416,145 @@ func (o ClusterClusterConfigGceClusterConfigPtrOutput) Zone() pulumi.StringPtrOu }).(pulumi.StringPtrOutput) } +type ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig struct { + // Defines whether the instance should have confidential compute enabled. + EnableConfidentialCompute *bool `pulumi:"enableConfidentialCompute"` +} + +// ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigInput is an input type that accepts ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs and ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput values. +// You can construct a concrete instance of `ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigInput` via: +// +// ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs{...} +type ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigInput interface { + pulumi.Input + + ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput + ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutputWithContext(context.Context) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput +} + +type ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs struct { + // Defines whether the instance should have confidential compute enabled. + EnableConfidentialCompute pulumi.BoolPtrInput `pulumi:"enableConfidentialCompute"` +} + +func (ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig)(nil)).Elem() +} + +func (i ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput { + return i.ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutputWithContext(context.Background()) +} + +func (i ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput) +} + +func (i ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return i.ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutputWithContext(context.Background()) +} + +func (i ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput).ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutputWithContext(ctx) +} + +// ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrInput is an input type that accepts ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs, ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtr and ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput values. +// You can construct a concrete instance of `ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrInput` via: +// +// ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs{...} +// +// or: +// +// nil +type ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrInput interface { + pulumi.Input + + ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput + ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutputWithContext(context.Context) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput +} + +type clusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrType ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs + +func ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtr(v *ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrInput { + return (*clusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrType)(v) +} + +func (*clusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig)(nil)).Elem() +} + +func (i *clusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrType) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return i.ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutputWithContext(context.Background()) +} + +func (i *clusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrType) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput) +} + +type ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput struct{ *pulumi.OutputState } + +func (ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig)(nil)).Elem() +} + +func (o ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return o.ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutputWithContext(context.Background()) +} + +func (o ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig) *ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig { + return &v + }).(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput) +} + +// Defines whether the instance should have confidential compute enabled. +func (o ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput) EnableConfidentialCompute() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig) *bool { + return v.EnableConfidentialCompute + }).(pulumi.BoolPtrOutput) +} + +type ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput struct{ *pulumi.OutputState } + +func (ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig)(nil)).Elem() +} + +func (o ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput) ToClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput) Elem() ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig) ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig { + if v != nil { + return *v + } + var ret ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig + return ret + }).(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput) +} + +// Defines whether the instance should have confidential compute enabled. +func (o ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput) EnableConfidentialCompute() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig) *bool { + if v == nil { + return nil + } + return v.EnableConfidentialCompute + }).(pulumi.BoolPtrOutput) +} + type ClusterClusterConfigGceClusterConfigNodeGroupAffinity struct { // The URI of a sole-tenant node group resource that the cluster will be created on. NodeGroupUri string `pulumi:"nodeGroupUri"` @@ -8285,6 +8628,8 @@ type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy struct InstanceSelectionLists []ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList `pulumi:"instanceSelectionLists"` // A list of instance selection results in the group. InstanceSelectionResults []ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResult `pulumi:"instanceSelectionResults"` + // Defines how Dataproc should create VMs with a mixture of provisioning models. + ProvisioningModelMix *ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix `pulumi:"provisioningModelMix"` } // ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInput is an input type that accepts ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs and ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyOutput values. @@ -8303,6 +8648,8 @@ type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs st InstanceSelectionLists ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArrayInput `pulumi:"instanceSelectionLists"` // A list of instance selection results in the group. InstanceSelectionResults ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArrayInput `pulumi:"instanceSelectionResults"` + // Defines how Dataproc should create VMs with a mixture of provisioning models. + ProvisioningModelMix ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrInput `pulumi:"provisioningModelMix"` } func (ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs) ElementType() reflect.Type { @@ -8396,6 +8743,13 @@ func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyOutp }).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArrayOutput) } +// Defines how Dataproc should create VMs with a mixture of provisioning models. +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyOutput) ProvisioningModelMix() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return o.ApplyT(func(v ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy) *ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix { + return v.ProvisioningModelMix + }).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) +} + type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyPtrOutput struct{ *pulumi.OutputState } func (ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyPtrOutput) ElementType() reflect.Type { @@ -8440,6 +8794,16 @@ func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyPtrO }).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArrayOutput) } +// Defines how Dataproc should create VMs with a mixture of provisioning models. +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyPtrOutput) ProvisioningModelMix() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy) *ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix { + if v == nil { + return nil + } + return v.ProvisioningModelMix + }).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) +} + type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList struct { // Full machine-type names, e.g. `"n1-standard-16"`. MachineTypes []string `pulumi:"machineTypes"` @@ -8666,6 +9030,166 @@ func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInst }).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultOutput) } +type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix struct { + // The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + StandardCapacityBase *int `pulumi:"standardCapacityBase"` + // The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + StandardCapacityPercentAboveBase *int `pulumi:"standardCapacityPercentAboveBase"` +} + +// ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixInput is an input type that accepts ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs and ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput values. +// You can construct a concrete instance of `ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixInput` via: +// +// ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs{...} +type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixInput interface { + pulumi.Input + + ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput + ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutputWithContext(context.Context) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput +} + +type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs struct { + // The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + StandardCapacityBase pulumi.IntPtrInput `pulumi:"standardCapacityBase"` + // The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + StandardCapacityPercentAboveBase pulumi.IntPtrInput `pulumi:"standardCapacityPercentAboveBase"` +} + +func (ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix)(nil)).Elem() +} + +func (i ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput { + return i.ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutputWithContext(context.Background()) +} + +func (i ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutputWithContext(ctx context.Context) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput) +} + +func (i ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return i.ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutputWithContext(context.Background()) +} + +func (i ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutputWithContext(ctx context.Context) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput).ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutputWithContext(ctx) +} + +// ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrInput is an input type that accepts ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs, ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtr and ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput values. +// You can construct a concrete instance of `ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrInput` via: +// +// ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs{...} +// +// or: +// +// nil +type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrInput interface { + pulumi.Input + + ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput + ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutputWithContext(context.Context) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput +} + +type clusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrType ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs + +func ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtr(v *ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrInput { + return (*clusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrType)(v) +} + +func (*clusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix)(nil)).Elem() +} + +func (i *clusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrType) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return i.ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutputWithContext(context.Background()) +} + +func (i *clusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrType) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutputWithContext(ctx context.Context) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) +} + +type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput struct{ *pulumi.OutputState } + +func (ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix)(nil)).Elem() +} + +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput { + return o +} + +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutputWithContext(ctx context.Context) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput { + return o +} + +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return o.ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutputWithContext(context.Background()) +} + +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutputWithContext(ctx context.Context) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix) *ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix { + return &v + }).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) +} + +// The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput) StandardCapacityBase() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix) *int { + return v.StandardCapacityBase + }).(pulumi.IntPtrOutput) +} + +// The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput) StandardCapacityPercentAboveBase() pulumi.IntPtrOutput { + return o.ApplyT(func(v ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix) *int { + return v.StandardCapacityPercentAboveBase + }).(pulumi.IntPtrOutput) +} + +type ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput struct{ *pulumi.OutputState } + +func (ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix)(nil)).Elem() +} + +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return o +} + +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) ToClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutputWithContext(ctx context.Context) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput { + return o +} + +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) Elem() ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput { + return o.ApplyT(func(v *ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix) ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix { + if v != nil { + return *v + } + var ret ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix + return ret + }).(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput) +} + +// The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) StandardCapacityBase() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix) *int { + if v == nil { + return nil + } + return v.StandardCapacityBase + }).(pulumi.IntPtrOutput) +} + +// The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. +func (o ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput) StandardCapacityPercentAboveBase() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix) *int { + if v == nil { + return nil + } + return v.StandardCapacityPercentAboveBase + }).(pulumi.IntPtrOutput) +} + type ClusterClusterConfigSecurityConfig struct { // Kerberos Configuration KerberosConfig ClusterClusterConfigSecurityConfigKerberosConfig `pulumi:"kerberosConfig"` @@ -32645,6 +33169,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*BatchPysparkBatchPtrInput)(nil)).Elem(), BatchPysparkBatchArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BatchRuntimeConfigInput)(nil)).Elem(), BatchRuntimeConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BatchRuntimeConfigPtrInput)(nil)).Elem(), BatchRuntimeConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*BatchRuntimeConfigAutotuningConfigInput)(nil)).Elem(), BatchRuntimeConfigAutotuningConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*BatchRuntimeConfigAutotuningConfigPtrInput)(nil)).Elem(), BatchRuntimeConfigAutotuningConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BatchRuntimeInfoInput)(nil)).Elem(), BatchRuntimeInfoArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BatchRuntimeInfoArrayInput)(nil)).Elem(), BatchRuntimeInfoArray{}) pulumi.RegisterInputType(reflect.TypeOf((*BatchRuntimeInfoApproximateUsageInput)(nil)).Elem(), BatchRuntimeInfoApproximateUsageArgs{}) @@ -32683,6 +33209,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigEndpointConfigPtrInput)(nil)).Elem(), ClusterClusterConfigEndpointConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigPtrInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigNodeGroupAffinityInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigReservationAffinityInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigReservationAffinityArgs{}) @@ -32711,6 +33239,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArrayInput)(nil)).Elem(), ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultInput)(nil)).Elem(), ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArrayInput)(nil)).Elem(), ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixInput)(nil)).Elem(), ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrInput)(nil)).Elem(), ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigSecurityConfigInput)(nil)).Elem(), ClusterClusterConfigSecurityConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigSecurityConfigPtrInput)(nil)).Elem(), ClusterClusterConfigSecurityConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigSecurityConfigKerberosConfigInput)(nil)).Elem(), ClusterClusterConfigSecurityConfigKerberosConfigArgs{}) @@ -33009,6 +33539,8 @@ func init() { pulumi.RegisterOutputType(BatchPysparkBatchPtrOutput{}) pulumi.RegisterOutputType(BatchRuntimeConfigOutput{}) pulumi.RegisterOutputType(BatchRuntimeConfigPtrOutput{}) + pulumi.RegisterOutputType(BatchRuntimeConfigAutotuningConfigOutput{}) + pulumi.RegisterOutputType(BatchRuntimeConfigAutotuningConfigPtrOutput{}) pulumi.RegisterOutputType(BatchRuntimeInfoOutput{}) pulumi.RegisterOutputType(BatchRuntimeInfoArrayOutput{}) pulumi.RegisterOutputType(BatchRuntimeInfoApproximateUsageOutput{}) @@ -33047,6 +33579,8 @@ func init() { pulumi.RegisterOutputType(ClusterClusterConfigEndpointConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigPtrOutput{}) + pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigOutput{}) + pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigReservationAffinityOutput{}) @@ -33075,6 +33609,8 @@ func init() { pulumi.RegisterOutputType(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArrayOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArrayOutput{}) + pulumi.RegisterOutputType(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixOutput{}) + pulumi.RegisterOutputType(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixPtrOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigSecurityConfigOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigSecurityConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigSecurityConfigKerberosConfigOutput{}) diff --git a/sdk/go/gcp/diagflow/pulumiTypes.go b/sdk/go/gcp/diagflow/pulumiTypes.go index 82652d179a..3329ba3c9f 100644 --- a/sdk/go/gcp/diagflow/pulumiTypes.go +++ b/sdk/go/gcp/diagflow/pulumiTypes.go @@ -2685,7 +2685,7 @@ type CxFlowAdvancedSettingsSpeechSettings struct { // Timeout before detecting no speech. // A duration in seconds with up to nine fractional digits, ending with 's'. Example: "3.5s". NoSpeechTimeout *string `pulumi:"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. UseTimeoutBasedEndpointing *bool `pulumi:"useTimeoutBasedEndpointing"` } @@ -2709,7 +2709,7 @@ type CxFlowAdvancedSettingsSpeechSettingsArgs struct { // Timeout before detecting no speech. // A duration in seconds with up to nine fractional digits, ending with 's'. Example: "3.5s". NoSpeechTimeout pulumi.StringPtrInput `pulumi:"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. UseTimeoutBasedEndpointing pulumi.BoolPtrInput `pulumi:"useTimeoutBasedEndpointing"` } @@ -2807,7 +2807,7 @@ func (o CxFlowAdvancedSettingsSpeechSettingsOutput) NoSpeechTimeout() pulumi.Str return o.ApplyT(func(v CxFlowAdvancedSettingsSpeechSettings) *string { return v.NoSpeechTimeout }).(pulumi.StringPtrOutput) } -// Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. +// Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. func (o CxFlowAdvancedSettingsSpeechSettingsOutput) UseTimeoutBasedEndpointing() pulumi.BoolPtrOutput { return o.ApplyT(func(v CxFlowAdvancedSettingsSpeechSettings) *bool { return v.UseTimeoutBasedEndpointing }).(pulumi.BoolPtrOutput) } @@ -2868,7 +2868,7 @@ func (o CxFlowAdvancedSettingsSpeechSettingsPtrOutput) NoSpeechTimeout() pulumi. }).(pulumi.StringPtrOutput) } -// Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. +// Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. func (o CxFlowAdvancedSettingsSpeechSettingsPtrOutput) UseTimeoutBasedEndpointing() pulumi.BoolPtrOutput { return o.ApplyT(func(v *CxFlowAdvancedSettingsSpeechSettings) *bool { if v == nil { diff --git a/sdk/go/gcp/discoveryengine/searchEngine.go b/sdk/go/gcp/discoveryengine/searchEngine.go index 4de41a8d41..437cafb312 100644 --- a/sdk/go/gcp/discoveryengine/searchEngine.go +++ b/sdk/go/gcp/discoveryengine/searchEngine.go @@ -109,7 +109,7 @@ type SearchEngine struct { EngineId pulumi.StringOutput `pulumi:"engineId"` // 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"] IndustryVertical pulumi.StringPtrOutput `pulumi:"industryVertical"` // Location. Location pulumi.StringOutput `pulumi:"location"` @@ -188,7 +188,7 @@ type searchEngineState struct { EngineId *string `pulumi:"engineId"` // 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"] IndustryVertical *string `pulumi:"industryVertical"` // Location. Location *string `pulumi:"location"` @@ -220,7 +220,7 @@ type SearchEngineState struct { EngineId pulumi.StringPtrInput // 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"] IndustryVertical pulumi.StringPtrInput // Location. Location pulumi.StringPtrInput @@ -254,7 +254,7 @@ type searchEngineArgs struct { EngineId string `pulumi:"engineId"` // 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"] IndustryVertical *string `pulumi:"industryVertical"` // Location. Location string `pulumi:"location"` @@ -278,7 +278,7 @@ type SearchEngineArgs struct { EngineId pulumi.StringInput // 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"] IndustryVertical pulumi.StringPtrInput // Location. Location pulumi.StringInput @@ -407,7 +407,7 @@ func (o SearchEngineOutput) EngineId() pulumi.StringOutput { // 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"] func (o SearchEngineOutput) IndustryVertical() pulumi.StringPtrOutput { return o.ApplyT(func(v *SearchEngine) pulumi.StringPtrOutput { return v.IndustryVertical }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/firebaserules/release.go b/sdk/go/gcp/firebaserules/release.go index 37988f8565..5032cb3e90 100644 --- a/sdk/go/gcp/firebaserules/release.go +++ b/sdk/go/gcp/firebaserules/release.go @@ -16,6 +16,96 @@ import ( // * [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 +// ```go +// package main +// +// import ( +// +// "fmt" +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebaserules" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// firestore, err := firebaserules.NewRuleset(ctx, "firestore", &firebaserules.RulesetArgs{ +// Project: pulumi.String("my-project-name"), +// Source: &firebaserules.RulesetSourceArgs{ +// Files: firebaserules.RulesetSourceFileArray{ +// &firebaserules.RulesetSourceFileArgs{ +// Content: pulumi.String("service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }"), +// Name: pulumi.String("firestore.rules"), +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// _, err = firebaserules.NewRelease(ctx, "primary", &firebaserules.ReleaseArgs{ +// Name: pulumi.String("cloud.firestore"), +// Project: pulumi.String("my-project-name"), +// RulesetName: firestore.Name.ApplyT(func(name string) (string, error) { +// return fmt.Sprintf("projects/my-project-name/rulesets/%v", name), nil +// }).(pulumi.StringOutput), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Firestore_release_additional +// Creates a Firebase Rules Release to an additional Cloud Firestore instance +// ```go +// package main +// +// import ( +// +// "fmt" +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebaserules" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// firestore, err := firebaserules.NewRuleset(ctx, "firestore", &firebaserules.RulesetArgs{ +// Project: pulumi.String("my-project-name"), +// Source: &firebaserules.RulesetSourceArgs{ +// Files: firebaserules.RulesetSourceFileArray{ +// &firebaserules.RulesetSourceFileArgs{ +// Content: pulumi.String("service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }"), +// Name: pulumi.String("firestore.rules"), +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// _, err = firebaserules.NewRelease(ctx, "primary", &firebaserules.ReleaseArgs{ +// Name: pulumi.String("cloud.firestore/database"), +// Project: pulumi.String("my-project-name"), +// RulesetName: firestore.Name.ApplyT(func(name string) (string, error) { +// return fmt.Sprintf("projects/my-project-name/rulesets/%v", name), nil +// }).(pulumi.StringOutput), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // ## Import // // Release can be imported using any of these accepted formats: diff --git a/sdk/go/gcp/firestore/field.go b/sdk/go/gcp/firestore/field.go index 219243eec1..8e0f3b2c17 100644 --- a/sdk/go/gcp/firestore/field.go +++ b/sdk/go/gcp/firestore/field.go @@ -59,7 +59,7 @@ import ( // _, err = firestore.NewField(ctx, "basic", &firestore.FieldArgs{ // Project: pulumi.String("my-project-name"), // Database: database.Name, -// Collection: pulumi.String("chatrooms__16511"), +// Collection: pulumi.String("chatrooms__8493"), // Field: pulumi.String("basic"), // IndexConfig: &firestore.FieldIndexConfigArgs{ // Indexes: firestore.FieldIndexConfigIndexArray{ @@ -150,7 +150,7 @@ import ( // _, err = firestore.NewField(ctx, "match_override", &firestore.FieldArgs{ // Project: pulumi.String("my-project-name"), // Database: database.Name, -// Collection: pulumi.String("chatrooms__8493"), +// Collection: pulumi.String("chatrooms__9106"), // Field: pulumi.String("field_with_same_configuration_as_ancestor"), // IndexConfig: &firestore.FieldIndexConfigArgs{ // Indexes: firestore.FieldIndexConfigIndexArray{ diff --git a/sdk/go/gcp/gemini/codeRepositoryIndex.go b/sdk/go/gcp/gemini/codeRepositoryIndex.go new file mode 100644 index 0000000000..da2b16830f --- /dev/null +++ b/sdk/go/gcp/gemini/codeRepositoryIndex.go @@ -0,0 +1,469 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package gemini + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Gemini Code Repository Index Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/gemini" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := gemini.NewCodeRepositoryIndex(ctx, "example", &gemini.CodeRepositoryIndexArgs{ +// Location: pulumi.String("us-central1"), +// CodeRepositoryIndexId: pulumi.String(""), +// KmsKey: pulumi.String("projects/projectExample/locations/locationExample/keyRings/keyRingExample/cryptoKeys/cryptoKeyExample"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## 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}} +// ``` +type CodeRepositoryIndex struct { + pulumi.CustomResourceState + + // Required. Id of the Code Repository Index. + // + // *** + CodeRepositoryIndexId pulumi.StringOutput `pulumi:"codeRepositoryIndexId"` + // Output only. Create time stamp. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // Optional. Immutable. Customer-managed encryption key name, in the format + // projects/*/locations/*/keyRings/*/cryptoKeys/*. + KmsKey pulumi.StringPtrOutput `pulumi:"kmsKey"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // The location of the Code Repository Index, for example `us-central1`. + Location pulumi.StringOutput `pulumi:"location"` + // Immutable. Identifier. Name of Code Repository Index. + Name pulumi.StringOutput `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // Output only. Code Repository Index instance State. + // Possible values: + // STATE_UNSPECIFIED + // CREATING + // ACTIVE + // DELETING + // SUSPENDED + State pulumi.StringOutput `pulumi:"state"` + // Output only. Update time stamp. + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewCodeRepositoryIndex registers a new resource with the given unique name, arguments, and options. +func NewCodeRepositoryIndex(ctx *pulumi.Context, + name string, args *CodeRepositoryIndexArgs, opts ...pulumi.ResourceOption) (*CodeRepositoryIndex, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.CodeRepositoryIndexId == nil { + return nil, errors.New("invalid value for required argument 'CodeRepositoryIndexId'") + } + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource CodeRepositoryIndex + err := ctx.RegisterResource("gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetCodeRepositoryIndex gets an existing CodeRepositoryIndex resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetCodeRepositoryIndex(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *CodeRepositoryIndexState, opts ...pulumi.ResourceOption) (*CodeRepositoryIndex, error) { + var resource CodeRepositoryIndex + err := ctx.ReadResource("gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering CodeRepositoryIndex resources. +type codeRepositoryIndexState struct { + // Required. Id of the Code Repository Index. + // + // *** + CodeRepositoryIndexId *string `pulumi:"codeRepositoryIndexId"` + // Output only. Create time stamp. + CreateTime *string `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // Optional. Immutable. Customer-managed encryption key name, in the format + // projects/*/locations/*/keyRings/*/cryptoKeys/*. + KmsKey *string `pulumi:"kmsKey"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The location of the Code Repository Index, for example `us-central1`. + Location *string `pulumi:"location"` + // Immutable. Identifier. Name of Code Repository Index. + Name *string `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // Output only. Code Repository Index instance State. + // Possible values: + // STATE_UNSPECIFIED + // CREATING + // ACTIVE + // DELETING + // SUSPENDED + State *string `pulumi:"state"` + // Output only. Update time stamp. + UpdateTime *string `pulumi:"updateTime"` +} + +type CodeRepositoryIndexState struct { + // Required. Id of the Code Repository Index. + // + // *** + CodeRepositoryIndexId pulumi.StringPtrInput + // Output only. Create time stamp. + CreateTime pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // Optional. Immutable. Customer-managed encryption key name, in the format + // projects/*/locations/*/keyRings/*/cryptoKeys/*. + KmsKey pulumi.StringPtrInput + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The location of the Code Repository Index, for example `us-central1`. + Location pulumi.StringPtrInput + // Immutable. Identifier. Name of Code Repository Index. + Name pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // Output only. Code Repository Index instance State. + // Possible values: + // STATE_UNSPECIFIED + // CREATING + // ACTIVE + // DELETING + // SUSPENDED + State pulumi.StringPtrInput + // Output only. Update time stamp. + UpdateTime pulumi.StringPtrInput +} + +func (CodeRepositoryIndexState) ElementType() reflect.Type { + return reflect.TypeOf((*codeRepositoryIndexState)(nil)).Elem() +} + +type codeRepositoryIndexArgs struct { + // Required. Id of the Code Repository Index. + // + // *** + CodeRepositoryIndexId string `pulumi:"codeRepositoryIndexId"` + // Optional. Immutable. Customer-managed encryption key name, in the format + // projects/*/locations/*/keyRings/*/cryptoKeys/*. + KmsKey *string `pulumi:"kmsKey"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // The location of the Code Repository Index, for example `us-central1`. + Location string `pulumi:"location"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a CodeRepositoryIndex resource. +type CodeRepositoryIndexArgs struct { + // Required. Id of the Code Repository Index. + // + // *** + CodeRepositoryIndexId pulumi.StringInput + // Optional. Immutable. Customer-managed encryption key name, in the format + // projects/*/locations/*/keyRings/*/cryptoKeys/*. + KmsKey pulumi.StringPtrInput + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // The location of the Code Repository Index, for example `us-central1`. + Location pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput +} + +func (CodeRepositoryIndexArgs) ElementType() reflect.Type { + return reflect.TypeOf((*codeRepositoryIndexArgs)(nil)).Elem() +} + +type CodeRepositoryIndexInput interface { + pulumi.Input + + ToCodeRepositoryIndexOutput() CodeRepositoryIndexOutput + ToCodeRepositoryIndexOutputWithContext(ctx context.Context) CodeRepositoryIndexOutput +} + +func (*CodeRepositoryIndex) ElementType() reflect.Type { + return reflect.TypeOf((**CodeRepositoryIndex)(nil)).Elem() +} + +func (i *CodeRepositoryIndex) ToCodeRepositoryIndexOutput() CodeRepositoryIndexOutput { + return i.ToCodeRepositoryIndexOutputWithContext(context.Background()) +} + +func (i *CodeRepositoryIndex) ToCodeRepositoryIndexOutputWithContext(ctx context.Context) CodeRepositoryIndexOutput { + return pulumi.ToOutputWithContext(ctx, i).(CodeRepositoryIndexOutput) +} + +// CodeRepositoryIndexArrayInput is an input type that accepts CodeRepositoryIndexArray and CodeRepositoryIndexArrayOutput values. +// You can construct a concrete instance of `CodeRepositoryIndexArrayInput` via: +// +// CodeRepositoryIndexArray{ CodeRepositoryIndexArgs{...} } +type CodeRepositoryIndexArrayInput interface { + pulumi.Input + + ToCodeRepositoryIndexArrayOutput() CodeRepositoryIndexArrayOutput + ToCodeRepositoryIndexArrayOutputWithContext(context.Context) CodeRepositoryIndexArrayOutput +} + +type CodeRepositoryIndexArray []CodeRepositoryIndexInput + +func (CodeRepositoryIndexArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*CodeRepositoryIndex)(nil)).Elem() +} + +func (i CodeRepositoryIndexArray) ToCodeRepositoryIndexArrayOutput() CodeRepositoryIndexArrayOutput { + return i.ToCodeRepositoryIndexArrayOutputWithContext(context.Background()) +} + +func (i CodeRepositoryIndexArray) ToCodeRepositoryIndexArrayOutputWithContext(ctx context.Context) CodeRepositoryIndexArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(CodeRepositoryIndexArrayOutput) +} + +// CodeRepositoryIndexMapInput is an input type that accepts CodeRepositoryIndexMap and CodeRepositoryIndexMapOutput values. +// You can construct a concrete instance of `CodeRepositoryIndexMapInput` via: +// +// CodeRepositoryIndexMap{ "key": CodeRepositoryIndexArgs{...} } +type CodeRepositoryIndexMapInput interface { + pulumi.Input + + ToCodeRepositoryIndexMapOutput() CodeRepositoryIndexMapOutput + ToCodeRepositoryIndexMapOutputWithContext(context.Context) CodeRepositoryIndexMapOutput +} + +type CodeRepositoryIndexMap map[string]CodeRepositoryIndexInput + +func (CodeRepositoryIndexMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*CodeRepositoryIndex)(nil)).Elem() +} + +func (i CodeRepositoryIndexMap) ToCodeRepositoryIndexMapOutput() CodeRepositoryIndexMapOutput { + return i.ToCodeRepositoryIndexMapOutputWithContext(context.Background()) +} + +func (i CodeRepositoryIndexMap) ToCodeRepositoryIndexMapOutputWithContext(ctx context.Context) CodeRepositoryIndexMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(CodeRepositoryIndexMapOutput) +} + +type CodeRepositoryIndexOutput struct{ *pulumi.OutputState } + +func (CodeRepositoryIndexOutput) ElementType() reflect.Type { + return reflect.TypeOf((**CodeRepositoryIndex)(nil)).Elem() +} + +func (o CodeRepositoryIndexOutput) ToCodeRepositoryIndexOutput() CodeRepositoryIndexOutput { + return o +} + +func (o CodeRepositoryIndexOutput) ToCodeRepositoryIndexOutputWithContext(ctx context.Context) CodeRepositoryIndexOutput { + return o +} + +// Required. Id of the Code Repository Index. +// +// *** +func (o CodeRepositoryIndexOutput) CodeRepositoryIndexId() pulumi.StringOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringOutput { return v.CodeRepositoryIndexId }).(pulumi.StringOutput) +} + +// Output only. Create time stamp. +func (o CodeRepositoryIndexOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o CodeRepositoryIndexOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// Optional. Immutable. Customer-managed encryption key name, in the format +// projects/*/locations/*/keyRings/*/cryptoKeys/*. +func (o CodeRepositoryIndexOutput) KmsKey() pulumi.StringPtrOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringPtrOutput { return v.KmsKey }).(pulumi.StringPtrOutput) +} + +// 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 `effectiveLabels` for all of the labels present on the resource. +func (o CodeRepositoryIndexOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// The location of the Code Repository Index, for example `us-central1`. +func (o CodeRepositoryIndexOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Immutable. Identifier. Name of Code Repository Index. +func (o CodeRepositoryIndexOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o CodeRepositoryIndexOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o CodeRepositoryIndexOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// Output only. Code Repository Index instance State. +// Possible values: +// STATE_UNSPECIFIED +// CREATING +// ACTIVE +// DELETING +// SUSPENDED +func (o CodeRepositoryIndexOutput) State() pulumi.StringOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringOutput { return v.State }).(pulumi.StringOutput) +} + +// Output only. Update time stamp. +func (o CodeRepositoryIndexOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *CodeRepositoryIndex) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type CodeRepositoryIndexArrayOutput struct{ *pulumi.OutputState } + +func (CodeRepositoryIndexArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*CodeRepositoryIndex)(nil)).Elem() +} + +func (o CodeRepositoryIndexArrayOutput) ToCodeRepositoryIndexArrayOutput() CodeRepositoryIndexArrayOutput { + return o +} + +func (o CodeRepositoryIndexArrayOutput) ToCodeRepositoryIndexArrayOutputWithContext(ctx context.Context) CodeRepositoryIndexArrayOutput { + return o +} + +func (o CodeRepositoryIndexArrayOutput) Index(i pulumi.IntInput) CodeRepositoryIndexOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *CodeRepositoryIndex { + return vs[0].([]*CodeRepositoryIndex)[vs[1].(int)] + }).(CodeRepositoryIndexOutput) +} + +type CodeRepositoryIndexMapOutput struct{ *pulumi.OutputState } + +func (CodeRepositoryIndexMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*CodeRepositoryIndex)(nil)).Elem() +} + +func (o CodeRepositoryIndexMapOutput) ToCodeRepositoryIndexMapOutput() CodeRepositoryIndexMapOutput { + return o +} + +func (o CodeRepositoryIndexMapOutput) ToCodeRepositoryIndexMapOutputWithContext(ctx context.Context) CodeRepositoryIndexMapOutput { + return o +} + +func (o CodeRepositoryIndexMapOutput) MapIndex(k pulumi.StringInput) CodeRepositoryIndexOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *CodeRepositoryIndex { + return vs[0].(map[string]*CodeRepositoryIndex)[vs[1].(string)] + }).(CodeRepositoryIndexOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*CodeRepositoryIndexInput)(nil)).Elem(), &CodeRepositoryIndex{}) + pulumi.RegisterInputType(reflect.TypeOf((*CodeRepositoryIndexArrayInput)(nil)).Elem(), CodeRepositoryIndexArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*CodeRepositoryIndexMapInput)(nil)).Elem(), CodeRepositoryIndexMap{}) + pulumi.RegisterOutputType(CodeRepositoryIndexOutput{}) + pulumi.RegisterOutputType(CodeRepositoryIndexArrayOutput{}) + pulumi.RegisterOutputType(CodeRepositoryIndexMapOutput{}) +} diff --git a/sdk/go/gcp/gemini/getRepositoryGroupIamPolicy.go b/sdk/go/gcp/gemini/getRepositoryGroupIamPolicy.go new file mode 100644 index 0000000000..581b04b6a9 --- /dev/null +++ b/sdk/go/gcp/gemini/getRepositoryGroupIamPolicy.go @@ -0,0 +1,137 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package gemini + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +func LookupRepositoryGroupIamPolicy(ctx *pulumi.Context, args *LookupRepositoryGroupIamPolicyArgs, opts ...pulumi.InvokeOption) (*LookupRepositoryGroupIamPolicyResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupRepositoryGroupIamPolicyResult + err := ctx.Invoke("gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getRepositoryGroupIamPolicy. +type LookupRepositoryGroupIamPolicyArgs struct { + CodeRepositoryIndex string `pulumi:"codeRepositoryIndex"` + // 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. + Location *string `pulumi:"location"` + // 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. + Project *string `pulumi:"project"` + RepositoryGroupId string `pulumi:"repositoryGroupId"` +} + +// A collection of values returned by getRepositoryGroupIamPolicy. +type LookupRepositoryGroupIamPolicyResult struct { + CodeRepositoryIndex string `pulumi:"codeRepositoryIndex"` + // (Computed) The etag of the IAM policy. + Etag string `pulumi:"etag"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + Location string `pulumi:"location"` + // (Required only by `gemini.RepositoryGroupIamPolicy`) The policy data generated by + // a `organizations.getIAMPolicy` data source. + PolicyData string `pulumi:"policyData"` + Project string `pulumi:"project"` + RepositoryGroupId string `pulumi:"repositoryGroupId"` +} + +func LookupRepositoryGroupIamPolicyOutput(ctx *pulumi.Context, args LookupRepositoryGroupIamPolicyOutputArgs, opts ...pulumi.InvokeOption) LookupRepositoryGroupIamPolicyResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (LookupRepositoryGroupIamPolicyResultOutput, error) { + args := v.(LookupRepositoryGroupIamPolicyArgs) + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupRepositoryGroupIamPolicyResult + secret, err := ctx.InvokePackageRaw("gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy", args, &rv, "", opts...) + if err != nil { + return LookupRepositoryGroupIamPolicyResultOutput{}, err + } + + output := pulumi.ToOutput(rv).(LookupRepositoryGroupIamPolicyResultOutput) + if secret { + return pulumi.ToSecret(output).(LookupRepositoryGroupIamPolicyResultOutput), nil + } + return output, nil + }).(LookupRepositoryGroupIamPolicyResultOutput) +} + +// A collection of arguments for invoking getRepositoryGroupIamPolicy. +type LookupRepositoryGroupIamPolicyOutputArgs struct { + CodeRepositoryIndex pulumi.StringInput `pulumi:"codeRepositoryIndex"` + // 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. + Location pulumi.StringPtrInput `pulumi:"location"` + // 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. + Project pulumi.StringPtrInput `pulumi:"project"` + RepositoryGroupId pulumi.StringInput `pulumi:"repositoryGroupId"` +} + +func (LookupRepositoryGroupIamPolicyOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupRepositoryGroupIamPolicyArgs)(nil)).Elem() +} + +// A collection of values returned by getRepositoryGroupIamPolicy. +type LookupRepositoryGroupIamPolicyResultOutput struct{ *pulumi.OutputState } + +func (LookupRepositoryGroupIamPolicyResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupRepositoryGroupIamPolicyResult)(nil)).Elem() +} + +func (o LookupRepositoryGroupIamPolicyResultOutput) ToLookupRepositoryGroupIamPolicyResultOutput() LookupRepositoryGroupIamPolicyResultOutput { + return o +} + +func (o LookupRepositoryGroupIamPolicyResultOutput) ToLookupRepositoryGroupIamPolicyResultOutputWithContext(ctx context.Context) LookupRepositoryGroupIamPolicyResultOutput { + return o +} + +func (o LookupRepositoryGroupIamPolicyResultOutput) CodeRepositoryIndex() pulumi.StringOutput { + return o.ApplyT(func(v LookupRepositoryGroupIamPolicyResult) string { return v.CodeRepositoryIndex }).(pulumi.StringOutput) +} + +// (Computed) The etag of the IAM policy. +func (o LookupRepositoryGroupIamPolicyResultOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v LookupRepositoryGroupIamPolicyResult) string { return v.Etag }).(pulumi.StringOutput) +} + +// The provider-assigned unique ID for this managed resource. +func (o LookupRepositoryGroupIamPolicyResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupRepositoryGroupIamPolicyResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o LookupRepositoryGroupIamPolicyResultOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v LookupRepositoryGroupIamPolicyResult) string { return v.Location }).(pulumi.StringOutput) +} + +// (Required only by `gemini.RepositoryGroupIamPolicy`) The policy data generated by +// a `organizations.getIAMPolicy` data source. +func (o LookupRepositoryGroupIamPolicyResultOutput) PolicyData() pulumi.StringOutput { + return o.ApplyT(func(v LookupRepositoryGroupIamPolicyResult) string { return v.PolicyData }).(pulumi.StringOutput) +} + +func (o LookupRepositoryGroupIamPolicyResultOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v LookupRepositoryGroupIamPolicyResult) string { return v.Project }).(pulumi.StringOutput) +} + +func (o LookupRepositoryGroupIamPolicyResultOutput) RepositoryGroupId() pulumi.StringOutput { + return o.ApplyT(func(v LookupRepositoryGroupIamPolicyResult) string { return v.RepositoryGroupId }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupRepositoryGroupIamPolicyResultOutput{}) +} diff --git a/sdk/go/gcp/gemini/init.go b/sdk/go/gcp/gemini/init.go new file mode 100644 index 0000000000..e35ccef0be --- /dev/null +++ b/sdk/go/gcp/gemini/init.go @@ -0,0 +1,72 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package gemini + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex": + r = &CodeRepositoryIndex{} + case "gcp:gemini/repositoryGroup:RepositoryGroup": + r = &RepositoryGroup{} + case "gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding": + r = &RepositoryGroupIamBinding{} + case "gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember": + r = &RepositoryGroupIamMember{} + case "gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy": + r = &RepositoryGroupIamPolicy{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +func init() { + version, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "gcp", + "gemini/codeRepositoryIndex", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "gemini/repositoryGroup", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "gemini/repositoryGroupIamBinding", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "gemini/repositoryGroupIamMember", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "gemini/repositoryGroupIamPolicy", + &module{version}, + ) +} diff --git a/sdk/go/gcp/gemini/pulumiTypes.go b/sdk/go/gcp/gemini/pulumiTypes.go new file mode 100644 index 0000000000..4e9630d90e --- /dev/null +++ b/sdk/go/gcp/gemini/pulumiTypes.go @@ -0,0 +1,473 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package gemini + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +var _ = internal.GetEnvOrDefault + +type RepositoryGroupIamBindingCondition struct { + Description *string `pulumi:"description"` + Expression string `pulumi:"expression"` + Title string `pulumi:"title"` +} + +// RepositoryGroupIamBindingConditionInput is an input type that accepts RepositoryGroupIamBindingConditionArgs and RepositoryGroupIamBindingConditionOutput values. +// You can construct a concrete instance of `RepositoryGroupIamBindingConditionInput` via: +// +// RepositoryGroupIamBindingConditionArgs{...} +type RepositoryGroupIamBindingConditionInput interface { + pulumi.Input + + ToRepositoryGroupIamBindingConditionOutput() RepositoryGroupIamBindingConditionOutput + ToRepositoryGroupIamBindingConditionOutputWithContext(context.Context) RepositoryGroupIamBindingConditionOutput +} + +type RepositoryGroupIamBindingConditionArgs struct { + Description pulumi.StringPtrInput `pulumi:"description"` + Expression pulumi.StringInput `pulumi:"expression"` + Title pulumi.StringInput `pulumi:"title"` +} + +func (RepositoryGroupIamBindingConditionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RepositoryGroupIamBindingCondition)(nil)).Elem() +} + +func (i RepositoryGroupIamBindingConditionArgs) ToRepositoryGroupIamBindingConditionOutput() RepositoryGroupIamBindingConditionOutput { + return i.ToRepositoryGroupIamBindingConditionOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamBindingConditionArgs) ToRepositoryGroupIamBindingConditionOutputWithContext(ctx context.Context) RepositoryGroupIamBindingConditionOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamBindingConditionOutput) +} + +func (i RepositoryGroupIamBindingConditionArgs) ToRepositoryGroupIamBindingConditionPtrOutput() RepositoryGroupIamBindingConditionPtrOutput { + return i.ToRepositoryGroupIamBindingConditionPtrOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamBindingConditionArgs) ToRepositoryGroupIamBindingConditionPtrOutputWithContext(ctx context.Context) RepositoryGroupIamBindingConditionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamBindingConditionOutput).ToRepositoryGroupIamBindingConditionPtrOutputWithContext(ctx) +} + +// RepositoryGroupIamBindingConditionPtrInput is an input type that accepts RepositoryGroupIamBindingConditionArgs, RepositoryGroupIamBindingConditionPtr and RepositoryGroupIamBindingConditionPtrOutput values. +// You can construct a concrete instance of `RepositoryGroupIamBindingConditionPtrInput` via: +// +// RepositoryGroupIamBindingConditionArgs{...} +// +// or: +// +// nil +type RepositoryGroupIamBindingConditionPtrInput interface { + pulumi.Input + + ToRepositoryGroupIamBindingConditionPtrOutput() RepositoryGroupIamBindingConditionPtrOutput + ToRepositoryGroupIamBindingConditionPtrOutputWithContext(context.Context) RepositoryGroupIamBindingConditionPtrOutput +} + +type repositoryGroupIamBindingConditionPtrType RepositoryGroupIamBindingConditionArgs + +func RepositoryGroupIamBindingConditionPtr(v *RepositoryGroupIamBindingConditionArgs) RepositoryGroupIamBindingConditionPtrInput { + return (*repositoryGroupIamBindingConditionPtrType)(v) +} + +func (*repositoryGroupIamBindingConditionPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamBindingCondition)(nil)).Elem() +} + +func (i *repositoryGroupIamBindingConditionPtrType) ToRepositoryGroupIamBindingConditionPtrOutput() RepositoryGroupIamBindingConditionPtrOutput { + return i.ToRepositoryGroupIamBindingConditionPtrOutputWithContext(context.Background()) +} + +func (i *repositoryGroupIamBindingConditionPtrType) ToRepositoryGroupIamBindingConditionPtrOutputWithContext(ctx context.Context) RepositoryGroupIamBindingConditionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamBindingConditionPtrOutput) +} + +type RepositoryGroupIamBindingConditionOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamBindingConditionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RepositoryGroupIamBindingCondition)(nil)).Elem() +} + +func (o RepositoryGroupIamBindingConditionOutput) ToRepositoryGroupIamBindingConditionOutput() RepositoryGroupIamBindingConditionOutput { + return o +} + +func (o RepositoryGroupIamBindingConditionOutput) ToRepositoryGroupIamBindingConditionOutputWithContext(ctx context.Context) RepositoryGroupIamBindingConditionOutput { + return o +} + +func (o RepositoryGroupIamBindingConditionOutput) ToRepositoryGroupIamBindingConditionPtrOutput() RepositoryGroupIamBindingConditionPtrOutput { + return o.ToRepositoryGroupIamBindingConditionPtrOutputWithContext(context.Background()) +} + +func (o RepositoryGroupIamBindingConditionOutput) ToRepositoryGroupIamBindingConditionPtrOutputWithContext(ctx context.Context) RepositoryGroupIamBindingConditionPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RepositoryGroupIamBindingCondition) *RepositoryGroupIamBindingCondition { + return &v + }).(RepositoryGroupIamBindingConditionPtrOutput) +} + +func (o RepositoryGroupIamBindingConditionOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v RepositoryGroupIamBindingCondition) *string { return v.Description }).(pulumi.StringPtrOutput) +} + +func (o RepositoryGroupIamBindingConditionOutput) Expression() pulumi.StringOutput { + return o.ApplyT(func(v RepositoryGroupIamBindingCondition) string { return v.Expression }).(pulumi.StringOutput) +} + +func (o RepositoryGroupIamBindingConditionOutput) Title() pulumi.StringOutput { + return o.ApplyT(func(v RepositoryGroupIamBindingCondition) string { return v.Title }).(pulumi.StringOutput) +} + +type RepositoryGroupIamBindingConditionPtrOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamBindingConditionPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamBindingCondition)(nil)).Elem() +} + +func (o RepositoryGroupIamBindingConditionPtrOutput) ToRepositoryGroupIamBindingConditionPtrOutput() RepositoryGroupIamBindingConditionPtrOutput { + return o +} + +func (o RepositoryGroupIamBindingConditionPtrOutput) ToRepositoryGroupIamBindingConditionPtrOutputWithContext(ctx context.Context) RepositoryGroupIamBindingConditionPtrOutput { + return o +} + +func (o RepositoryGroupIamBindingConditionPtrOutput) Elem() RepositoryGroupIamBindingConditionOutput { + return o.ApplyT(func(v *RepositoryGroupIamBindingCondition) RepositoryGroupIamBindingCondition { + if v != nil { + return *v + } + var ret RepositoryGroupIamBindingCondition + return ret + }).(RepositoryGroupIamBindingConditionOutput) +} + +func (o RepositoryGroupIamBindingConditionPtrOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RepositoryGroupIamBindingCondition) *string { + if v == nil { + return nil + } + return v.Description + }).(pulumi.StringPtrOutput) +} + +func (o RepositoryGroupIamBindingConditionPtrOutput) Expression() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RepositoryGroupIamBindingCondition) *string { + if v == nil { + return nil + } + return &v.Expression + }).(pulumi.StringPtrOutput) +} + +func (o RepositoryGroupIamBindingConditionPtrOutput) Title() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RepositoryGroupIamBindingCondition) *string { + if v == nil { + return nil + } + return &v.Title + }).(pulumi.StringPtrOutput) +} + +type RepositoryGroupIamMemberCondition struct { + Description *string `pulumi:"description"` + Expression string `pulumi:"expression"` + Title string `pulumi:"title"` +} + +// RepositoryGroupIamMemberConditionInput is an input type that accepts RepositoryGroupIamMemberConditionArgs and RepositoryGroupIamMemberConditionOutput values. +// You can construct a concrete instance of `RepositoryGroupIamMemberConditionInput` via: +// +// RepositoryGroupIamMemberConditionArgs{...} +type RepositoryGroupIamMemberConditionInput interface { + pulumi.Input + + ToRepositoryGroupIamMemberConditionOutput() RepositoryGroupIamMemberConditionOutput + ToRepositoryGroupIamMemberConditionOutputWithContext(context.Context) RepositoryGroupIamMemberConditionOutput +} + +type RepositoryGroupIamMemberConditionArgs struct { + Description pulumi.StringPtrInput `pulumi:"description"` + Expression pulumi.StringInput `pulumi:"expression"` + Title pulumi.StringInput `pulumi:"title"` +} + +func (RepositoryGroupIamMemberConditionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RepositoryGroupIamMemberCondition)(nil)).Elem() +} + +func (i RepositoryGroupIamMemberConditionArgs) ToRepositoryGroupIamMemberConditionOutput() RepositoryGroupIamMemberConditionOutput { + return i.ToRepositoryGroupIamMemberConditionOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamMemberConditionArgs) ToRepositoryGroupIamMemberConditionOutputWithContext(ctx context.Context) RepositoryGroupIamMemberConditionOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamMemberConditionOutput) +} + +func (i RepositoryGroupIamMemberConditionArgs) ToRepositoryGroupIamMemberConditionPtrOutput() RepositoryGroupIamMemberConditionPtrOutput { + return i.ToRepositoryGroupIamMemberConditionPtrOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamMemberConditionArgs) ToRepositoryGroupIamMemberConditionPtrOutputWithContext(ctx context.Context) RepositoryGroupIamMemberConditionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamMemberConditionOutput).ToRepositoryGroupIamMemberConditionPtrOutputWithContext(ctx) +} + +// RepositoryGroupIamMemberConditionPtrInput is an input type that accepts RepositoryGroupIamMemberConditionArgs, RepositoryGroupIamMemberConditionPtr and RepositoryGroupIamMemberConditionPtrOutput values. +// You can construct a concrete instance of `RepositoryGroupIamMemberConditionPtrInput` via: +// +// RepositoryGroupIamMemberConditionArgs{...} +// +// or: +// +// nil +type RepositoryGroupIamMemberConditionPtrInput interface { + pulumi.Input + + ToRepositoryGroupIamMemberConditionPtrOutput() RepositoryGroupIamMemberConditionPtrOutput + ToRepositoryGroupIamMemberConditionPtrOutputWithContext(context.Context) RepositoryGroupIamMemberConditionPtrOutput +} + +type repositoryGroupIamMemberConditionPtrType RepositoryGroupIamMemberConditionArgs + +func RepositoryGroupIamMemberConditionPtr(v *RepositoryGroupIamMemberConditionArgs) RepositoryGroupIamMemberConditionPtrInput { + return (*repositoryGroupIamMemberConditionPtrType)(v) +} + +func (*repositoryGroupIamMemberConditionPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamMemberCondition)(nil)).Elem() +} + +func (i *repositoryGroupIamMemberConditionPtrType) ToRepositoryGroupIamMemberConditionPtrOutput() RepositoryGroupIamMemberConditionPtrOutput { + return i.ToRepositoryGroupIamMemberConditionPtrOutputWithContext(context.Background()) +} + +func (i *repositoryGroupIamMemberConditionPtrType) ToRepositoryGroupIamMemberConditionPtrOutputWithContext(ctx context.Context) RepositoryGroupIamMemberConditionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamMemberConditionPtrOutput) +} + +type RepositoryGroupIamMemberConditionOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamMemberConditionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RepositoryGroupIamMemberCondition)(nil)).Elem() +} + +func (o RepositoryGroupIamMemberConditionOutput) ToRepositoryGroupIamMemberConditionOutput() RepositoryGroupIamMemberConditionOutput { + return o +} + +func (o RepositoryGroupIamMemberConditionOutput) ToRepositoryGroupIamMemberConditionOutputWithContext(ctx context.Context) RepositoryGroupIamMemberConditionOutput { + return o +} + +func (o RepositoryGroupIamMemberConditionOutput) ToRepositoryGroupIamMemberConditionPtrOutput() RepositoryGroupIamMemberConditionPtrOutput { + return o.ToRepositoryGroupIamMemberConditionPtrOutputWithContext(context.Background()) +} + +func (o RepositoryGroupIamMemberConditionOutput) ToRepositoryGroupIamMemberConditionPtrOutputWithContext(ctx context.Context) RepositoryGroupIamMemberConditionPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v RepositoryGroupIamMemberCondition) *RepositoryGroupIamMemberCondition { + return &v + }).(RepositoryGroupIamMemberConditionPtrOutput) +} + +func (o RepositoryGroupIamMemberConditionOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v RepositoryGroupIamMemberCondition) *string { return v.Description }).(pulumi.StringPtrOutput) +} + +func (o RepositoryGroupIamMemberConditionOutput) Expression() pulumi.StringOutput { + return o.ApplyT(func(v RepositoryGroupIamMemberCondition) string { return v.Expression }).(pulumi.StringOutput) +} + +func (o RepositoryGroupIamMemberConditionOutput) Title() pulumi.StringOutput { + return o.ApplyT(func(v RepositoryGroupIamMemberCondition) string { return v.Title }).(pulumi.StringOutput) +} + +type RepositoryGroupIamMemberConditionPtrOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamMemberConditionPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamMemberCondition)(nil)).Elem() +} + +func (o RepositoryGroupIamMemberConditionPtrOutput) ToRepositoryGroupIamMemberConditionPtrOutput() RepositoryGroupIamMemberConditionPtrOutput { + return o +} + +func (o RepositoryGroupIamMemberConditionPtrOutput) ToRepositoryGroupIamMemberConditionPtrOutputWithContext(ctx context.Context) RepositoryGroupIamMemberConditionPtrOutput { + return o +} + +func (o RepositoryGroupIamMemberConditionPtrOutput) Elem() RepositoryGroupIamMemberConditionOutput { + return o.ApplyT(func(v *RepositoryGroupIamMemberCondition) RepositoryGroupIamMemberCondition { + if v != nil { + return *v + } + var ret RepositoryGroupIamMemberCondition + return ret + }).(RepositoryGroupIamMemberConditionOutput) +} + +func (o RepositoryGroupIamMemberConditionPtrOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RepositoryGroupIamMemberCondition) *string { + if v == nil { + return nil + } + return v.Description + }).(pulumi.StringPtrOutput) +} + +func (o RepositoryGroupIamMemberConditionPtrOutput) Expression() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RepositoryGroupIamMemberCondition) *string { + if v == nil { + return nil + } + return &v.Expression + }).(pulumi.StringPtrOutput) +} + +func (o RepositoryGroupIamMemberConditionPtrOutput) Title() pulumi.StringPtrOutput { + return o.ApplyT(func(v *RepositoryGroupIamMemberCondition) *string { + if v == nil { + return nil + } + return &v.Title + }).(pulumi.StringPtrOutput) +} + +type RepositoryGroupRepository struct { + // Required. The Git branch pattern used for indexing in RE2 syntax. + // See https://github.com/google/re2/wiki/syntax for syntax. + // + // *** + BranchPattern string `pulumi:"branchPattern"` + // Required. The DeveloperConnect repository full resource name, relative resource name + // or resource URL to be indexed. + Resource string `pulumi:"resource"` +} + +// RepositoryGroupRepositoryInput is an input type that accepts RepositoryGroupRepositoryArgs and RepositoryGroupRepositoryOutput values. +// You can construct a concrete instance of `RepositoryGroupRepositoryInput` via: +// +// RepositoryGroupRepositoryArgs{...} +type RepositoryGroupRepositoryInput interface { + pulumi.Input + + ToRepositoryGroupRepositoryOutput() RepositoryGroupRepositoryOutput + ToRepositoryGroupRepositoryOutputWithContext(context.Context) RepositoryGroupRepositoryOutput +} + +type RepositoryGroupRepositoryArgs struct { + // Required. The Git branch pattern used for indexing in RE2 syntax. + // See https://github.com/google/re2/wiki/syntax for syntax. + // + // *** + BranchPattern pulumi.StringInput `pulumi:"branchPattern"` + // Required. The DeveloperConnect repository full resource name, relative resource name + // or resource URL to be indexed. + Resource pulumi.StringInput `pulumi:"resource"` +} + +func (RepositoryGroupRepositoryArgs) ElementType() reflect.Type { + return reflect.TypeOf((*RepositoryGroupRepository)(nil)).Elem() +} + +func (i RepositoryGroupRepositoryArgs) ToRepositoryGroupRepositoryOutput() RepositoryGroupRepositoryOutput { + return i.ToRepositoryGroupRepositoryOutputWithContext(context.Background()) +} + +func (i RepositoryGroupRepositoryArgs) ToRepositoryGroupRepositoryOutputWithContext(ctx context.Context) RepositoryGroupRepositoryOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupRepositoryOutput) +} + +// RepositoryGroupRepositoryArrayInput is an input type that accepts RepositoryGroupRepositoryArray and RepositoryGroupRepositoryArrayOutput values. +// You can construct a concrete instance of `RepositoryGroupRepositoryArrayInput` via: +// +// RepositoryGroupRepositoryArray{ RepositoryGroupRepositoryArgs{...} } +type RepositoryGroupRepositoryArrayInput interface { + pulumi.Input + + ToRepositoryGroupRepositoryArrayOutput() RepositoryGroupRepositoryArrayOutput + ToRepositoryGroupRepositoryArrayOutputWithContext(context.Context) RepositoryGroupRepositoryArrayOutput +} + +type RepositoryGroupRepositoryArray []RepositoryGroupRepositoryInput + +func (RepositoryGroupRepositoryArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]RepositoryGroupRepository)(nil)).Elem() +} + +func (i RepositoryGroupRepositoryArray) ToRepositoryGroupRepositoryArrayOutput() RepositoryGroupRepositoryArrayOutput { + return i.ToRepositoryGroupRepositoryArrayOutputWithContext(context.Background()) +} + +func (i RepositoryGroupRepositoryArray) ToRepositoryGroupRepositoryArrayOutputWithContext(ctx context.Context) RepositoryGroupRepositoryArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupRepositoryArrayOutput) +} + +type RepositoryGroupRepositoryOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupRepositoryOutput) ElementType() reflect.Type { + return reflect.TypeOf((*RepositoryGroupRepository)(nil)).Elem() +} + +func (o RepositoryGroupRepositoryOutput) ToRepositoryGroupRepositoryOutput() RepositoryGroupRepositoryOutput { + return o +} + +func (o RepositoryGroupRepositoryOutput) ToRepositoryGroupRepositoryOutputWithContext(ctx context.Context) RepositoryGroupRepositoryOutput { + return o +} + +// Required. The Git branch pattern used for indexing in RE2 syntax. +// See https://github.com/google/re2/wiki/syntax for syntax. +// +// *** +func (o RepositoryGroupRepositoryOutput) BranchPattern() pulumi.StringOutput { + return o.ApplyT(func(v RepositoryGroupRepository) string { return v.BranchPattern }).(pulumi.StringOutput) +} + +// Required. The DeveloperConnect repository full resource name, relative resource name +// or resource URL to be indexed. +func (o RepositoryGroupRepositoryOutput) Resource() pulumi.StringOutput { + return o.ApplyT(func(v RepositoryGroupRepository) string { return v.Resource }).(pulumi.StringOutput) +} + +type RepositoryGroupRepositoryArrayOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupRepositoryArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]RepositoryGroupRepository)(nil)).Elem() +} + +func (o RepositoryGroupRepositoryArrayOutput) ToRepositoryGroupRepositoryArrayOutput() RepositoryGroupRepositoryArrayOutput { + return o +} + +func (o RepositoryGroupRepositoryArrayOutput) ToRepositoryGroupRepositoryArrayOutputWithContext(ctx context.Context) RepositoryGroupRepositoryArrayOutput { + return o +} + +func (o RepositoryGroupRepositoryArrayOutput) Index(i pulumi.IntInput) RepositoryGroupRepositoryOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) RepositoryGroupRepository { + return vs[0].([]RepositoryGroupRepository)[vs[1].(int)] + }).(RepositoryGroupRepositoryOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamBindingConditionInput)(nil)).Elem(), RepositoryGroupIamBindingConditionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamBindingConditionPtrInput)(nil)).Elem(), RepositoryGroupIamBindingConditionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamMemberConditionInput)(nil)).Elem(), RepositoryGroupIamMemberConditionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamMemberConditionPtrInput)(nil)).Elem(), RepositoryGroupIamMemberConditionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupRepositoryInput)(nil)).Elem(), RepositoryGroupRepositoryArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupRepositoryArrayInput)(nil)).Elem(), RepositoryGroupRepositoryArray{}) + pulumi.RegisterOutputType(RepositoryGroupIamBindingConditionOutput{}) + pulumi.RegisterOutputType(RepositoryGroupIamBindingConditionPtrOutput{}) + pulumi.RegisterOutputType(RepositoryGroupIamMemberConditionOutput{}) + pulumi.RegisterOutputType(RepositoryGroupIamMemberConditionPtrOutput{}) + pulumi.RegisterOutputType(RepositoryGroupRepositoryOutput{}) + pulumi.RegisterOutputType(RepositoryGroupRepositoryArrayOutput{}) +} diff --git a/sdk/go/gcp/gemini/repositoryGroup.go b/sdk/go/gcp/gemini/repositoryGroup.go new file mode 100644 index 0000000000..63cfe10cbf --- /dev/null +++ b/sdk/go/gcp/gemini/repositoryGroup.go @@ -0,0 +1,397 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package gemini + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## 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}} +// ``` +type RepositoryGroup struct { + pulumi.CustomResourceState + + // Required. Id of the Code Repository Index. + CodeRepositoryIndex pulumi.StringOutput `pulumi:"codeRepositoryIndex"` + // Output only. Create time stamp + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // 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. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // The location of the Code Repository Index, for example `us-central1`. + Location pulumi.StringOutput `pulumi:"location"` + // Immutable. Identifier. name of resource + Name pulumi.StringOutput `pulumi:"name"` + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // Required. List of repositories to group + // Structure is documented below. + Repositories RepositoryGroupRepositoryArrayOutput `pulumi:"repositories"` + // Required. Id of the Repository Group. + RepositoryGroupId pulumi.StringOutput `pulumi:"repositoryGroupId"` + // Output only. Update time stamp + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewRepositoryGroup registers a new resource with the given unique name, arguments, and options. +func NewRepositoryGroup(ctx *pulumi.Context, + name string, args *RepositoryGroupArgs, opts ...pulumi.ResourceOption) (*RepositoryGroup, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.CodeRepositoryIndex == nil { + return nil, errors.New("invalid value for required argument 'CodeRepositoryIndex'") + } + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.Repositories == nil { + return nil, errors.New("invalid value for required argument 'Repositories'") + } + if args.RepositoryGroupId == nil { + return nil, errors.New("invalid value for required argument 'RepositoryGroupId'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource RepositoryGroup + err := ctx.RegisterResource("gcp:gemini/repositoryGroup:RepositoryGroup", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRepositoryGroup gets an existing RepositoryGroup resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRepositoryGroup(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RepositoryGroupState, opts ...pulumi.ResourceOption) (*RepositoryGroup, error) { + var resource RepositoryGroup + err := ctx.ReadResource("gcp:gemini/repositoryGroup:RepositoryGroup", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering RepositoryGroup resources. +type repositoryGroupState struct { + // Required. Id of the Code Repository Index. + CodeRepositoryIndex *string `pulumi:"codeRepositoryIndex"` + // Output only. Create time stamp + CreateTime *string `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // 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. + Labels map[string]string `pulumi:"labels"` + // The location of the Code Repository Index, for example `us-central1`. + Location *string `pulumi:"location"` + // Immutable. Identifier. name of resource + Name *string `pulumi:"name"` + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // Required. List of repositories to group + // Structure is documented below. + Repositories []RepositoryGroupRepository `pulumi:"repositories"` + // Required. Id of the Repository Group. + RepositoryGroupId *string `pulumi:"repositoryGroupId"` + // Output only. Update time stamp + UpdateTime *string `pulumi:"updateTime"` +} + +type RepositoryGroupState struct { + // Required. Id of the Code Repository Index. + CodeRepositoryIndex pulumi.StringPtrInput + // Output only. Create time stamp + CreateTime pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // 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. + Labels pulumi.StringMapInput + // The location of the Code Repository Index, for example `us-central1`. + Location pulumi.StringPtrInput + // Immutable. Identifier. name of resource + Name pulumi.StringPtrInput + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // Required. List of repositories to group + // Structure is documented below. + Repositories RepositoryGroupRepositoryArrayInput + // Required. Id of the Repository Group. + RepositoryGroupId pulumi.StringPtrInput + // Output only. Update time stamp + UpdateTime pulumi.StringPtrInput +} + +func (RepositoryGroupState) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryGroupState)(nil)).Elem() +} + +type repositoryGroupArgs struct { + // Required. Id of the Code Repository Index. + CodeRepositoryIndex string `pulumi:"codeRepositoryIndex"` + // 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. + Labels map[string]string `pulumi:"labels"` + // The location of the Code Repository Index, for example `us-central1`. + Location string `pulumi:"location"` + Project *string `pulumi:"project"` + // Required. List of repositories to group + // Structure is documented below. + Repositories []RepositoryGroupRepository `pulumi:"repositories"` + // Required. Id of the Repository Group. + RepositoryGroupId string `pulumi:"repositoryGroupId"` +} + +// The set of arguments for constructing a RepositoryGroup resource. +type RepositoryGroupArgs struct { + // Required. Id of the Code Repository Index. + CodeRepositoryIndex pulumi.StringInput + // 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. + Labels pulumi.StringMapInput + // The location of the Code Repository Index, for example `us-central1`. + Location pulumi.StringInput + Project pulumi.StringPtrInput + // Required. List of repositories to group + // Structure is documented below. + Repositories RepositoryGroupRepositoryArrayInput + // Required. Id of the Repository Group. + RepositoryGroupId pulumi.StringInput +} + +func (RepositoryGroupArgs) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryGroupArgs)(nil)).Elem() +} + +type RepositoryGroupInput interface { + pulumi.Input + + ToRepositoryGroupOutput() RepositoryGroupOutput + ToRepositoryGroupOutputWithContext(ctx context.Context) RepositoryGroupOutput +} + +func (*RepositoryGroup) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroup)(nil)).Elem() +} + +func (i *RepositoryGroup) ToRepositoryGroupOutput() RepositoryGroupOutput { + return i.ToRepositoryGroupOutputWithContext(context.Background()) +} + +func (i *RepositoryGroup) ToRepositoryGroupOutputWithContext(ctx context.Context) RepositoryGroupOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupOutput) +} + +// RepositoryGroupArrayInput is an input type that accepts RepositoryGroupArray and RepositoryGroupArrayOutput values. +// You can construct a concrete instance of `RepositoryGroupArrayInput` via: +// +// RepositoryGroupArray{ RepositoryGroupArgs{...} } +type RepositoryGroupArrayInput interface { + pulumi.Input + + ToRepositoryGroupArrayOutput() RepositoryGroupArrayOutput + ToRepositoryGroupArrayOutputWithContext(context.Context) RepositoryGroupArrayOutput +} + +type RepositoryGroupArray []RepositoryGroupInput + +func (RepositoryGroupArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RepositoryGroup)(nil)).Elem() +} + +func (i RepositoryGroupArray) ToRepositoryGroupArrayOutput() RepositoryGroupArrayOutput { + return i.ToRepositoryGroupArrayOutputWithContext(context.Background()) +} + +func (i RepositoryGroupArray) ToRepositoryGroupArrayOutputWithContext(ctx context.Context) RepositoryGroupArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupArrayOutput) +} + +// RepositoryGroupMapInput is an input type that accepts RepositoryGroupMap and RepositoryGroupMapOutput values. +// You can construct a concrete instance of `RepositoryGroupMapInput` via: +// +// RepositoryGroupMap{ "key": RepositoryGroupArgs{...} } +type RepositoryGroupMapInput interface { + pulumi.Input + + ToRepositoryGroupMapOutput() RepositoryGroupMapOutput + ToRepositoryGroupMapOutputWithContext(context.Context) RepositoryGroupMapOutput +} + +type RepositoryGroupMap map[string]RepositoryGroupInput + +func (RepositoryGroupMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RepositoryGroup)(nil)).Elem() +} + +func (i RepositoryGroupMap) ToRepositoryGroupMapOutput() RepositoryGroupMapOutput { + return i.ToRepositoryGroupMapOutputWithContext(context.Background()) +} + +func (i RepositoryGroupMap) ToRepositoryGroupMapOutputWithContext(ctx context.Context) RepositoryGroupMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupMapOutput) +} + +type RepositoryGroupOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroup)(nil)).Elem() +} + +func (o RepositoryGroupOutput) ToRepositoryGroupOutput() RepositoryGroupOutput { + return o +} + +func (o RepositoryGroupOutput) ToRepositoryGroupOutputWithContext(ctx context.Context) RepositoryGroupOutput { + return o +} + +// Required. Id of the Code Repository Index. +func (o RepositoryGroupOutput) CodeRepositoryIndex() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringOutput { return v.CodeRepositoryIndex }).(pulumi.StringOutput) +} + +// Output only. Create time stamp +func (o RepositoryGroupOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o RepositoryGroupOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// 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. +func (o RepositoryGroupOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// The location of the Code Repository Index, for example `us-central1`. +func (o RepositoryGroupOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Immutable. Identifier. name of resource +func (o RepositoryGroupOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +func (o RepositoryGroupOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o RepositoryGroupOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// Required. List of repositories to group +// Structure is documented below. +func (o RepositoryGroupOutput) Repositories() RepositoryGroupRepositoryArrayOutput { + return o.ApplyT(func(v *RepositoryGroup) RepositoryGroupRepositoryArrayOutput { return v.Repositories }).(RepositoryGroupRepositoryArrayOutput) +} + +// Required. Id of the Repository Group. +func (o RepositoryGroupOutput) RepositoryGroupId() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringOutput { return v.RepositoryGroupId }).(pulumi.StringOutput) +} + +// Output only. Update time stamp +func (o RepositoryGroupOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroup) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type RepositoryGroupArrayOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RepositoryGroup)(nil)).Elem() +} + +func (o RepositoryGroupArrayOutput) ToRepositoryGroupArrayOutput() RepositoryGroupArrayOutput { + return o +} + +func (o RepositoryGroupArrayOutput) ToRepositoryGroupArrayOutputWithContext(ctx context.Context) RepositoryGroupArrayOutput { + return o +} + +func (o RepositoryGroupArrayOutput) Index(i pulumi.IntInput) RepositoryGroupOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *RepositoryGroup { + return vs[0].([]*RepositoryGroup)[vs[1].(int)] + }).(RepositoryGroupOutput) +} + +type RepositoryGroupMapOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RepositoryGroup)(nil)).Elem() +} + +func (o RepositoryGroupMapOutput) ToRepositoryGroupMapOutput() RepositoryGroupMapOutput { + return o +} + +func (o RepositoryGroupMapOutput) ToRepositoryGroupMapOutputWithContext(ctx context.Context) RepositoryGroupMapOutput { + return o +} + +func (o RepositoryGroupMapOutput) MapIndex(k pulumi.StringInput) RepositoryGroupOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *RepositoryGroup { + return vs[0].(map[string]*RepositoryGroup)[vs[1].(string)] + }).(RepositoryGroupOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupInput)(nil)).Elem(), &RepositoryGroup{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupArrayInput)(nil)).Elem(), RepositoryGroupArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupMapInput)(nil)).Elem(), RepositoryGroupMap{}) + pulumi.RegisterOutputType(RepositoryGroupOutput{}) + pulumi.RegisterOutputType(RepositoryGroupArrayOutput{}) + pulumi.RegisterOutputType(RepositoryGroupMapOutput{}) +} diff --git a/sdk/go/gcp/gemini/repositoryGroupIamBinding.go b/sdk/go/gcp/gemini/repositoryGroupIamBinding.go new file mode 100644 index 0000000000..ae3040cbdc --- /dev/null +++ b/sdk/go/gcp/gemini/repositoryGroupIamBinding.go @@ -0,0 +1,437 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package gemini + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## 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`. +type RepositoryGroupIamBinding struct { + pulumi.CustomResourceState + + CodeRepositoryIndex pulumi.StringOutput `pulumi:"codeRepositoryIndex"` + Condition RepositoryGroupIamBindingConditionPtrOutput `pulumi:"condition"` + // (Computed) The etag of the IAM policy. + Etag pulumi.StringOutput `pulumi:"etag"` + // 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. + Location pulumi.StringOutput `pulumi:"location"` + // 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" + Members pulumi.StringArrayOutput `pulumi:"members"` + // 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. + Project pulumi.StringOutput `pulumi:"project"` + RepositoryGroupId pulumi.StringOutput `pulumi:"repositoryGroupId"` + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role pulumi.StringOutput `pulumi:"role"` +} + +// NewRepositoryGroupIamBinding registers a new resource with the given unique name, arguments, and options. +func NewRepositoryGroupIamBinding(ctx *pulumi.Context, + name string, args *RepositoryGroupIamBindingArgs, opts ...pulumi.ResourceOption) (*RepositoryGroupIamBinding, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.CodeRepositoryIndex == nil { + return nil, errors.New("invalid value for required argument 'CodeRepositoryIndex'") + } + if args.Members == nil { + return nil, errors.New("invalid value for required argument 'Members'") + } + if args.RepositoryGroupId == nil { + return nil, errors.New("invalid value for required argument 'RepositoryGroupId'") + } + if args.Role == nil { + return nil, errors.New("invalid value for required argument 'Role'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource RepositoryGroupIamBinding + err := ctx.RegisterResource("gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRepositoryGroupIamBinding gets an existing RepositoryGroupIamBinding resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRepositoryGroupIamBinding(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RepositoryGroupIamBindingState, opts ...pulumi.ResourceOption) (*RepositoryGroupIamBinding, error) { + var resource RepositoryGroupIamBinding + err := ctx.ReadResource("gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering RepositoryGroupIamBinding resources. +type repositoryGroupIamBindingState struct { + CodeRepositoryIndex *string `pulumi:"codeRepositoryIndex"` + Condition *RepositoryGroupIamBindingCondition `pulumi:"condition"` + // (Computed) The etag of the IAM policy. + Etag *string `pulumi:"etag"` + // 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. + Location *string `pulumi:"location"` + // 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" + Members []string `pulumi:"members"` + // 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. + Project *string `pulumi:"project"` + RepositoryGroupId *string `pulumi:"repositoryGroupId"` + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role *string `pulumi:"role"` +} + +type RepositoryGroupIamBindingState struct { + CodeRepositoryIndex pulumi.StringPtrInput + Condition RepositoryGroupIamBindingConditionPtrInput + // (Computed) The etag of the IAM policy. + Etag pulumi.StringPtrInput + // 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. + Location pulumi.StringPtrInput + // 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" + Members pulumi.StringArrayInput + // 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. + Project pulumi.StringPtrInput + RepositoryGroupId pulumi.StringPtrInput + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role pulumi.StringPtrInput +} + +func (RepositoryGroupIamBindingState) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryGroupIamBindingState)(nil)).Elem() +} + +type repositoryGroupIamBindingArgs struct { + CodeRepositoryIndex string `pulumi:"codeRepositoryIndex"` + Condition *RepositoryGroupIamBindingCondition `pulumi:"condition"` + // 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. + Location *string `pulumi:"location"` + // 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" + Members []string `pulumi:"members"` + // 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. + Project *string `pulumi:"project"` + RepositoryGroupId string `pulumi:"repositoryGroupId"` + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role string `pulumi:"role"` +} + +// The set of arguments for constructing a RepositoryGroupIamBinding resource. +type RepositoryGroupIamBindingArgs struct { + CodeRepositoryIndex pulumi.StringInput + Condition RepositoryGroupIamBindingConditionPtrInput + // 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. + Location pulumi.StringPtrInput + // 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" + Members pulumi.StringArrayInput + // 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. + Project pulumi.StringPtrInput + RepositoryGroupId pulumi.StringInput + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role pulumi.StringInput +} + +func (RepositoryGroupIamBindingArgs) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryGroupIamBindingArgs)(nil)).Elem() +} + +type RepositoryGroupIamBindingInput interface { + pulumi.Input + + ToRepositoryGroupIamBindingOutput() RepositoryGroupIamBindingOutput + ToRepositoryGroupIamBindingOutputWithContext(ctx context.Context) RepositoryGroupIamBindingOutput +} + +func (*RepositoryGroupIamBinding) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamBinding)(nil)).Elem() +} + +func (i *RepositoryGroupIamBinding) ToRepositoryGroupIamBindingOutput() RepositoryGroupIamBindingOutput { + return i.ToRepositoryGroupIamBindingOutputWithContext(context.Background()) +} + +func (i *RepositoryGroupIamBinding) ToRepositoryGroupIamBindingOutputWithContext(ctx context.Context) RepositoryGroupIamBindingOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamBindingOutput) +} + +// RepositoryGroupIamBindingArrayInput is an input type that accepts RepositoryGroupIamBindingArray and RepositoryGroupIamBindingArrayOutput values. +// You can construct a concrete instance of `RepositoryGroupIamBindingArrayInput` via: +// +// RepositoryGroupIamBindingArray{ RepositoryGroupIamBindingArgs{...} } +type RepositoryGroupIamBindingArrayInput interface { + pulumi.Input + + ToRepositoryGroupIamBindingArrayOutput() RepositoryGroupIamBindingArrayOutput + ToRepositoryGroupIamBindingArrayOutputWithContext(context.Context) RepositoryGroupIamBindingArrayOutput +} + +type RepositoryGroupIamBindingArray []RepositoryGroupIamBindingInput + +func (RepositoryGroupIamBindingArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RepositoryGroupIamBinding)(nil)).Elem() +} + +func (i RepositoryGroupIamBindingArray) ToRepositoryGroupIamBindingArrayOutput() RepositoryGroupIamBindingArrayOutput { + return i.ToRepositoryGroupIamBindingArrayOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamBindingArray) ToRepositoryGroupIamBindingArrayOutputWithContext(ctx context.Context) RepositoryGroupIamBindingArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamBindingArrayOutput) +} + +// RepositoryGroupIamBindingMapInput is an input type that accepts RepositoryGroupIamBindingMap and RepositoryGroupIamBindingMapOutput values. +// You can construct a concrete instance of `RepositoryGroupIamBindingMapInput` via: +// +// RepositoryGroupIamBindingMap{ "key": RepositoryGroupIamBindingArgs{...} } +type RepositoryGroupIamBindingMapInput interface { + pulumi.Input + + ToRepositoryGroupIamBindingMapOutput() RepositoryGroupIamBindingMapOutput + ToRepositoryGroupIamBindingMapOutputWithContext(context.Context) RepositoryGroupIamBindingMapOutput +} + +type RepositoryGroupIamBindingMap map[string]RepositoryGroupIamBindingInput + +func (RepositoryGroupIamBindingMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RepositoryGroupIamBinding)(nil)).Elem() +} + +func (i RepositoryGroupIamBindingMap) ToRepositoryGroupIamBindingMapOutput() RepositoryGroupIamBindingMapOutput { + return i.ToRepositoryGroupIamBindingMapOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamBindingMap) ToRepositoryGroupIamBindingMapOutputWithContext(ctx context.Context) RepositoryGroupIamBindingMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamBindingMapOutput) +} + +type RepositoryGroupIamBindingOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamBindingOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamBinding)(nil)).Elem() +} + +func (o RepositoryGroupIamBindingOutput) ToRepositoryGroupIamBindingOutput() RepositoryGroupIamBindingOutput { + return o +} + +func (o RepositoryGroupIamBindingOutput) ToRepositoryGroupIamBindingOutputWithContext(ctx context.Context) RepositoryGroupIamBindingOutput { + return o +} + +func (o RepositoryGroupIamBindingOutput) CodeRepositoryIndex() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamBinding) pulumi.StringOutput { return v.CodeRepositoryIndex }).(pulumi.StringOutput) +} + +func (o RepositoryGroupIamBindingOutput) Condition() RepositoryGroupIamBindingConditionPtrOutput { + return o.ApplyT(func(v *RepositoryGroupIamBinding) RepositoryGroupIamBindingConditionPtrOutput { return v.Condition }).(RepositoryGroupIamBindingConditionPtrOutput) +} + +// (Computed) The etag of the IAM policy. +func (o RepositoryGroupIamBindingOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamBinding) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// 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. +func (o RepositoryGroupIamBindingOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamBinding) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// 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" +func (o RepositoryGroupIamBindingOutput) Members() pulumi.StringArrayOutput { + return o.ApplyT(func(v *RepositoryGroupIamBinding) pulumi.StringArrayOutput { return v.Members }).(pulumi.StringArrayOutput) +} + +// 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. +func (o RepositoryGroupIamBindingOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamBinding) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +func (o RepositoryGroupIamBindingOutput) RepositoryGroupId() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamBinding) pulumi.StringOutput { return v.RepositoryGroupId }).(pulumi.StringOutput) +} + +// The role that should be applied. Only one +// `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format +// `[projects|organizations]/{parent-name}/roles/{role-name}`. +func (o RepositoryGroupIamBindingOutput) Role() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamBinding) pulumi.StringOutput { return v.Role }).(pulumi.StringOutput) +} + +type RepositoryGroupIamBindingArrayOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamBindingArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RepositoryGroupIamBinding)(nil)).Elem() +} + +func (o RepositoryGroupIamBindingArrayOutput) ToRepositoryGroupIamBindingArrayOutput() RepositoryGroupIamBindingArrayOutput { + return o +} + +func (o RepositoryGroupIamBindingArrayOutput) ToRepositoryGroupIamBindingArrayOutputWithContext(ctx context.Context) RepositoryGroupIamBindingArrayOutput { + return o +} + +func (o RepositoryGroupIamBindingArrayOutput) Index(i pulumi.IntInput) RepositoryGroupIamBindingOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *RepositoryGroupIamBinding { + return vs[0].([]*RepositoryGroupIamBinding)[vs[1].(int)] + }).(RepositoryGroupIamBindingOutput) +} + +type RepositoryGroupIamBindingMapOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamBindingMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RepositoryGroupIamBinding)(nil)).Elem() +} + +func (o RepositoryGroupIamBindingMapOutput) ToRepositoryGroupIamBindingMapOutput() RepositoryGroupIamBindingMapOutput { + return o +} + +func (o RepositoryGroupIamBindingMapOutput) ToRepositoryGroupIamBindingMapOutputWithContext(ctx context.Context) RepositoryGroupIamBindingMapOutput { + return o +} + +func (o RepositoryGroupIamBindingMapOutput) MapIndex(k pulumi.StringInput) RepositoryGroupIamBindingOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *RepositoryGroupIamBinding { + return vs[0].(map[string]*RepositoryGroupIamBinding)[vs[1].(string)] + }).(RepositoryGroupIamBindingOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamBindingInput)(nil)).Elem(), &RepositoryGroupIamBinding{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamBindingArrayInput)(nil)).Elem(), RepositoryGroupIamBindingArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamBindingMapInput)(nil)).Elem(), RepositoryGroupIamBindingMap{}) + pulumi.RegisterOutputType(RepositoryGroupIamBindingOutput{}) + pulumi.RegisterOutputType(RepositoryGroupIamBindingArrayOutput{}) + pulumi.RegisterOutputType(RepositoryGroupIamBindingMapOutput{}) +} diff --git a/sdk/go/gcp/gemini/repositoryGroupIamMember.go b/sdk/go/gcp/gemini/repositoryGroupIamMember.go new file mode 100644 index 0000000000..f4f1291aab --- /dev/null +++ b/sdk/go/gcp/gemini/repositoryGroupIamMember.go @@ -0,0 +1,437 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package gemini + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## 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`. +type RepositoryGroupIamMember struct { + pulumi.CustomResourceState + + CodeRepositoryIndex pulumi.StringOutput `pulumi:"codeRepositoryIndex"` + Condition RepositoryGroupIamMemberConditionPtrOutput `pulumi:"condition"` + // (Computed) The etag of the IAM policy. + Etag pulumi.StringOutput `pulumi:"etag"` + // 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. + Location pulumi.StringOutput `pulumi:"location"` + // 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" + Member pulumi.StringOutput `pulumi:"member"` + // 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. + Project pulumi.StringOutput `pulumi:"project"` + RepositoryGroupId pulumi.StringOutput `pulumi:"repositoryGroupId"` + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role pulumi.StringOutput `pulumi:"role"` +} + +// NewRepositoryGroupIamMember registers a new resource with the given unique name, arguments, and options. +func NewRepositoryGroupIamMember(ctx *pulumi.Context, + name string, args *RepositoryGroupIamMemberArgs, opts ...pulumi.ResourceOption) (*RepositoryGroupIamMember, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.CodeRepositoryIndex == nil { + return nil, errors.New("invalid value for required argument 'CodeRepositoryIndex'") + } + if args.Member == nil { + return nil, errors.New("invalid value for required argument 'Member'") + } + if args.RepositoryGroupId == nil { + return nil, errors.New("invalid value for required argument 'RepositoryGroupId'") + } + if args.Role == nil { + return nil, errors.New("invalid value for required argument 'Role'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource RepositoryGroupIamMember + err := ctx.RegisterResource("gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRepositoryGroupIamMember gets an existing RepositoryGroupIamMember resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRepositoryGroupIamMember(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RepositoryGroupIamMemberState, opts ...pulumi.ResourceOption) (*RepositoryGroupIamMember, error) { + var resource RepositoryGroupIamMember + err := ctx.ReadResource("gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering RepositoryGroupIamMember resources. +type repositoryGroupIamMemberState struct { + CodeRepositoryIndex *string `pulumi:"codeRepositoryIndex"` + Condition *RepositoryGroupIamMemberCondition `pulumi:"condition"` + // (Computed) The etag of the IAM policy. + Etag *string `pulumi:"etag"` + // 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. + Location *string `pulumi:"location"` + // 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" + Member *string `pulumi:"member"` + // 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. + Project *string `pulumi:"project"` + RepositoryGroupId *string `pulumi:"repositoryGroupId"` + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role *string `pulumi:"role"` +} + +type RepositoryGroupIamMemberState struct { + CodeRepositoryIndex pulumi.StringPtrInput + Condition RepositoryGroupIamMemberConditionPtrInput + // (Computed) The etag of the IAM policy. + Etag pulumi.StringPtrInput + // 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. + Location pulumi.StringPtrInput + // 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" + Member pulumi.StringPtrInput + // 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. + Project pulumi.StringPtrInput + RepositoryGroupId pulumi.StringPtrInput + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role pulumi.StringPtrInput +} + +func (RepositoryGroupIamMemberState) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryGroupIamMemberState)(nil)).Elem() +} + +type repositoryGroupIamMemberArgs struct { + CodeRepositoryIndex string `pulumi:"codeRepositoryIndex"` + Condition *RepositoryGroupIamMemberCondition `pulumi:"condition"` + // 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. + Location *string `pulumi:"location"` + // 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" + Member string `pulumi:"member"` + // 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. + Project *string `pulumi:"project"` + RepositoryGroupId string `pulumi:"repositoryGroupId"` + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role string `pulumi:"role"` +} + +// The set of arguments for constructing a RepositoryGroupIamMember resource. +type RepositoryGroupIamMemberArgs struct { + CodeRepositoryIndex pulumi.StringInput + Condition RepositoryGroupIamMemberConditionPtrInput + // 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. + Location pulumi.StringPtrInput + // 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" + Member pulumi.StringInput + // 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. + Project pulumi.StringPtrInput + RepositoryGroupId pulumi.StringInput + // The role that should be applied. Only one + // `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + // `[projects|organizations]/{parent-name}/roles/{role-name}`. + Role pulumi.StringInput +} + +func (RepositoryGroupIamMemberArgs) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryGroupIamMemberArgs)(nil)).Elem() +} + +type RepositoryGroupIamMemberInput interface { + pulumi.Input + + ToRepositoryGroupIamMemberOutput() RepositoryGroupIamMemberOutput + ToRepositoryGroupIamMemberOutputWithContext(ctx context.Context) RepositoryGroupIamMemberOutput +} + +func (*RepositoryGroupIamMember) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamMember)(nil)).Elem() +} + +func (i *RepositoryGroupIamMember) ToRepositoryGroupIamMemberOutput() RepositoryGroupIamMemberOutput { + return i.ToRepositoryGroupIamMemberOutputWithContext(context.Background()) +} + +func (i *RepositoryGroupIamMember) ToRepositoryGroupIamMemberOutputWithContext(ctx context.Context) RepositoryGroupIamMemberOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamMemberOutput) +} + +// RepositoryGroupIamMemberArrayInput is an input type that accepts RepositoryGroupIamMemberArray and RepositoryGroupIamMemberArrayOutput values. +// You can construct a concrete instance of `RepositoryGroupIamMemberArrayInput` via: +// +// RepositoryGroupIamMemberArray{ RepositoryGroupIamMemberArgs{...} } +type RepositoryGroupIamMemberArrayInput interface { + pulumi.Input + + ToRepositoryGroupIamMemberArrayOutput() RepositoryGroupIamMemberArrayOutput + ToRepositoryGroupIamMemberArrayOutputWithContext(context.Context) RepositoryGroupIamMemberArrayOutput +} + +type RepositoryGroupIamMemberArray []RepositoryGroupIamMemberInput + +func (RepositoryGroupIamMemberArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RepositoryGroupIamMember)(nil)).Elem() +} + +func (i RepositoryGroupIamMemberArray) ToRepositoryGroupIamMemberArrayOutput() RepositoryGroupIamMemberArrayOutput { + return i.ToRepositoryGroupIamMemberArrayOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamMemberArray) ToRepositoryGroupIamMemberArrayOutputWithContext(ctx context.Context) RepositoryGroupIamMemberArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamMemberArrayOutput) +} + +// RepositoryGroupIamMemberMapInput is an input type that accepts RepositoryGroupIamMemberMap and RepositoryGroupIamMemberMapOutput values. +// You can construct a concrete instance of `RepositoryGroupIamMemberMapInput` via: +// +// RepositoryGroupIamMemberMap{ "key": RepositoryGroupIamMemberArgs{...} } +type RepositoryGroupIamMemberMapInput interface { + pulumi.Input + + ToRepositoryGroupIamMemberMapOutput() RepositoryGroupIamMemberMapOutput + ToRepositoryGroupIamMemberMapOutputWithContext(context.Context) RepositoryGroupIamMemberMapOutput +} + +type RepositoryGroupIamMemberMap map[string]RepositoryGroupIamMemberInput + +func (RepositoryGroupIamMemberMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RepositoryGroupIamMember)(nil)).Elem() +} + +func (i RepositoryGroupIamMemberMap) ToRepositoryGroupIamMemberMapOutput() RepositoryGroupIamMemberMapOutput { + return i.ToRepositoryGroupIamMemberMapOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamMemberMap) ToRepositoryGroupIamMemberMapOutputWithContext(ctx context.Context) RepositoryGroupIamMemberMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamMemberMapOutput) +} + +type RepositoryGroupIamMemberOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamMemberOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamMember)(nil)).Elem() +} + +func (o RepositoryGroupIamMemberOutput) ToRepositoryGroupIamMemberOutput() RepositoryGroupIamMemberOutput { + return o +} + +func (o RepositoryGroupIamMemberOutput) ToRepositoryGroupIamMemberOutputWithContext(ctx context.Context) RepositoryGroupIamMemberOutput { + return o +} + +func (o RepositoryGroupIamMemberOutput) CodeRepositoryIndex() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamMember) pulumi.StringOutput { return v.CodeRepositoryIndex }).(pulumi.StringOutput) +} + +func (o RepositoryGroupIamMemberOutput) Condition() RepositoryGroupIamMemberConditionPtrOutput { + return o.ApplyT(func(v *RepositoryGroupIamMember) RepositoryGroupIamMemberConditionPtrOutput { return v.Condition }).(RepositoryGroupIamMemberConditionPtrOutput) +} + +// (Computed) The etag of the IAM policy. +func (o RepositoryGroupIamMemberOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamMember) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// 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. +func (o RepositoryGroupIamMemberOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamMember) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// 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" +func (o RepositoryGroupIamMemberOutput) Member() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamMember) pulumi.StringOutput { return v.Member }).(pulumi.StringOutput) +} + +// 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. +func (o RepositoryGroupIamMemberOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamMember) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +func (o RepositoryGroupIamMemberOutput) RepositoryGroupId() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamMember) pulumi.StringOutput { return v.RepositoryGroupId }).(pulumi.StringOutput) +} + +// The role that should be applied. Only one +// `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format +// `[projects|organizations]/{parent-name}/roles/{role-name}`. +func (o RepositoryGroupIamMemberOutput) Role() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamMember) pulumi.StringOutput { return v.Role }).(pulumi.StringOutput) +} + +type RepositoryGroupIamMemberArrayOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamMemberArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RepositoryGroupIamMember)(nil)).Elem() +} + +func (o RepositoryGroupIamMemberArrayOutput) ToRepositoryGroupIamMemberArrayOutput() RepositoryGroupIamMemberArrayOutput { + return o +} + +func (o RepositoryGroupIamMemberArrayOutput) ToRepositoryGroupIamMemberArrayOutputWithContext(ctx context.Context) RepositoryGroupIamMemberArrayOutput { + return o +} + +func (o RepositoryGroupIamMemberArrayOutput) Index(i pulumi.IntInput) RepositoryGroupIamMemberOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *RepositoryGroupIamMember { + return vs[0].([]*RepositoryGroupIamMember)[vs[1].(int)] + }).(RepositoryGroupIamMemberOutput) +} + +type RepositoryGroupIamMemberMapOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamMemberMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RepositoryGroupIamMember)(nil)).Elem() +} + +func (o RepositoryGroupIamMemberMapOutput) ToRepositoryGroupIamMemberMapOutput() RepositoryGroupIamMemberMapOutput { + return o +} + +func (o RepositoryGroupIamMemberMapOutput) ToRepositoryGroupIamMemberMapOutputWithContext(ctx context.Context) RepositoryGroupIamMemberMapOutput { + return o +} + +func (o RepositoryGroupIamMemberMapOutput) MapIndex(k pulumi.StringInput) RepositoryGroupIamMemberOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *RepositoryGroupIamMember { + return vs[0].(map[string]*RepositoryGroupIamMember)[vs[1].(string)] + }).(RepositoryGroupIamMemberOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamMemberInput)(nil)).Elem(), &RepositoryGroupIamMember{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamMemberArrayInput)(nil)).Elem(), RepositoryGroupIamMemberArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamMemberMapInput)(nil)).Elem(), RepositoryGroupIamMemberMap{}) + pulumi.RegisterOutputType(RepositoryGroupIamMemberOutput{}) + pulumi.RegisterOutputType(RepositoryGroupIamMemberArrayOutput{}) + pulumi.RegisterOutputType(RepositoryGroupIamMemberMapOutput{}) +} diff --git a/sdk/go/gcp/gemini/repositoryGroupIamPolicy.go b/sdk/go/gcp/gemini/repositoryGroupIamPolicy.go new file mode 100644 index 0000000000..34252f2e51 --- /dev/null +++ b/sdk/go/gcp/gemini/repositoryGroupIamPolicy.go @@ -0,0 +1,344 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package gemini + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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`. +type RepositoryGroupIamPolicy struct { + pulumi.CustomResourceState + + CodeRepositoryIndex pulumi.StringOutput `pulumi:"codeRepositoryIndex"` + // (Computed) The etag of the IAM policy. + Etag pulumi.StringOutput `pulumi:"etag"` + // 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. + Location pulumi.StringOutput `pulumi:"location"` + // The policy data generated by + // a `organizations.getIAMPolicy` data source. + PolicyData pulumi.StringOutput `pulumi:"policyData"` + // 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. + Project pulumi.StringOutput `pulumi:"project"` + RepositoryGroupId pulumi.StringOutput `pulumi:"repositoryGroupId"` +} + +// NewRepositoryGroupIamPolicy registers a new resource with the given unique name, arguments, and options. +func NewRepositoryGroupIamPolicy(ctx *pulumi.Context, + name string, args *RepositoryGroupIamPolicyArgs, opts ...pulumi.ResourceOption) (*RepositoryGroupIamPolicy, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.CodeRepositoryIndex == nil { + return nil, errors.New("invalid value for required argument 'CodeRepositoryIndex'") + } + if args.PolicyData == nil { + return nil, errors.New("invalid value for required argument 'PolicyData'") + } + if args.RepositoryGroupId == nil { + return nil, errors.New("invalid value for required argument 'RepositoryGroupId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource RepositoryGroupIamPolicy + err := ctx.RegisterResource("gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRepositoryGroupIamPolicy gets an existing RepositoryGroupIamPolicy resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetRepositoryGroupIamPolicy(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RepositoryGroupIamPolicyState, opts ...pulumi.ResourceOption) (*RepositoryGroupIamPolicy, error) { + var resource RepositoryGroupIamPolicy + err := ctx.ReadResource("gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering RepositoryGroupIamPolicy resources. +type repositoryGroupIamPolicyState struct { + CodeRepositoryIndex *string `pulumi:"codeRepositoryIndex"` + // (Computed) The etag of the IAM policy. + Etag *string `pulumi:"etag"` + // 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. + Location *string `pulumi:"location"` + // The policy data generated by + // a `organizations.getIAMPolicy` data source. + PolicyData *string `pulumi:"policyData"` + // 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. + Project *string `pulumi:"project"` + RepositoryGroupId *string `pulumi:"repositoryGroupId"` +} + +type RepositoryGroupIamPolicyState struct { + CodeRepositoryIndex pulumi.StringPtrInput + // (Computed) The etag of the IAM policy. + Etag pulumi.StringPtrInput + // 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. + Location pulumi.StringPtrInput + // The policy data generated by + // a `organizations.getIAMPolicy` data source. + PolicyData pulumi.StringPtrInput + // 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. + Project pulumi.StringPtrInput + RepositoryGroupId pulumi.StringPtrInput +} + +func (RepositoryGroupIamPolicyState) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryGroupIamPolicyState)(nil)).Elem() +} + +type repositoryGroupIamPolicyArgs struct { + CodeRepositoryIndex string `pulumi:"codeRepositoryIndex"` + // 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. + Location *string `pulumi:"location"` + // The policy data generated by + // a `organizations.getIAMPolicy` data source. + PolicyData string `pulumi:"policyData"` + // 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. + Project *string `pulumi:"project"` + RepositoryGroupId string `pulumi:"repositoryGroupId"` +} + +// The set of arguments for constructing a RepositoryGroupIamPolicy resource. +type RepositoryGroupIamPolicyArgs struct { + CodeRepositoryIndex pulumi.StringInput + // 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. + Location pulumi.StringPtrInput + // The policy data generated by + // a `organizations.getIAMPolicy` data source. + PolicyData pulumi.StringInput + // 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. + Project pulumi.StringPtrInput + RepositoryGroupId pulumi.StringInput +} + +func (RepositoryGroupIamPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryGroupIamPolicyArgs)(nil)).Elem() +} + +type RepositoryGroupIamPolicyInput interface { + pulumi.Input + + ToRepositoryGroupIamPolicyOutput() RepositoryGroupIamPolicyOutput + ToRepositoryGroupIamPolicyOutputWithContext(ctx context.Context) RepositoryGroupIamPolicyOutput +} + +func (*RepositoryGroupIamPolicy) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamPolicy)(nil)).Elem() +} + +func (i *RepositoryGroupIamPolicy) ToRepositoryGroupIamPolicyOutput() RepositoryGroupIamPolicyOutput { + return i.ToRepositoryGroupIamPolicyOutputWithContext(context.Background()) +} + +func (i *RepositoryGroupIamPolicy) ToRepositoryGroupIamPolicyOutputWithContext(ctx context.Context) RepositoryGroupIamPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamPolicyOutput) +} + +// RepositoryGroupIamPolicyArrayInput is an input type that accepts RepositoryGroupIamPolicyArray and RepositoryGroupIamPolicyArrayOutput values. +// You can construct a concrete instance of `RepositoryGroupIamPolicyArrayInput` via: +// +// RepositoryGroupIamPolicyArray{ RepositoryGroupIamPolicyArgs{...} } +type RepositoryGroupIamPolicyArrayInput interface { + pulumi.Input + + ToRepositoryGroupIamPolicyArrayOutput() RepositoryGroupIamPolicyArrayOutput + ToRepositoryGroupIamPolicyArrayOutputWithContext(context.Context) RepositoryGroupIamPolicyArrayOutput +} + +type RepositoryGroupIamPolicyArray []RepositoryGroupIamPolicyInput + +func (RepositoryGroupIamPolicyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RepositoryGroupIamPolicy)(nil)).Elem() +} + +func (i RepositoryGroupIamPolicyArray) ToRepositoryGroupIamPolicyArrayOutput() RepositoryGroupIamPolicyArrayOutput { + return i.ToRepositoryGroupIamPolicyArrayOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamPolicyArray) ToRepositoryGroupIamPolicyArrayOutputWithContext(ctx context.Context) RepositoryGroupIamPolicyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamPolicyArrayOutput) +} + +// RepositoryGroupIamPolicyMapInput is an input type that accepts RepositoryGroupIamPolicyMap and RepositoryGroupIamPolicyMapOutput values. +// You can construct a concrete instance of `RepositoryGroupIamPolicyMapInput` via: +// +// RepositoryGroupIamPolicyMap{ "key": RepositoryGroupIamPolicyArgs{...} } +type RepositoryGroupIamPolicyMapInput interface { + pulumi.Input + + ToRepositoryGroupIamPolicyMapOutput() RepositoryGroupIamPolicyMapOutput + ToRepositoryGroupIamPolicyMapOutputWithContext(context.Context) RepositoryGroupIamPolicyMapOutput +} + +type RepositoryGroupIamPolicyMap map[string]RepositoryGroupIamPolicyInput + +func (RepositoryGroupIamPolicyMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RepositoryGroupIamPolicy)(nil)).Elem() +} + +func (i RepositoryGroupIamPolicyMap) ToRepositoryGroupIamPolicyMapOutput() RepositoryGroupIamPolicyMapOutput { + return i.ToRepositoryGroupIamPolicyMapOutputWithContext(context.Background()) +} + +func (i RepositoryGroupIamPolicyMap) ToRepositoryGroupIamPolicyMapOutputWithContext(ctx context.Context) RepositoryGroupIamPolicyMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryGroupIamPolicyMapOutput) +} + +type RepositoryGroupIamPolicyOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((**RepositoryGroupIamPolicy)(nil)).Elem() +} + +func (o RepositoryGroupIamPolicyOutput) ToRepositoryGroupIamPolicyOutput() RepositoryGroupIamPolicyOutput { + return o +} + +func (o RepositoryGroupIamPolicyOutput) ToRepositoryGroupIamPolicyOutputWithContext(ctx context.Context) RepositoryGroupIamPolicyOutput { + return o +} + +func (o RepositoryGroupIamPolicyOutput) CodeRepositoryIndex() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamPolicy) pulumi.StringOutput { return v.CodeRepositoryIndex }).(pulumi.StringOutput) +} + +// (Computed) The etag of the IAM policy. +func (o RepositoryGroupIamPolicyOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamPolicy) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// 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. +func (o RepositoryGroupIamPolicyOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamPolicy) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// The policy data generated by +// a `organizations.getIAMPolicy` data source. +func (o RepositoryGroupIamPolicyOutput) PolicyData() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamPolicy) pulumi.StringOutput { return v.PolicyData }).(pulumi.StringOutput) +} + +// 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. +func (o RepositoryGroupIamPolicyOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamPolicy) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +func (o RepositoryGroupIamPolicyOutput) RepositoryGroupId() pulumi.StringOutput { + return o.ApplyT(func(v *RepositoryGroupIamPolicy) pulumi.StringOutput { return v.RepositoryGroupId }).(pulumi.StringOutput) +} + +type RepositoryGroupIamPolicyArrayOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamPolicyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*RepositoryGroupIamPolicy)(nil)).Elem() +} + +func (o RepositoryGroupIamPolicyArrayOutput) ToRepositoryGroupIamPolicyArrayOutput() RepositoryGroupIamPolicyArrayOutput { + return o +} + +func (o RepositoryGroupIamPolicyArrayOutput) ToRepositoryGroupIamPolicyArrayOutputWithContext(ctx context.Context) RepositoryGroupIamPolicyArrayOutput { + return o +} + +func (o RepositoryGroupIamPolicyArrayOutput) Index(i pulumi.IntInput) RepositoryGroupIamPolicyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *RepositoryGroupIamPolicy { + return vs[0].([]*RepositoryGroupIamPolicy)[vs[1].(int)] + }).(RepositoryGroupIamPolicyOutput) +} + +type RepositoryGroupIamPolicyMapOutput struct{ *pulumi.OutputState } + +func (RepositoryGroupIamPolicyMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*RepositoryGroupIamPolicy)(nil)).Elem() +} + +func (o RepositoryGroupIamPolicyMapOutput) ToRepositoryGroupIamPolicyMapOutput() RepositoryGroupIamPolicyMapOutput { + return o +} + +func (o RepositoryGroupIamPolicyMapOutput) ToRepositoryGroupIamPolicyMapOutputWithContext(ctx context.Context) RepositoryGroupIamPolicyMapOutput { + return o +} + +func (o RepositoryGroupIamPolicyMapOutput) MapIndex(k pulumi.StringInput) RepositoryGroupIamPolicyOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *RepositoryGroupIamPolicy { + return vs[0].(map[string]*RepositoryGroupIamPolicy)[vs[1].(string)] + }).(RepositoryGroupIamPolicyOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamPolicyInput)(nil)).Elem(), &RepositoryGroupIamPolicy{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamPolicyArrayInput)(nil)).Elem(), RepositoryGroupIamPolicyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryGroupIamPolicyMapInput)(nil)).Elem(), RepositoryGroupIamPolicyMap{}) + pulumi.RegisterOutputType(RepositoryGroupIamPolicyOutput{}) + pulumi.RegisterOutputType(RepositoryGroupIamPolicyArrayOutput{}) + pulumi.RegisterOutputType(RepositoryGroupIamPolicyMapOutput{}) +} diff --git a/sdk/go/gcp/gkehub/membershipBinding.go b/sdk/go/gcp/gkehub/membershipBinding.go index 44bff48165..f24a3c0a70 100644 --- a/sdk/go/gcp/gkehub/membershipBinding.go +++ b/sdk/go/gcp/gkehub/membershipBinding.go @@ -51,7 +51,7 @@ import ( // return err // } // membership, err := gkehub.NewMembership(ctx, "membership", &gkehub.MembershipArgs{ -// MembershipId: pulumi.String("tf-test-membership_9106"), +// MembershipId: pulumi.String("tf-test-membership_27169"), // Endpoint: &gkehub.MembershipEndpointArgs{ // GkeCluster: &gkehub.MembershipEndpointGkeClusterArgs{ // ResourceLink: primary.ID().ApplyT(func(id string) (string, error) { @@ -66,13 +66,13 @@ import ( // return err // } // scope, err := gkehub.NewScope(ctx, "scope", &gkehub.ScopeArgs{ -// ScopeId: pulumi.String("tf-test-scope_27169"), +// ScopeId: pulumi.String("tf-test-scope_75223"), // }) // if err != nil { // return err // } // _, err = gkehub.NewMembershipBinding(ctx, "membership_binding", &gkehub.MembershipBindingArgs{ -// MembershipBindingId: pulumi.String("tf-test-membership-binding_75223"), +// MembershipBindingId: pulumi.String("tf-test-membership-binding_41819"), // Scope: scope.Name, // MembershipId: membership.MembershipId, // Location: pulumi.String("global"), diff --git a/sdk/go/gcp/gkehub/membershipRbacRoleBinding.go b/sdk/go/gcp/gkehub/membershipRbacRoleBinding.go index 834cd05367..2beaa57474 100644 --- a/sdk/go/gcp/gkehub/membershipRbacRoleBinding.go +++ b/sdk/go/gcp/gkehub/membershipRbacRoleBinding.go @@ -44,7 +44,7 @@ import ( // return err // } // membership, err := gkehub.NewMembership(ctx, "membership", &gkehub.MembershipArgs{ -// MembershipId: pulumi.String("tf-test-membership_41819"), +// MembershipId: pulumi.String("tf-test-membership_75092"), // Endpoint: &gkehub.MembershipEndpointArgs{ // GkeCluster: &gkehub.MembershipEndpointGkeClusterArgs{ // ResourceLink: primary.ID().ApplyT(func(id string) (string, error) { @@ -63,7 +63,7 @@ import ( // return err // } // _, err = gkehub.NewMembershipRbacRoleBinding(ctx, "membership_rbac_role_binding", &gkehub.MembershipRbacRoleBindingArgs{ -// MembershipRbacRoleBindingId: pulumi.String("tf-test-membership-rbac-role-binding_75092"), +// MembershipRbacRoleBindingId: pulumi.String("tf-test-membership-rbac-role-binding_2605"), // MembershipId: membership.MembershipId, // User: pulumi.Sprintf("service-%v@gcp-sa-anthossupport.iam.gserviceaccount.com", project.Number), // Role: &gkehub.MembershipRbacRoleBindingRoleArgs{ diff --git a/sdk/go/gcp/gkehub/namespace.go b/sdk/go/gcp/gkehub/namespace.go index b2c97c4606..ffe32d8b36 100644 --- a/sdk/go/gcp/gkehub/namespace.go +++ b/sdk/go/gcp/gkehub/namespace.go @@ -37,13 +37,13 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // scope, err := gkehub.NewScope(ctx, "scope", &gkehub.ScopeArgs{ -// ScopeId: pulumi.String("tf-test-scope_2605"), +// ScopeId: pulumi.String("tf-test-scope_34535"), // }) // if err != nil { // return err // } // _, err = gkehub.NewNamespace(ctx, "namespace", &gkehub.NamespaceArgs{ -// ScopeNamespaceId: pulumi.String("tf-test-namespace_34535"), +// ScopeNamespaceId: pulumi.String("tf-test-namespace_22375"), // ScopeId: scope.ScopeId, // Scope: scope.Name, // NamespaceLabels: pulumi.StringMap{ diff --git a/sdk/go/gcp/gkehub/pulumiTypes.go b/sdk/go/gcp/gkehub/pulumiTypes.go index 2786a13629..9252a9d6d2 100644 --- a/sdk/go/gcp/gkehub/pulumiTypes.go +++ b/sdk/go/gcp/gkehub/pulumiTypes.go @@ -2982,7 +2982,7 @@ func (o FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfig type FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary struct { // Configures the manner in which the template library is installed on the cluster. - // Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + // Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. Installation *string `pulumi:"installation"` } @@ -2999,7 +2999,7 @@ type FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPol type FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs struct { // Configures the manner in which the template library is installed on the cluster. - // Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + // Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. Installation pulumi.StringPtrInput `pulumi:"installation"` } @@ -3081,7 +3081,7 @@ func (o FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfig } // Configures the manner in which the template library is installed on the cluster. -// Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. +// Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. func (o FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryOutput) Installation() pulumi.StringPtrOutput { return o.ApplyT(func(v FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary) *string { return v.Installation @@ -3113,7 +3113,7 @@ func (o FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfig } // Configures the manner in which the template library is installed on the cluster. -// Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. +// Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. func (o FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryPtrOutput) Installation() pulumi.StringPtrOutput { return o.ApplyT(func(v *FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary) *string { if v == nil { @@ -3863,16 +3863,18 @@ type FeatureMembershipConfigmanagementConfigSync struct { Enabled *bool `pulumi:"enabled"` // (Optional) Structure is documented below. Git *FeatureMembershipConfigmanagementConfigSyncGit `pulumi:"git"` - // 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. + // 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. MetricsGcpServiceAccountEmail *string `pulumi:"metricsGcpServiceAccountEmail"` // (Optional) Supported from Config Sync versions 1.12.0 onwards. Structure is documented below. // // Use either `git` or `oci` config option. Oci *FeatureMembershipConfigmanagementConfigSyncOci `pulumi:"oci"` - // 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. + // 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. PreventDrift *bool `pulumi:"preventDrift"` // Specifies whether the Config Sync Repo is in "hierarchical" or "unstructured" mode. SourceFormat *string `pulumi:"sourceFormat"` + // 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`. + StopSyncing *bool `pulumi:"stopSyncing"` } // FeatureMembershipConfigmanagementConfigSyncInput is an input type that accepts FeatureMembershipConfigmanagementConfigSyncArgs and FeatureMembershipConfigmanagementConfigSyncOutput values. @@ -3891,16 +3893,18 @@ type FeatureMembershipConfigmanagementConfigSyncArgs struct { Enabled pulumi.BoolPtrInput `pulumi:"enabled"` // (Optional) Structure is documented below. Git FeatureMembershipConfigmanagementConfigSyncGitPtrInput `pulumi:"git"` - // 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. + // 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. MetricsGcpServiceAccountEmail pulumi.StringPtrInput `pulumi:"metricsGcpServiceAccountEmail"` // (Optional) Supported from Config Sync versions 1.12.0 onwards. Structure is documented below. // // Use either `git` or `oci` config option. Oci FeatureMembershipConfigmanagementConfigSyncOciPtrInput `pulumi:"oci"` - // 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. + // 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. PreventDrift pulumi.BoolPtrInput `pulumi:"preventDrift"` // Specifies whether the Config Sync Repo is in "hierarchical" or "unstructured" mode. SourceFormat pulumi.StringPtrInput `pulumi:"sourceFormat"` + // 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`. + StopSyncing pulumi.BoolPtrInput `pulumi:"stopSyncing"` } func (FeatureMembershipConfigmanagementConfigSyncArgs) ElementType() reflect.Type { @@ -3992,7 +3996,7 @@ func (o FeatureMembershipConfigmanagementConfigSyncOutput) Git() FeatureMembersh }).(FeatureMembershipConfigmanagementConfigSyncGitPtrOutput) } -// 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. +// 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. func (o FeatureMembershipConfigmanagementConfigSyncOutput) MetricsGcpServiceAccountEmail() pulumi.StringPtrOutput { return o.ApplyT(func(v FeatureMembershipConfigmanagementConfigSync) *string { return v.MetricsGcpServiceAccountEmail }).(pulumi.StringPtrOutput) } @@ -4006,7 +4010,7 @@ func (o FeatureMembershipConfigmanagementConfigSyncOutput) Oci() FeatureMembersh }).(FeatureMembershipConfigmanagementConfigSyncOciPtrOutput) } -// 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. +// 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. func (o FeatureMembershipConfigmanagementConfigSyncOutput) PreventDrift() pulumi.BoolPtrOutput { return o.ApplyT(func(v FeatureMembershipConfigmanagementConfigSync) *bool { return v.PreventDrift }).(pulumi.BoolPtrOutput) } @@ -4016,6 +4020,11 @@ func (o FeatureMembershipConfigmanagementConfigSyncOutput) SourceFormat() pulumi return o.ApplyT(func(v FeatureMembershipConfigmanagementConfigSync) *string { return v.SourceFormat }).(pulumi.StringPtrOutput) } +// 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`. +func (o FeatureMembershipConfigmanagementConfigSyncOutput) StopSyncing() pulumi.BoolPtrOutput { + return o.ApplyT(func(v FeatureMembershipConfigmanagementConfigSync) *bool { return v.StopSyncing }).(pulumi.BoolPtrOutput) +} + type FeatureMembershipConfigmanagementConfigSyncPtrOutput struct{ *pulumi.OutputState } func (FeatureMembershipConfigmanagementConfigSyncPtrOutput) ElementType() reflect.Type { @@ -4060,7 +4069,7 @@ func (o FeatureMembershipConfigmanagementConfigSyncPtrOutput) Git() FeatureMembe }).(FeatureMembershipConfigmanagementConfigSyncGitPtrOutput) } -// 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. +// 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. func (o FeatureMembershipConfigmanagementConfigSyncPtrOutput) MetricsGcpServiceAccountEmail() pulumi.StringPtrOutput { return o.ApplyT(func(v *FeatureMembershipConfigmanagementConfigSync) *string { if v == nil { @@ -4082,7 +4091,7 @@ func (o FeatureMembershipConfigmanagementConfigSyncPtrOutput) Oci() FeatureMembe }).(FeatureMembershipConfigmanagementConfigSyncOciPtrOutput) } -// 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. +// 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. func (o FeatureMembershipConfigmanagementConfigSyncPtrOutput) PreventDrift() pulumi.BoolPtrOutput { return o.ApplyT(func(v *FeatureMembershipConfigmanagementConfigSync) *bool { if v == nil { @@ -4102,6 +4111,16 @@ func (o FeatureMembershipConfigmanagementConfigSyncPtrOutput) SourceFormat() pul }).(pulumi.StringPtrOutput) } +// 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`. +func (o FeatureMembershipConfigmanagementConfigSyncPtrOutput) StopSyncing() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *FeatureMembershipConfigmanagementConfigSync) *bool { + if v == nil { + return nil + } + return v.StopSyncing + }).(pulumi.BoolPtrOutput) +} + type FeatureMembershipConfigmanagementConfigSyncGit struct { // The GCP Service Account Email used for auth when secretType is gcpServiceAccount. GcpServiceAccountEmail *string `pulumi:"gcpServiceAccountEmail"` diff --git a/sdk/go/gcp/gkehub/scopeRbacRoleBinding.go b/sdk/go/gcp/gkehub/scopeRbacRoleBinding.go index a6b46ec82a..5a4806cdca 100644 --- a/sdk/go/gcp/gkehub/scopeRbacRoleBinding.go +++ b/sdk/go/gcp/gkehub/scopeRbacRoleBinding.go @@ -37,13 +37,13 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // scope, err := gkehub.NewScope(ctx, "scope", &gkehub.ScopeArgs{ -// ScopeId: pulumi.String("tf-test-scope_22375"), +// ScopeId: pulumi.String("tf-test-scope_29439"), // }) // if err != nil { // return err // } // _, err = gkehub.NewScopeRbacRoleBinding(ctx, "scope_rbac_role_binding", &gkehub.ScopeRbacRoleBindingArgs{ -// ScopeRbacRoleBindingId: pulumi.String("tf-test-scope-rbac-role-binding_29439"), +// ScopeRbacRoleBindingId: pulumi.String("tf-test-scope-rbac-role-binding_87786"), // ScopeId: scope.ScopeId, // User: pulumi.String("test-email@gmail.com"), // Role: &gkehub.ScopeRbacRoleBindingRoleArgs{ diff --git a/sdk/go/gcp/iam/foldersPolicyBinding.go b/sdk/go/gcp/iam/foldersPolicyBinding.go index e03647897f..97eb904014 100644 --- a/sdk/go/gcp/iam/foldersPolicyBinding.go +++ b/sdk/go/gcp/iam/foldersPolicyBinding.go @@ -12,6 +12,14 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// A policy binding to a folder +// +// To get more information about FoldersPolicyBinding, see: +// +// * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/folders.locations.policyBindings) +// * How-to Guides +// - [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) +// // ## Example Usage // // ### Iam Folders Policy Binding diff --git a/sdk/go/gcp/iam/init.go b/sdk/go/gcp/iam/init.go index 224ab3b0c0..41c9fb4c7e 100644 --- a/sdk/go/gcp/iam/init.go +++ b/sdk/go/gcp/iam/init.go @@ -31,6 +31,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &OrganizationsPolicyBinding{} case "gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy": r = &PrincipalAccessBoundaryPolicy{} + case "gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding": + r = &ProjectsPolicyBinding{} case "gcp:iam/workforcePool:WorkforcePool": r = &WorkforcePool{} case "gcp:iam/workforcePoolProvider:WorkforcePoolProvider": @@ -77,6 +79,11 @@ func init() { "iam/principalAccessBoundaryPolicy", &module{version}, ) + pulumi.RegisterResourceModule( + "gcp", + "iam/projectsPolicyBinding", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "iam/workforcePool", diff --git a/sdk/go/gcp/iam/organizationsPolicyBinding.go b/sdk/go/gcp/iam/organizationsPolicyBinding.go index 98defc2087..33dc89c275 100644 --- a/sdk/go/gcp/iam/organizationsPolicyBinding.go +++ b/sdk/go/gcp/iam/organizationsPolicyBinding.go @@ -12,6 +12,14 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// A policy binding to an organizations +// +// To get more information about OrganizationsPolicyBinding, see: +// +// * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.policyBindings) +// * How-to Guides +// - [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) +// // ## Example Usage // // ### Iam Organizations Policy Binding diff --git a/sdk/go/gcp/iam/principalAccessBoundaryPolicy.go b/sdk/go/gcp/iam/principalAccessBoundaryPolicy.go index 96c5dee3f5..77c551089c 100644 --- a/sdk/go/gcp/iam/principalAccessBoundaryPolicy.go +++ b/sdk/go/gcp/iam/principalAccessBoundaryPolicy.go @@ -12,6 +12,14 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// An IAM Principal Access Boundary Policy resource +// +// To get more information about PrincipalAccessBoundaryPolicy, see: +// +// * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.principalAccessBoundaryPolicies) +// * How-to Guides +// - [Create and apply Principal Access Boundaries](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create) +// // ## Example Usage // // ### Iam Principal Access Boundary Policy diff --git a/sdk/go/gcp/iam/projectsPolicyBinding.go b/sdk/go/gcp/iam/projectsPolicyBinding.go new file mode 100644 index 0000000000..088ceec4ba --- /dev/null +++ b/sdk/go/gcp/iam/projectsPolicyBinding.go @@ -0,0 +1,583 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package iam + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// A policy binding to a Project +// +// To get more information about ProjectsPolicyBinding, see: +// +// * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/projects.locations.policyBindings) +// * How-to Guides +// - [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) +// +// ## Example Usage +// +// ### Iam Projects Policy Binding +// +// ```go +// package main +// +// import ( +// +// "fmt" +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// project, err := organizations.LookupProject(ctx, &organizations.LookupProjectArgs{}, nil) +// if err != nil { +// return err +// } +// pabPolicy, err := iam.NewPrincipalAccessBoundaryPolicy(ctx, "pab_policy", &iam.PrincipalAccessBoundaryPolicyArgs{ +// Organization: pulumi.String("123456789"), +// Location: pulumi.String("global"), +// DisplayName: pulumi.String("test project binding"), +// PrincipalAccessBoundaryPolicyId: pulumi.String("my-pab-policy"), +// }) +// if err != nil { +// return err +// } +// _, err = iam.NewProjectsPolicyBinding(ctx, "my-project-binding", &iam.ProjectsPolicyBindingArgs{ +// Project: pulumi.String(project.ProjectId), +// Location: pulumi.String("global"), +// DisplayName: pulumi.String("test project binding"), +// PolicyKind: pulumi.String("PRINCIPAL_ACCESS_BOUNDARY"), +// PolicyBindingId: pulumi.String("test-project-binding"), +// Policy: pabPolicy.PrincipalAccessBoundaryPolicyId.ApplyT(func(principalAccessBoundaryPolicyId string) (string, error) { +// return fmt.Sprintf("organizations/123456789/locations/global/principalAccessBoundaryPolicies/%v", principalAccessBoundaryPolicyId), nil +// }).(pulumi.StringOutput), +// Target: &iam.ProjectsPolicyBindingTargetArgs{ +// PrincipalSet: pulumi.Sprintf("//cloudresourcemanager.googleapis.com/projects/%v", project.ProjectId), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ProjectsPolicyBinding can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}}` +// +// * `{{project}}/{{location}}/{{policy_binding_id}}` +// +// * `{{location}}/{{policy_binding_id}}` +// +// When using the `pulumi import` command, ProjectsPolicyBinding can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{project}}/{{location}}/{{policy_binding_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{location}}/{{policy_binding_id}} +// ``` +type ProjectsPolicyBinding struct { + pulumi.CustomResourceState + + // Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + // limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + // configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + Annotations pulumi.StringMapOutput `pulumi:"annotations"` + // Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + // syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + // size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + // 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + // expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + // \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + // != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + // with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + // functions that may be referenced within an expression are determined by the service that evaluates it. See the service + // documentation for additional information. + Condition ProjectsPolicyBindingConditionPtrOutput `pulumi:"condition"` + // Output only. The time when the policy binding was created. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // Optional. The description of the policy binding. Must be less than or equal to 63 characters. + DisplayName pulumi.StringPtrOutput `pulumi:"displayName"` + EffectiveAnnotations pulumi.StringMapOutput `pulumi:"effectiveAnnotations"` + // Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + Etag pulumi.StringOutput `pulumi:"etag"` + // The location of the Policy Binding + Location pulumi.StringOutput `pulumi:"location"` + // The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + Name pulumi.StringOutput `pulumi:"name"` + // Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + Policy pulumi.StringOutput `pulumi:"policy"` + // The Policy Binding ID. + PolicyBindingId pulumi.StringOutput `pulumi:"policyBindingId"` + // Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + // be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + // PRINCIPAL_ACCESS_BOUNDARY ACCESS + PolicyKind pulumi.StringPtrOutput `pulumi:"policyKind"` + // Output only. The globally unique ID of the policy to be bound. + PolicyUid pulumi.StringOutput `pulumi:"policyUid"` + Project pulumi.StringOutput `pulumi:"project"` + // Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + // Structure is documented below. + Target ProjectsPolicyBindingTargetOutput `pulumi:"target"` + // Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + Uid pulumi.StringOutput `pulumi:"uid"` + // Output only. The time when the policy binding was most recently updated. + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewProjectsPolicyBinding registers a new resource with the given unique name, arguments, and options. +func NewProjectsPolicyBinding(ctx *pulumi.Context, + name string, args *ProjectsPolicyBindingArgs, opts ...pulumi.ResourceOption) (*ProjectsPolicyBinding, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.Policy == nil { + return nil, errors.New("invalid value for required argument 'Policy'") + } + if args.PolicyBindingId == nil { + return nil, errors.New("invalid value for required argument 'PolicyBindingId'") + } + if args.Target == nil { + return nil, errors.New("invalid value for required argument 'Target'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource ProjectsPolicyBinding + err := ctx.RegisterResource("gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetProjectsPolicyBinding gets an existing ProjectsPolicyBinding resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetProjectsPolicyBinding(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ProjectsPolicyBindingState, opts ...pulumi.ResourceOption) (*ProjectsPolicyBinding, error) { + var resource ProjectsPolicyBinding + err := ctx.ReadResource("gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ProjectsPolicyBinding resources. +type projectsPolicyBindingState struct { + // Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + // limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + // configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + Annotations map[string]string `pulumi:"annotations"` + // Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + // syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + // size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + // 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + // expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + // \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + // != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + // with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + // functions that may be referenced within an expression are determined by the service that evaluates it. See the service + // documentation for additional information. + Condition *ProjectsPolicyBindingCondition `pulumi:"condition"` + // Output only. The time when the policy binding was created. + CreateTime *string `pulumi:"createTime"` + // Optional. The description of the policy binding. Must be less than or equal to 63 characters. + DisplayName *string `pulumi:"displayName"` + EffectiveAnnotations map[string]string `pulumi:"effectiveAnnotations"` + // Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + Etag *string `pulumi:"etag"` + // The location of the Policy Binding + Location *string `pulumi:"location"` + // The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + Name *string `pulumi:"name"` + // Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + Policy *string `pulumi:"policy"` + // The Policy Binding ID. + PolicyBindingId *string `pulumi:"policyBindingId"` + // Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + // be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + // PRINCIPAL_ACCESS_BOUNDARY ACCESS + PolicyKind *string `pulumi:"policyKind"` + // Output only. The globally unique ID of the policy to be bound. + PolicyUid *string `pulumi:"policyUid"` + Project *string `pulumi:"project"` + // Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + // Structure is documented below. + Target *ProjectsPolicyBindingTarget `pulumi:"target"` + // Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + Uid *string `pulumi:"uid"` + // Output only. The time when the policy binding was most recently updated. + UpdateTime *string `pulumi:"updateTime"` +} + +type ProjectsPolicyBindingState struct { + // Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + // limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + // configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + Annotations pulumi.StringMapInput + // Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + // syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + // size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + // 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + // expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + // \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + // != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + // with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + // functions that may be referenced within an expression are determined by the service that evaluates it. See the service + // documentation for additional information. + Condition ProjectsPolicyBindingConditionPtrInput + // Output only. The time when the policy binding was created. + CreateTime pulumi.StringPtrInput + // Optional. The description of the policy binding. Must be less than or equal to 63 characters. + DisplayName pulumi.StringPtrInput + EffectiveAnnotations pulumi.StringMapInput + // Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + Etag pulumi.StringPtrInput + // The location of the Policy Binding + Location pulumi.StringPtrInput + // The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + Name pulumi.StringPtrInput + // Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + Policy pulumi.StringPtrInput + // The Policy Binding ID. + PolicyBindingId pulumi.StringPtrInput + // Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + // be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + // PRINCIPAL_ACCESS_BOUNDARY ACCESS + PolicyKind pulumi.StringPtrInput + // Output only. The globally unique ID of the policy to be bound. + PolicyUid pulumi.StringPtrInput + Project pulumi.StringPtrInput + // Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + // Structure is documented below. + Target ProjectsPolicyBindingTargetPtrInput + // Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + Uid pulumi.StringPtrInput + // Output only. The time when the policy binding was most recently updated. + UpdateTime pulumi.StringPtrInput +} + +func (ProjectsPolicyBindingState) ElementType() reflect.Type { + return reflect.TypeOf((*projectsPolicyBindingState)(nil)).Elem() +} + +type projectsPolicyBindingArgs struct { + // Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + // limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + // configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + Annotations map[string]string `pulumi:"annotations"` + // Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + // syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + // size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + // 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + // expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + // \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + // != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + // with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + // functions that may be referenced within an expression are determined by the service that evaluates it. See the service + // documentation for additional information. + Condition *ProjectsPolicyBindingCondition `pulumi:"condition"` + // Optional. The description of the policy binding. Must be less than or equal to 63 characters. + DisplayName *string `pulumi:"displayName"` + // The location of the Policy Binding + Location string `pulumi:"location"` + // Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + Policy string `pulumi:"policy"` + // The Policy Binding ID. + PolicyBindingId string `pulumi:"policyBindingId"` + // Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + // be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + // PRINCIPAL_ACCESS_BOUNDARY ACCESS + PolicyKind *string `pulumi:"policyKind"` + Project *string `pulumi:"project"` + // Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + // Structure is documented below. + Target ProjectsPolicyBindingTarget `pulumi:"target"` +} + +// The set of arguments for constructing a ProjectsPolicyBinding resource. +type ProjectsPolicyBindingArgs struct { + // Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + // limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + // configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + Annotations pulumi.StringMapInput + // Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + // syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + // size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + // 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + // expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + // \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + // != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + // with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + // functions that may be referenced within an expression are determined by the service that evaluates it. See the service + // documentation for additional information. + Condition ProjectsPolicyBindingConditionPtrInput + // Optional. The description of the policy binding. Must be less than or equal to 63 characters. + DisplayName pulumi.StringPtrInput + // The location of the Policy Binding + Location pulumi.StringInput + // Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + Policy pulumi.StringInput + // The Policy Binding ID. + PolicyBindingId pulumi.StringInput + // Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + // be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + // PRINCIPAL_ACCESS_BOUNDARY ACCESS + PolicyKind pulumi.StringPtrInput + Project pulumi.StringPtrInput + // Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + // Structure is documented below. + Target ProjectsPolicyBindingTargetInput +} + +func (ProjectsPolicyBindingArgs) ElementType() reflect.Type { + return reflect.TypeOf((*projectsPolicyBindingArgs)(nil)).Elem() +} + +type ProjectsPolicyBindingInput interface { + pulumi.Input + + ToProjectsPolicyBindingOutput() ProjectsPolicyBindingOutput + ToProjectsPolicyBindingOutputWithContext(ctx context.Context) ProjectsPolicyBindingOutput +} + +func (*ProjectsPolicyBinding) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectsPolicyBinding)(nil)).Elem() +} + +func (i *ProjectsPolicyBinding) ToProjectsPolicyBindingOutput() ProjectsPolicyBindingOutput { + return i.ToProjectsPolicyBindingOutputWithContext(context.Background()) +} + +func (i *ProjectsPolicyBinding) ToProjectsPolicyBindingOutputWithContext(ctx context.Context) ProjectsPolicyBindingOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectsPolicyBindingOutput) +} + +// ProjectsPolicyBindingArrayInput is an input type that accepts ProjectsPolicyBindingArray and ProjectsPolicyBindingArrayOutput values. +// You can construct a concrete instance of `ProjectsPolicyBindingArrayInput` via: +// +// ProjectsPolicyBindingArray{ ProjectsPolicyBindingArgs{...} } +type ProjectsPolicyBindingArrayInput interface { + pulumi.Input + + ToProjectsPolicyBindingArrayOutput() ProjectsPolicyBindingArrayOutput + ToProjectsPolicyBindingArrayOutputWithContext(context.Context) ProjectsPolicyBindingArrayOutput +} + +type ProjectsPolicyBindingArray []ProjectsPolicyBindingInput + +func (ProjectsPolicyBindingArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ProjectsPolicyBinding)(nil)).Elem() +} + +func (i ProjectsPolicyBindingArray) ToProjectsPolicyBindingArrayOutput() ProjectsPolicyBindingArrayOutput { + return i.ToProjectsPolicyBindingArrayOutputWithContext(context.Background()) +} + +func (i ProjectsPolicyBindingArray) ToProjectsPolicyBindingArrayOutputWithContext(ctx context.Context) ProjectsPolicyBindingArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectsPolicyBindingArrayOutput) +} + +// ProjectsPolicyBindingMapInput is an input type that accepts ProjectsPolicyBindingMap and ProjectsPolicyBindingMapOutput values. +// You can construct a concrete instance of `ProjectsPolicyBindingMapInput` via: +// +// ProjectsPolicyBindingMap{ "key": ProjectsPolicyBindingArgs{...} } +type ProjectsPolicyBindingMapInput interface { + pulumi.Input + + ToProjectsPolicyBindingMapOutput() ProjectsPolicyBindingMapOutput + ToProjectsPolicyBindingMapOutputWithContext(context.Context) ProjectsPolicyBindingMapOutput +} + +type ProjectsPolicyBindingMap map[string]ProjectsPolicyBindingInput + +func (ProjectsPolicyBindingMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ProjectsPolicyBinding)(nil)).Elem() +} + +func (i ProjectsPolicyBindingMap) ToProjectsPolicyBindingMapOutput() ProjectsPolicyBindingMapOutput { + return i.ToProjectsPolicyBindingMapOutputWithContext(context.Background()) +} + +func (i ProjectsPolicyBindingMap) ToProjectsPolicyBindingMapOutputWithContext(ctx context.Context) ProjectsPolicyBindingMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectsPolicyBindingMapOutput) +} + +type ProjectsPolicyBindingOutput struct{ *pulumi.OutputState } + +func (ProjectsPolicyBindingOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectsPolicyBinding)(nil)).Elem() +} + +func (o ProjectsPolicyBindingOutput) ToProjectsPolicyBindingOutput() ProjectsPolicyBindingOutput { + return o +} + +func (o ProjectsPolicyBindingOutput) ToProjectsPolicyBindingOutputWithContext(ctx context.Context) ProjectsPolicyBindingOutput { + return o +} + +// Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size +// limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your +// configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. +func (o ProjectsPolicyBindingOutput) Annotations() pulumi.StringMapOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringMapOutput { return v.Annotations }).(pulumi.StringMapOutput) +} + +// Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The +// syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary +// size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < +// 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" +// expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: +// \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type +// != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string +// with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and +// functions that may be referenced within an expression are determined by the service that evaluates it. See the service +// documentation for additional information. +func (o ProjectsPolicyBindingOutput) Condition() ProjectsPolicyBindingConditionPtrOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) ProjectsPolicyBindingConditionPtrOutput { return v.Condition }).(ProjectsPolicyBindingConditionPtrOutput) +} + +// Output only. The time when the policy binding was created. +func (o ProjectsPolicyBindingOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// Optional. The description of the policy binding. Must be less than or equal to 63 characters. +func (o ProjectsPolicyBindingOutput) DisplayName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringPtrOutput { return v.DisplayName }).(pulumi.StringPtrOutput) +} + +func (o ProjectsPolicyBindingOutput) EffectiveAnnotations() pulumi.StringMapOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringMapOutput { return v.EffectiveAnnotations }).(pulumi.StringMapOutput) +} + +// Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. +func (o ProjectsPolicyBindingOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// The location of the Policy Binding +func (o ProjectsPolicyBindingOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` +func (o ProjectsPolicyBindingOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). +func (o ProjectsPolicyBindingOutput) Policy() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.Policy }).(pulumi.StringOutput) +} + +// The Policy Binding ID. +func (o ProjectsPolicyBindingOutput) PolicyBindingId() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.PolicyBindingId }).(pulumi.StringOutput) +} + +// Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will +// be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED +// PRINCIPAL_ACCESS_BOUNDARY ACCESS +func (o ProjectsPolicyBindingOutput) PolicyKind() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringPtrOutput { return v.PolicyKind }).(pulumi.StringPtrOutput) +} + +// Output only. The globally unique ID of the policy to be bound. +func (o ProjectsPolicyBindingOutput) PolicyUid() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.PolicyUid }).(pulumi.StringOutput) +} + +func (o ProjectsPolicyBindingOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// Target is the full resource name of the resource to which the policy will be bound. Immutable once set. +// Structure is documented below. +func (o ProjectsPolicyBindingOutput) Target() ProjectsPolicyBindingTargetOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) ProjectsPolicyBindingTargetOutput { return v.Target }).(ProjectsPolicyBindingTargetOutput) +} + +// Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. +func (o ProjectsPolicyBindingOutput) Uid() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.Uid }).(pulumi.StringOutput) +} + +// Output only. The time when the policy binding was most recently updated. +func (o ProjectsPolicyBindingOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectsPolicyBinding) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type ProjectsPolicyBindingArrayOutput struct{ *pulumi.OutputState } + +func (ProjectsPolicyBindingArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ProjectsPolicyBinding)(nil)).Elem() +} + +func (o ProjectsPolicyBindingArrayOutput) ToProjectsPolicyBindingArrayOutput() ProjectsPolicyBindingArrayOutput { + return o +} + +func (o ProjectsPolicyBindingArrayOutput) ToProjectsPolicyBindingArrayOutputWithContext(ctx context.Context) ProjectsPolicyBindingArrayOutput { + return o +} + +func (o ProjectsPolicyBindingArrayOutput) Index(i pulumi.IntInput) ProjectsPolicyBindingOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ProjectsPolicyBinding { + return vs[0].([]*ProjectsPolicyBinding)[vs[1].(int)] + }).(ProjectsPolicyBindingOutput) +} + +type ProjectsPolicyBindingMapOutput struct{ *pulumi.OutputState } + +func (ProjectsPolicyBindingMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ProjectsPolicyBinding)(nil)).Elem() +} + +func (o ProjectsPolicyBindingMapOutput) ToProjectsPolicyBindingMapOutput() ProjectsPolicyBindingMapOutput { + return o +} + +func (o ProjectsPolicyBindingMapOutput) ToProjectsPolicyBindingMapOutputWithContext(ctx context.Context) ProjectsPolicyBindingMapOutput { + return o +} + +func (o ProjectsPolicyBindingMapOutput) MapIndex(k pulumi.StringInput) ProjectsPolicyBindingOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ProjectsPolicyBinding { + return vs[0].(map[string]*ProjectsPolicyBinding)[vs[1].(string)] + }).(ProjectsPolicyBindingOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ProjectsPolicyBindingInput)(nil)).Elem(), &ProjectsPolicyBinding{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectsPolicyBindingArrayInput)(nil)).Elem(), ProjectsPolicyBindingArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectsPolicyBindingMapInput)(nil)).Elem(), ProjectsPolicyBindingMap{}) + pulumi.RegisterOutputType(ProjectsPolicyBindingOutput{}) + pulumi.RegisterOutputType(ProjectsPolicyBindingArrayOutput{}) + pulumi.RegisterOutputType(ProjectsPolicyBindingMapOutput{}) +} diff --git a/sdk/go/gcp/iam/pulumiTypes.go b/sdk/go/gcp/iam/pulumiTypes.go index 16e8ddac2e..00a6e0ed6e 100644 --- a/sdk/go/gcp/iam/pulumiTypes.go +++ b/sdk/go/gcp/iam/pulumiTypes.go @@ -2074,6 +2074,349 @@ func (o PrincipalAccessBoundaryPolicyDetailsRuleArrayOutput) Index(i pulumi.IntI }).(PrincipalAccessBoundaryPolicyDetailsRuleOutput) } +type ProjectsPolicyBindingCondition struct { + // Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + Description *string `pulumi:"description"` + // Textual representation of an expression in Common Expression Language syntax. + Expression *string `pulumi:"expression"` + // Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + Location *string `pulumi:"location"` + // 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. + Title *string `pulumi:"title"` +} + +// ProjectsPolicyBindingConditionInput is an input type that accepts ProjectsPolicyBindingConditionArgs and ProjectsPolicyBindingConditionOutput values. +// You can construct a concrete instance of `ProjectsPolicyBindingConditionInput` via: +// +// ProjectsPolicyBindingConditionArgs{...} +type ProjectsPolicyBindingConditionInput interface { + pulumi.Input + + ToProjectsPolicyBindingConditionOutput() ProjectsPolicyBindingConditionOutput + ToProjectsPolicyBindingConditionOutputWithContext(context.Context) ProjectsPolicyBindingConditionOutput +} + +type ProjectsPolicyBindingConditionArgs struct { + // Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + Description pulumi.StringPtrInput `pulumi:"description"` + // Textual representation of an expression in Common Expression Language syntax. + Expression pulumi.StringPtrInput `pulumi:"expression"` + // Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + Location pulumi.StringPtrInput `pulumi:"location"` + // 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. + Title pulumi.StringPtrInput `pulumi:"title"` +} + +func (ProjectsPolicyBindingConditionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ProjectsPolicyBindingCondition)(nil)).Elem() +} + +func (i ProjectsPolicyBindingConditionArgs) ToProjectsPolicyBindingConditionOutput() ProjectsPolicyBindingConditionOutput { + return i.ToProjectsPolicyBindingConditionOutputWithContext(context.Background()) +} + +func (i ProjectsPolicyBindingConditionArgs) ToProjectsPolicyBindingConditionOutputWithContext(ctx context.Context) ProjectsPolicyBindingConditionOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectsPolicyBindingConditionOutput) +} + +func (i ProjectsPolicyBindingConditionArgs) ToProjectsPolicyBindingConditionPtrOutput() ProjectsPolicyBindingConditionPtrOutput { + return i.ToProjectsPolicyBindingConditionPtrOutputWithContext(context.Background()) +} + +func (i ProjectsPolicyBindingConditionArgs) ToProjectsPolicyBindingConditionPtrOutputWithContext(ctx context.Context) ProjectsPolicyBindingConditionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectsPolicyBindingConditionOutput).ToProjectsPolicyBindingConditionPtrOutputWithContext(ctx) +} + +// ProjectsPolicyBindingConditionPtrInput is an input type that accepts ProjectsPolicyBindingConditionArgs, ProjectsPolicyBindingConditionPtr and ProjectsPolicyBindingConditionPtrOutput values. +// You can construct a concrete instance of `ProjectsPolicyBindingConditionPtrInput` via: +// +// ProjectsPolicyBindingConditionArgs{...} +// +// or: +// +// nil +type ProjectsPolicyBindingConditionPtrInput interface { + pulumi.Input + + ToProjectsPolicyBindingConditionPtrOutput() ProjectsPolicyBindingConditionPtrOutput + ToProjectsPolicyBindingConditionPtrOutputWithContext(context.Context) ProjectsPolicyBindingConditionPtrOutput +} + +type projectsPolicyBindingConditionPtrType ProjectsPolicyBindingConditionArgs + +func ProjectsPolicyBindingConditionPtr(v *ProjectsPolicyBindingConditionArgs) ProjectsPolicyBindingConditionPtrInput { + return (*projectsPolicyBindingConditionPtrType)(v) +} + +func (*projectsPolicyBindingConditionPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectsPolicyBindingCondition)(nil)).Elem() +} + +func (i *projectsPolicyBindingConditionPtrType) ToProjectsPolicyBindingConditionPtrOutput() ProjectsPolicyBindingConditionPtrOutput { + return i.ToProjectsPolicyBindingConditionPtrOutputWithContext(context.Background()) +} + +func (i *projectsPolicyBindingConditionPtrType) ToProjectsPolicyBindingConditionPtrOutputWithContext(ctx context.Context) ProjectsPolicyBindingConditionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectsPolicyBindingConditionPtrOutput) +} + +type ProjectsPolicyBindingConditionOutput struct{ *pulumi.OutputState } + +func (ProjectsPolicyBindingConditionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ProjectsPolicyBindingCondition)(nil)).Elem() +} + +func (o ProjectsPolicyBindingConditionOutput) ToProjectsPolicyBindingConditionOutput() ProjectsPolicyBindingConditionOutput { + return o +} + +func (o ProjectsPolicyBindingConditionOutput) ToProjectsPolicyBindingConditionOutputWithContext(ctx context.Context) ProjectsPolicyBindingConditionOutput { + return o +} + +func (o ProjectsPolicyBindingConditionOutput) ToProjectsPolicyBindingConditionPtrOutput() ProjectsPolicyBindingConditionPtrOutput { + return o.ToProjectsPolicyBindingConditionPtrOutputWithContext(context.Background()) +} + +func (o ProjectsPolicyBindingConditionOutput) ToProjectsPolicyBindingConditionPtrOutputWithContext(ctx context.Context) ProjectsPolicyBindingConditionPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ProjectsPolicyBindingCondition) *ProjectsPolicyBindingCondition { + return &v + }).(ProjectsPolicyBindingConditionPtrOutput) +} + +// Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. +func (o ProjectsPolicyBindingConditionOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v ProjectsPolicyBindingCondition) *string { return v.Description }).(pulumi.StringPtrOutput) +} + +// Textual representation of an expression in Common Expression Language syntax. +func (o ProjectsPolicyBindingConditionOutput) Expression() pulumi.StringPtrOutput { + return o.ApplyT(func(v ProjectsPolicyBindingCondition) *string { return v.Expression }).(pulumi.StringPtrOutput) +} + +// Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. +func (o ProjectsPolicyBindingConditionOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v ProjectsPolicyBindingCondition) *string { return v.Location }).(pulumi.StringPtrOutput) +} + +// 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. +func (o ProjectsPolicyBindingConditionOutput) Title() pulumi.StringPtrOutput { + return o.ApplyT(func(v ProjectsPolicyBindingCondition) *string { return v.Title }).(pulumi.StringPtrOutput) +} + +type ProjectsPolicyBindingConditionPtrOutput struct{ *pulumi.OutputState } + +func (ProjectsPolicyBindingConditionPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectsPolicyBindingCondition)(nil)).Elem() +} + +func (o ProjectsPolicyBindingConditionPtrOutput) ToProjectsPolicyBindingConditionPtrOutput() ProjectsPolicyBindingConditionPtrOutput { + return o +} + +func (o ProjectsPolicyBindingConditionPtrOutput) ToProjectsPolicyBindingConditionPtrOutputWithContext(ctx context.Context) ProjectsPolicyBindingConditionPtrOutput { + return o +} + +func (o ProjectsPolicyBindingConditionPtrOutput) Elem() ProjectsPolicyBindingConditionOutput { + return o.ApplyT(func(v *ProjectsPolicyBindingCondition) ProjectsPolicyBindingCondition { + if v != nil { + return *v + } + var ret ProjectsPolicyBindingCondition + return ret + }).(ProjectsPolicyBindingConditionOutput) +} + +// Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. +func (o ProjectsPolicyBindingConditionPtrOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ProjectsPolicyBindingCondition) *string { + if v == nil { + return nil + } + return v.Description + }).(pulumi.StringPtrOutput) +} + +// Textual representation of an expression in Common Expression Language syntax. +func (o ProjectsPolicyBindingConditionPtrOutput) Expression() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ProjectsPolicyBindingCondition) *string { + if v == nil { + return nil + } + return v.Expression + }).(pulumi.StringPtrOutput) +} + +// Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. +func (o ProjectsPolicyBindingConditionPtrOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ProjectsPolicyBindingCondition) *string { + if v == nil { + return nil + } + return v.Location + }).(pulumi.StringPtrOutput) +} + +// 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. +func (o ProjectsPolicyBindingConditionPtrOutput) Title() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ProjectsPolicyBindingCondition) *string { + if v == nil { + return nil + } + return v.Title + }).(pulumi.StringPtrOutput) +} + +type ProjectsPolicyBindingTarget struct { + // Required. Immutable. The resource name of the policy to be bound. + // The binding parent and policy must belong to the same Organization (or Project). + // + // *** + PrincipalSet *string `pulumi:"principalSet"` +} + +// ProjectsPolicyBindingTargetInput is an input type that accepts ProjectsPolicyBindingTargetArgs and ProjectsPolicyBindingTargetOutput values. +// You can construct a concrete instance of `ProjectsPolicyBindingTargetInput` via: +// +// ProjectsPolicyBindingTargetArgs{...} +type ProjectsPolicyBindingTargetInput interface { + pulumi.Input + + ToProjectsPolicyBindingTargetOutput() ProjectsPolicyBindingTargetOutput + ToProjectsPolicyBindingTargetOutputWithContext(context.Context) ProjectsPolicyBindingTargetOutput +} + +type ProjectsPolicyBindingTargetArgs struct { + // Required. Immutable. The resource name of the policy to be bound. + // The binding parent and policy must belong to the same Organization (or Project). + // + // *** + PrincipalSet pulumi.StringPtrInput `pulumi:"principalSet"` +} + +func (ProjectsPolicyBindingTargetArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ProjectsPolicyBindingTarget)(nil)).Elem() +} + +func (i ProjectsPolicyBindingTargetArgs) ToProjectsPolicyBindingTargetOutput() ProjectsPolicyBindingTargetOutput { + return i.ToProjectsPolicyBindingTargetOutputWithContext(context.Background()) +} + +func (i ProjectsPolicyBindingTargetArgs) ToProjectsPolicyBindingTargetOutputWithContext(ctx context.Context) ProjectsPolicyBindingTargetOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectsPolicyBindingTargetOutput) +} + +func (i ProjectsPolicyBindingTargetArgs) ToProjectsPolicyBindingTargetPtrOutput() ProjectsPolicyBindingTargetPtrOutput { + return i.ToProjectsPolicyBindingTargetPtrOutputWithContext(context.Background()) +} + +func (i ProjectsPolicyBindingTargetArgs) ToProjectsPolicyBindingTargetPtrOutputWithContext(ctx context.Context) ProjectsPolicyBindingTargetPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectsPolicyBindingTargetOutput).ToProjectsPolicyBindingTargetPtrOutputWithContext(ctx) +} + +// ProjectsPolicyBindingTargetPtrInput is an input type that accepts ProjectsPolicyBindingTargetArgs, ProjectsPolicyBindingTargetPtr and ProjectsPolicyBindingTargetPtrOutput values. +// You can construct a concrete instance of `ProjectsPolicyBindingTargetPtrInput` via: +// +// ProjectsPolicyBindingTargetArgs{...} +// +// or: +// +// nil +type ProjectsPolicyBindingTargetPtrInput interface { + pulumi.Input + + ToProjectsPolicyBindingTargetPtrOutput() ProjectsPolicyBindingTargetPtrOutput + ToProjectsPolicyBindingTargetPtrOutputWithContext(context.Context) ProjectsPolicyBindingTargetPtrOutput +} + +type projectsPolicyBindingTargetPtrType ProjectsPolicyBindingTargetArgs + +func ProjectsPolicyBindingTargetPtr(v *ProjectsPolicyBindingTargetArgs) ProjectsPolicyBindingTargetPtrInput { + return (*projectsPolicyBindingTargetPtrType)(v) +} + +func (*projectsPolicyBindingTargetPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectsPolicyBindingTarget)(nil)).Elem() +} + +func (i *projectsPolicyBindingTargetPtrType) ToProjectsPolicyBindingTargetPtrOutput() ProjectsPolicyBindingTargetPtrOutput { + return i.ToProjectsPolicyBindingTargetPtrOutputWithContext(context.Background()) +} + +func (i *projectsPolicyBindingTargetPtrType) ToProjectsPolicyBindingTargetPtrOutputWithContext(ctx context.Context) ProjectsPolicyBindingTargetPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectsPolicyBindingTargetPtrOutput) +} + +type ProjectsPolicyBindingTargetOutput struct{ *pulumi.OutputState } + +func (ProjectsPolicyBindingTargetOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ProjectsPolicyBindingTarget)(nil)).Elem() +} + +func (o ProjectsPolicyBindingTargetOutput) ToProjectsPolicyBindingTargetOutput() ProjectsPolicyBindingTargetOutput { + return o +} + +func (o ProjectsPolicyBindingTargetOutput) ToProjectsPolicyBindingTargetOutputWithContext(ctx context.Context) ProjectsPolicyBindingTargetOutput { + return o +} + +func (o ProjectsPolicyBindingTargetOutput) ToProjectsPolicyBindingTargetPtrOutput() ProjectsPolicyBindingTargetPtrOutput { + return o.ToProjectsPolicyBindingTargetPtrOutputWithContext(context.Background()) +} + +func (o ProjectsPolicyBindingTargetOutput) ToProjectsPolicyBindingTargetPtrOutputWithContext(ctx context.Context) ProjectsPolicyBindingTargetPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ProjectsPolicyBindingTarget) *ProjectsPolicyBindingTarget { + return &v + }).(ProjectsPolicyBindingTargetPtrOutput) +} + +// Required. Immutable. The resource name of the policy to be bound. +// The binding parent and policy must belong to the same Organization (or Project). +// +// *** +func (o ProjectsPolicyBindingTargetOutput) PrincipalSet() pulumi.StringPtrOutput { + return o.ApplyT(func(v ProjectsPolicyBindingTarget) *string { return v.PrincipalSet }).(pulumi.StringPtrOutput) +} + +type ProjectsPolicyBindingTargetPtrOutput struct{ *pulumi.OutputState } + +func (ProjectsPolicyBindingTargetPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectsPolicyBindingTarget)(nil)).Elem() +} + +func (o ProjectsPolicyBindingTargetPtrOutput) ToProjectsPolicyBindingTargetPtrOutput() ProjectsPolicyBindingTargetPtrOutput { + return o +} + +func (o ProjectsPolicyBindingTargetPtrOutput) ToProjectsPolicyBindingTargetPtrOutputWithContext(ctx context.Context) ProjectsPolicyBindingTargetPtrOutput { + return o +} + +func (o ProjectsPolicyBindingTargetPtrOutput) Elem() ProjectsPolicyBindingTargetOutput { + return o.ApplyT(func(v *ProjectsPolicyBindingTarget) ProjectsPolicyBindingTarget { + if v != nil { + return *v + } + var ret ProjectsPolicyBindingTarget + return ret + }).(ProjectsPolicyBindingTargetOutput) +} + +// Required. Immutable. The resource name of the policy to be bound. +// The binding parent and policy must belong to the same Organization (or Project). +// +// *** +func (o ProjectsPolicyBindingTargetPtrOutput) PrincipalSet() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ProjectsPolicyBindingTarget) *string { + if v == nil { + return nil + } + return v.PrincipalSet + }).(pulumi.StringPtrOutput) +} + type WorkforcePoolAccessRestrictions struct { // Services allowed for web sign-in with the workforce pool. // If not set by default there are no restrictions. @@ -6010,6 +6353,10 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*PrincipalAccessBoundaryPolicyDetailsPtrInput)(nil)).Elem(), PrincipalAccessBoundaryPolicyDetailsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PrincipalAccessBoundaryPolicyDetailsRuleInput)(nil)).Elem(), PrincipalAccessBoundaryPolicyDetailsRuleArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PrincipalAccessBoundaryPolicyDetailsRuleArrayInput)(nil)).Elem(), PrincipalAccessBoundaryPolicyDetailsRuleArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectsPolicyBindingConditionInput)(nil)).Elem(), ProjectsPolicyBindingConditionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectsPolicyBindingConditionPtrInput)(nil)).Elem(), ProjectsPolicyBindingConditionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectsPolicyBindingTargetInput)(nil)).Elem(), ProjectsPolicyBindingTargetArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectsPolicyBindingTargetPtrInput)(nil)).Elem(), ProjectsPolicyBindingTargetArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*WorkforcePoolAccessRestrictionsInput)(nil)).Elem(), WorkforcePoolAccessRestrictionsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*WorkforcePoolAccessRestrictionsPtrInput)(nil)).Elem(), WorkforcePoolAccessRestrictionsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*WorkforcePoolAccessRestrictionsAllowedServiceInput)(nil)).Elem(), WorkforcePoolAccessRestrictionsAllowedServiceArgs{}) @@ -6086,6 +6433,10 @@ func init() { pulumi.RegisterOutputType(PrincipalAccessBoundaryPolicyDetailsPtrOutput{}) pulumi.RegisterOutputType(PrincipalAccessBoundaryPolicyDetailsRuleOutput{}) pulumi.RegisterOutputType(PrincipalAccessBoundaryPolicyDetailsRuleArrayOutput{}) + pulumi.RegisterOutputType(ProjectsPolicyBindingConditionOutput{}) + pulumi.RegisterOutputType(ProjectsPolicyBindingConditionPtrOutput{}) + pulumi.RegisterOutputType(ProjectsPolicyBindingTargetOutput{}) + pulumi.RegisterOutputType(ProjectsPolicyBindingTargetPtrOutput{}) pulumi.RegisterOutputType(WorkforcePoolAccessRestrictionsOutput{}) pulumi.RegisterOutputType(WorkforcePoolAccessRestrictionsPtrOutput{}) pulumi.RegisterOutputType(WorkforcePoolAccessRestrictionsAllowedServiceOutput{}) diff --git a/sdk/go/gcp/iap/tunnelDestGroup.go b/sdk/go/gcp/iap/tunnelDestGroup.go index 0db66624e7..22f8f35a6d 100644 --- a/sdk/go/gcp/iap/tunnelDestGroup.go +++ b/sdk/go/gcp/iap/tunnelDestGroup.go @@ -38,7 +38,7 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := iap.NewTunnelDestGroup(ctx, "dest_group", &iap.TunnelDestGroupArgs{ // Region: pulumi.String("us-central1"), -// GroupName: pulumi.String("testgroup_87786"), +// GroupName: pulumi.String("testgroup_2067"), // Cidrs: pulumi.StringArray{ // pulumi.String("10.1.0.0/16"), // pulumi.String("192.168.10.0/24"), diff --git a/sdk/go/gcp/integrationconnectors/managedZone.go b/sdk/go/gcp/integrationconnectors/managedZone.go index b871949ff6..2169dc4fbe 100644 --- a/sdk/go/gcp/integrationconnectors/managedZone.go +++ b/sdk/go/gcp/integrationconnectors/managedZone.go @@ -43,8 +43,8 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // targetProject, err := organizations.NewProject(ctx, "target_project", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test_2067"), -// Name: pulumi.String("tf-test_40785"), +// ProjectId: pulumi.String("tf-test_40785"), +// Name: pulumi.String("tf-test_79169"), // OrgId: pulumi.String("123456789"), // BillingAccount: pulumi.String("000000-0000000-0000000-000000"), // DeletionPolicy: pulumi.String("DELETE"), @@ -89,8 +89,8 @@ import ( // return err // } // zone, err := dns.NewManagedZone(ctx, "zone", &dns.ManagedZoneArgs{ -// Name: pulumi.String("tf-test-dns_79169"), -// DnsName: pulumi.String("private_56529.example.com."), +// Name: pulumi.String("tf-test-dns_56529"), +// DnsName: pulumi.String("private_75413.example.com."), // Visibility: pulumi.String("private"), // PrivateVisibilityConfig: &dns.ManagedZonePrivateVisibilityConfigArgs{ // Networks: dns.ManagedZonePrivateVisibilityConfigNetworkArray{ diff --git a/sdk/go/gcp/integrationconnectors/pulumiTypes.go b/sdk/go/gcp/integrationconnectors/pulumiTypes.go index 4ba930deec..549c6bd965 100644 --- a/sdk/go/gcp/integrationconnectors/pulumiTypes.go +++ b/sdk/go/gcp/integrationconnectors/pulumiTypes.go @@ -316,7 +316,7 @@ func (o ConnectionAuthConfigPtrOutput) UserPassword() ConnectionAuthConfigUserPa type ConnectionAuthConfigAdditionalVariable struct { // Boolean Value of configVariable. BooleanValue *bool `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue *ConnectionAuthConfigAdditionalVariableEncryptionKeyValue `pulumi:"encryptionKeyValue"` // Integer Value of configVariable. @@ -344,7 +344,7 @@ type ConnectionAuthConfigAdditionalVariableInput interface { type ConnectionAuthConfigAdditionalVariableArgs struct { // Boolean Value of configVariable. BooleanValue pulumi.BoolPtrInput `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue ConnectionAuthConfigAdditionalVariableEncryptionKeyValuePtrInput `pulumi:"encryptionKeyValue"` // Integer Value of configVariable. @@ -414,7 +414,7 @@ func (o ConnectionAuthConfigAdditionalVariableOutput) BooleanValue() pulumi.Bool return o.ApplyT(func(v ConnectionAuthConfigAdditionalVariable) *bool { return v.BooleanValue }).(pulumi.BoolPtrOutput) } -// Encription key value of configVariable. +// Encryption key value of configVariable. // Structure is documented below. func (o ConnectionAuthConfigAdditionalVariableOutput) EncryptionKeyValue() ConnectionAuthConfigAdditionalVariableEncryptionKeyValuePtrOutput { return o.ApplyT(func(v ConnectionAuthConfigAdditionalVariable) *ConnectionAuthConfigAdditionalVariableEncryptionKeyValue { @@ -2717,7 +2717,7 @@ func (o ConnectionAuthConfigUserPasswordPasswordPtrOutput) SecretVersion() pulum type ConnectionConfigVariable struct { // Boolean Value of configVariable BooleanValue *bool `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue *ConnectionConfigVariableEncryptionKeyValue `pulumi:"encryptionKeyValue"` // Integer Value of configVariable @@ -2745,7 +2745,7 @@ type ConnectionConfigVariableInput interface { type ConnectionConfigVariableArgs struct { // Boolean Value of configVariable BooleanValue pulumi.BoolPtrInput `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue ConnectionConfigVariableEncryptionKeyValuePtrInput `pulumi:"encryptionKeyValue"` // Integer Value of configVariable @@ -2815,7 +2815,7 @@ func (o ConnectionConfigVariableOutput) BooleanValue() pulumi.BoolPtrOutput { return o.ApplyT(func(v ConnectionConfigVariable) *bool { return v.BooleanValue }).(pulumi.BoolPtrOutput) } -// Encription key value of configVariable. +// Encryption key value of configVariable. // Structure is documented below. func (o ConnectionConfigVariableOutput) EncryptionKeyValue() ConnectionConfigVariableEncryptionKeyValuePtrOutput { return o.ApplyT(func(v ConnectionConfigVariable) *ConnectionConfigVariableEncryptionKeyValue { @@ -3706,7 +3706,7 @@ func (o ConnectionEventingConfigPtrOutput) RegistrationDestinationConfig() Conne type ConnectionEventingConfigAdditionalVariable struct { // Boolean Value of configVariable. BooleanValue *bool `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue *ConnectionEventingConfigAdditionalVariableEncryptionKeyValue `pulumi:"encryptionKeyValue"` // Integer Value of configVariable. @@ -3734,7 +3734,7 @@ type ConnectionEventingConfigAdditionalVariableInput interface { type ConnectionEventingConfigAdditionalVariableArgs struct { // Boolean Value of configVariable. BooleanValue pulumi.BoolPtrInput `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue ConnectionEventingConfigAdditionalVariableEncryptionKeyValuePtrInput `pulumi:"encryptionKeyValue"` // Integer Value of configVariable. @@ -3804,7 +3804,7 @@ func (o ConnectionEventingConfigAdditionalVariableOutput) BooleanValue() pulumi. return o.ApplyT(func(v ConnectionEventingConfigAdditionalVariable) *bool { return v.BooleanValue }).(pulumi.BoolPtrOutput) } -// Encription key value of configVariable. +// Encryption key value of configVariable. // Structure is documented below. func (o ConnectionEventingConfigAdditionalVariableOutput) EncryptionKeyValue() ConnectionEventingConfigAdditionalVariableEncryptionKeyValuePtrOutput { return o.ApplyT(func(v ConnectionEventingConfigAdditionalVariable) *ConnectionEventingConfigAdditionalVariableEncryptionKeyValue { @@ -4373,7 +4373,7 @@ func (o ConnectionEventingConfigAuthConfigPtrOutput) UserPassword() ConnectionEv type ConnectionEventingConfigAuthConfigAdditionalVariable struct { // Boolean Value of configVariable. BooleanValue *bool `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue *ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValue `pulumi:"encryptionKeyValue"` // Integer Value of configVariable. @@ -4401,7 +4401,7 @@ type ConnectionEventingConfigAuthConfigAdditionalVariableInput interface { type ConnectionEventingConfigAuthConfigAdditionalVariableArgs struct { // Boolean Value of configVariable. BooleanValue pulumi.BoolPtrInput `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValuePtrInput `pulumi:"encryptionKeyValue"` // Integer Value of configVariable. @@ -4471,7 +4471,7 @@ func (o ConnectionEventingConfigAuthConfigAdditionalVariableOutput) BooleanValue return o.ApplyT(func(v ConnectionEventingConfigAuthConfigAdditionalVariable) *bool { return v.BooleanValue }).(pulumi.BoolPtrOutput) } -// Encription key value of configVariable. +// Encryption key value of configVariable. // Structure is documented below. func (o ConnectionEventingConfigAuthConfigAdditionalVariableOutput) EncryptionKeyValue() ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValuePtrOutput { return o.ApplyT(func(v ConnectionEventingConfigAuthConfigAdditionalVariable) *ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValue { @@ -6430,7 +6430,7 @@ func (o ConnectionSslConfigPtrOutput) UseSsl() pulumi.BoolPtrOutput { type ConnectionSslConfigAdditionalVariable struct { // Boolean Value of configVariable. BooleanValue *bool `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue *ConnectionSslConfigAdditionalVariableEncryptionKeyValue `pulumi:"encryptionKeyValue"` // Integer Value of configVariable. @@ -6458,7 +6458,7 @@ type ConnectionSslConfigAdditionalVariableInput interface { type ConnectionSslConfigAdditionalVariableArgs struct { // Boolean Value of configVariable. BooleanValue pulumi.BoolPtrInput `pulumi:"booleanValue"` - // Encription key value of configVariable. + // Encryption key value of configVariable. // Structure is documented below. EncryptionKeyValue ConnectionSslConfigAdditionalVariableEncryptionKeyValuePtrInput `pulumi:"encryptionKeyValue"` // Integer Value of configVariable. @@ -6528,7 +6528,7 @@ func (o ConnectionSslConfigAdditionalVariableOutput) BooleanValue() pulumi.BoolP return o.ApplyT(func(v ConnectionSslConfigAdditionalVariable) *bool { return v.BooleanValue }).(pulumi.BoolPtrOutput) } -// Encription key value of configVariable. +// Encryption key value of configVariable. // Structure is documented below. func (o ConnectionSslConfigAdditionalVariableOutput) EncryptionKeyValue() ConnectionSslConfigAdditionalVariableEncryptionKeyValuePtrOutput { return o.ApplyT(func(v ConnectionSslConfigAdditionalVariable) *ConnectionSslConfigAdditionalVariableEncryptionKeyValue { diff --git a/sdk/go/gcp/monitoring/pulumiTypes.go b/sdk/go/gcp/monitoring/pulumiTypes.go index b2a5344c57..6803621420 100644 --- a/sdk/go/gcp/monitoring/pulumiTypes.go +++ b/sdk/go/gcp/monitoring/pulumiTypes.go @@ -2192,9 +2192,8 @@ type AlertPolicyConditionConditionPrometheusQueryLanguage struct { // in the future. // This field is optional. If this field is not empty, then it must be a // valid Prometheus label name. - // - // *** - AlertRule *string `pulumi:"alertRule"` + AlertRule *string `pulumi:"alertRule"` + DisableMetricValidation *bool `pulumi:"disableMetricValidation"` // Alerts are considered firing once their PromQL expression evaluated // to be "true" for this long. Alerts whose PromQL expression was not // evaluated to be "true" for long enough are considered pending. The @@ -2248,9 +2247,8 @@ type AlertPolicyConditionConditionPrometheusQueryLanguageArgs struct { // in the future. // This field is optional. If this field is not empty, then it must be a // valid Prometheus label name. - // - // *** - AlertRule pulumi.StringPtrInput `pulumi:"alertRule"` + AlertRule pulumi.StringPtrInput `pulumi:"alertRule"` + DisableMetricValidation pulumi.BoolPtrInput `pulumi:"disableMetricValidation"` // Alerts are considered firing once their PromQL expression evaluated // to be "true" for this long. Alerts whose PromQL expression was not // evaluated to be "true" for long enough are considered pending. The @@ -2369,12 +2367,14 @@ func (o AlertPolicyConditionConditionPrometheusQueryLanguageOutput) ToAlertPolic // in the future. // This field is optional. If this field is not empty, then it must be a // valid Prometheus label name. -// -// *** func (o AlertPolicyConditionConditionPrometheusQueryLanguageOutput) AlertRule() pulumi.StringPtrOutput { return o.ApplyT(func(v AlertPolicyConditionConditionPrometheusQueryLanguage) *string { return v.AlertRule }).(pulumi.StringPtrOutput) } +func (o AlertPolicyConditionConditionPrometheusQueryLanguageOutput) DisableMetricValidation() pulumi.BoolPtrOutput { + return o.ApplyT(func(v AlertPolicyConditionConditionPrometheusQueryLanguage) *bool { return v.DisableMetricValidation }).(pulumi.BoolPtrOutput) +} + // Alerts are considered firing once their PromQL expression evaluated // to be "true" for this long. Alerts whose PromQL expression was not // evaluated to be "true" for long enough are considered pending. The @@ -2453,8 +2453,6 @@ func (o AlertPolicyConditionConditionPrometheusQueryLanguagePtrOutput) Elem() Al // in the future. // This field is optional. If this field is not empty, then it must be a // valid Prometheus label name. -// -// *** func (o AlertPolicyConditionConditionPrometheusQueryLanguagePtrOutput) AlertRule() pulumi.StringPtrOutput { return o.ApplyT(func(v *AlertPolicyConditionConditionPrometheusQueryLanguage) *string { if v == nil { @@ -2464,6 +2462,15 @@ func (o AlertPolicyConditionConditionPrometheusQueryLanguagePtrOutput) AlertRule }).(pulumi.StringPtrOutput) } +func (o AlertPolicyConditionConditionPrometheusQueryLanguagePtrOutput) DisableMetricValidation() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *AlertPolicyConditionConditionPrometheusQueryLanguage) *bool { + if v == nil { + return nil + } + return v.DisableMetricValidation + }).(pulumi.BoolPtrOutput) +} + // Alerts are considered firing once their PromQL expression evaluated // to be "true" for this long. Alerts whose PromQL expression was not // evaluated to be "true" for long enough are considered pending. The diff --git a/sdk/go/gcp/netapp/activeDirectory.go b/sdk/go/gcp/netapp/activeDirectory.go index 7e995a8b31..a0d9c4f404 100644 --- a/sdk/go/gcp/netapp/activeDirectory.go +++ b/sdk/go/gcp/netapp/activeDirectory.go @@ -122,7 +122,7 @@ type ActiveDirectory struct { EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` // If enabled, traffic between the SMB server to Domain Controller (DC) will be encrypted. EncryptDcConnections pulumi.BoolPtrOutput `pulumi:"encryptDcConnections"` - // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 KdcHostname pulumi.StringPtrOutput `pulumi:"kdcHostname"` // IP address of the Active Directory server used as Kerberos Key Distribution Center. KdcIp pulumi.StringPtrOutput `pulumi:"kdcIp"` @@ -244,7 +244,7 @@ type activeDirectoryState struct { EffectiveLabels map[string]string `pulumi:"effectiveLabels"` // If enabled, traffic between the SMB server to Domain Controller (DC) will be encrypted. EncryptDcConnections *bool `pulumi:"encryptDcConnections"` - // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 KdcHostname *string `pulumi:"kdcHostname"` // IP address of the Active Directory server used as Kerberos Key Distribution Center. KdcIp *string `pulumi:"kdcIp"` @@ -310,7 +310,7 @@ type ActiveDirectoryState struct { EffectiveLabels pulumi.StringMapInput // If enabled, traffic between the SMB server to Domain Controller (DC) will be encrypted. EncryptDcConnections pulumi.BoolPtrInput - // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 KdcHostname pulumi.StringPtrInput // IP address of the Active Directory server used as Kerberos Key Distribution Center. KdcIp pulumi.StringPtrInput @@ -376,7 +376,7 @@ type activeDirectoryArgs struct { Domain string `pulumi:"domain"` // If enabled, traffic between the SMB server to Domain Controller (DC) will be encrypted. EncryptDcConnections *bool `pulumi:"encryptDcConnections"` - // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 KdcHostname *string `pulumi:"kdcHostname"` // IP address of the Active Directory server used as Kerberos Key Distribution Center. KdcIp *string `pulumi:"kdcIp"` @@ -432,7 +432,7 @@ type ActiveDirectoryArgs struct { Domain pulumi.StringInput // If enabled, traffic between the SMB server to Domain Controller (DC) will be encrypted. EncryptDcConnections pulumi.BoolPtrInput - // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + // Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 KdcHostname pulumi.StringPtrInput // IP address of the Active Directory server used as Kerberos Key Distribution Center. KdcIp pulumi.StringPtrInput @@ -604,7 +604,7 @@ func (o ActiveDirectoryOutput) EncryptDcConnections() pulumi.BoolPtrOutput { return o.ApplyT(func(v *ActiveDirectory) pulumi.BoolPtrOutput { return v.EncryptDcConnections }).(pulumi.BoolPtrOutput) } -// Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 +// Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 func (o ActiveDirectoryOutput) KdcHostname() pulumi.StringPtrOutput { return o.ApplyT(func(v *ActiveDirectory) pulumi.StringPtrOutput { return v.KdcHostname }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/netapp/pulumiTypes.go b/sdk/go/gcp/netapp/pulumiTypes.go index c2ac124f35..8a4baceed6 100644 --- a/sdk/go/gcp/netapp/pulumiTypes.go +++ b/sdk/go/gcp/netapp/pulumiTypes.go @@ -337,7 +337,7 @@ type VolumeExportPolicyRule struct { // Defines the access type for clients matching the `allowedClients` specification. // Possible values are: `READ_ONLY`, `READ_WRITE`, `READ_NONE`. AccessType *string `pulumi:"accessType"` - // Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + // Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. AllowedClients *string `pulumi:"allowedClients"` // If enabled, the root user (UID = 0) of the specified clients doesn't get mapped to nobody (UID = 65534). This is also known as no_root_squash. HasRootAccess *string `pulumi:"hasRootAccess"` @@ -374,7 +374,7 @@ type VolumeExportPolicyRuleArgs struct { // Defines the access type for clients matching the `allowedClients` specification. // Possible values are: `READ_ONLY`, `READ_WRITE`, `READ_NONE`. AccessType pulumi.StringPtrInput `pulumi:"accessType"` - // Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + // Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. AllowedClients pulumi.StringPtrInput `pulumi:"allowedClients"` // If enabled, the root user (UID = 0) of the specified clients doesn't get mapped to nobody (UID = 65534). This is also known as no_root_squash. HasRootAccess pulumi.StringPtrInput `pulumi:"hasRootAccess"` @@ -453,7 +453,7 @@ func (o VolumeExportPolicyRuleOutput) AccessType() pulumi.StringPtrOutput { return o.ApplyT(func(v VolumeExportPolicyRule) *string { return v.AccessType }).(pulumi.StringPtrOutput) } -// Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. +// Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. func (o VolumeExportPolicyRuleOutput) AllowedClients() pulumi.StringPtrOutput { return o.ApplyT(func(v VolumeExportPolicyRule) *string { return v.AllowedClients }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/netapp/volume.go b/sdk/go/gcp/netapp/volume.go index 6b44a4d881..9a7aa40930 100644 --- a/sdk/go/gcp/netapp/volume.go +++ b/sdk/go/gcp/netapp/volume.go @@ -181,7 +181,7 @@ type Volume struct { // Use NTFS to use NTFS ACLs for file permissions. Can only be set for volumes which use SMB together with NFS as protocol. // Possible values are: `NTFS`, `UNIX`. SecurityStyle pulumi.StringOutput `pulumi:"securityStyle"` - // Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + // Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. ServiceLevel pulumi.StringOutput `pulumi:"serviceLevel"` // Share name (SMB) or export path (NFS) of the volume. Needs to be unique per location. ShareName pulumi.StringOutput `pulumi:"shareName"` @@ -198,7 +198,7 @@ type Volume struct { State pulumi.StringOutput `pulumi:"state"` // State details of the volume. StateDetails pulumi.StringOutput `pulumi:"stateDetails"` - // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. StoragePool pulumi.StringOutput `pulumi:"storagePool"` // Tiering policy for the volume. // Structure is documented below. @@ -338,7 +338,7 @@ type volumeState struct { // Use NTFS to use NTFS ACLs for file permissions. Can only be set for volumes which use SMB together with NFS as protocol. // Possible values are: `NTFS`, `UNIX`. SecurityStyle *string `pulumi:"securityStyle"` - // Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + // Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. ServiceLevel *string `pulumi:"serviceLevel"` // Share name (SMB) or export path (NFS) of the volume. Needs to be unique per location. ShareName *string `pulumi:"shareName"` @@ -355,7 +355,7 @@ type volumeState struct { State *string `pulumi:"state"` // State details of the volume. StateDetails *string `pulumi:"stateDetails"` - // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. StoragePool *string `pulumi:"storagePool"` // Tiering policy for the volume. // Structure is documented below. @@ -446,7 +446,7 @@ type VolumeState struct { // Use NTFS to use NTFS ACLs for file permissions. Can only be set for volumes which use SMB together with NFS as protocol. // Possible values are: `NTFS`, `UNIX`. SecurityStyle pulumi.StringPtrInput - // Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + // Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. ServiceLevel pulumi.StringPtrInput // Share name (SMB) or export path (NFS) of the volume. Needs to be unique per location. ShareName pulumi.StringPtrInput @@ -463,7 +463,7 @@ type VolumeState struct { State pulumi.StringPtrInput // State details of the volume. StateDetails pulumi.StringPtrInput - // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. StoragePool pulumi.StringPtrInput // Tiering policy for the volume. // Structure is documented below. @@ -541,7 +541,7 @@ type volumeArgs struct { // To disable automatic snapshot creation you have to remove the whole snapshotPolicy block. // Structure is documented below. SnapshotPolicy *VolumeSnapshotPolicy `pulumi:"snapshotPolicy"` - // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. StoragePool string `pulumi:"storagePool"` // Tiering policy for the volume. // Structure is documented below. @@ -612,7 +612,7 @@ type VolumeArgs struct { // To disable automatic snapshot creation you have to remove the whole snapshotPolicy block. // Structure is documented below. SnapshotPolicy VolumeSnapshotPolicyPtrInput - // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + // Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. StoragePool pulumi.StringInput // Tiering policy for the volume. // Structure is documented below. @@ -872,7 +872,7 @@ func (o VolumeOutput) SecurityStyle() pulumi.StringOutput { return o.ApplyT(func(v *Volume) pulumi.StringOutput { return v.SecurityStyle }).(pulumi.StringOutput) } -// Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. +// Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. func (o VolumeOutput) ServiceLevel() pulumi.StringOutput { return o.ApplyT(func(v *Volume) pulumi.StringOutput { return v.ServiceLevel }).(pulumi.StringOutput) } @@ -910,7 +910,7 @@ func (o VolumeOutput) StateDetails() pulumi.StringOutput { return o.ApplyT(func(v *Volume) pulumi.StringOutput { return v.StateDetails }).(pulumi.StringOutput) } -// Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. +// Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. func (o VolumeOutput) StoragePool() pulumi.StringOutput { return o.ApplyT(func(v *Volume) pulumi.StringOutput { return v.StoragePool }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/networkconnectivity/spoke.go b/sdk/go/gcp/networkconnectivity/spoke.go index baf29051a8..7eb7bfa4e3 100644 --- a/sdk/go/gcp/networkconnectivity/spoke.go +++ b/sdk/go/gcp/networkconnectivity/spoke.go @@ -98,14 +98,14 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{ -// Name: pulumi.String("tf-test-network_75413"), +// Name: pulumi.String("tf-test-network_55138"), // AutoCreateSubnetworks: pulumi.Bool(false), // }) // if err != nil { // return err // } // subnetwork, err := compute.NewSubnetwork(ctx, "subnetwork", &compute.SubnetworkArgs{ -// Name: pulumi.String("tf-test-subnet_55138"), +// Name: pulumi.String("tf-test-subnet_37559"), // IpCidrRange: pulumi.String("10.0.0.0/28"), // Region: pulumi.String("us-central1"), // Network: network.SelfLink, @@ -114,7 +114,7 @@ import ( // return err // } // instance, err := compute.NewInstance(ctx, "instance", &compute.InstanceArgs{ -// Name: pulumi.String("tf-test-instance_37559"), +// Name: pulumi.String("tf-test-instance_91980"), // MachineType: pulumi.String("e2-medium"), // CanIpForward: pulumi.Bool(true), // Zone: pulumi.String("us-central1-a"), @@ -139,7 +139,7 @@ import ( // return err // } // basicHub, err := networkconnectivity.NewHub(ctx, "basic_hub", &networkconnectivity.HubArgs{ -// Name: pulumi.String("tf-test-hub_91980"), +// Name: pulumi.String("tf-test-hub_37118"), // Description: pulumi.String("A sample hub"), // Labels: pulumi.StringMap{ // "label-two": pulumi.String("value-one"), @@ -149,7 +149,7 @@ import ( // return err // } // _, err = networkconnectivity.NewSpoke(ctx, "primary", &networkconnectivity.SpokeArgs{ -// Name: pulumi.String("tf-test-name_37118"), +// Name: pulumi.String("tf-test-name_80332"), // Location: pulumi.String("us-central1"), // Description: pulumi.String("A sample spoke with a linked routher appliance instance"), // Labels: pulumi.StringMap{ diff --git a/sdk/go/gcp/networksecurity/init.go b/sdk/go/gcp/networksecurity/init.go index f0f87a736f..73f7c861fd 100644 --- a/sdk/go/gcp/networksecurity/init.go +++ b/sdk/go/gcp/networksecurity/init.go @@ -41,6 +41,14 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &GatewaySecurityPolicy{} case "gcp:networksecurity/gatewaySecurityPolicyRule:GatewaySecurityPolicyRule": r = &GatewaySecurityPolicyRule{} + case "gcp:networksecurity/mirroringDeployment:MirroringDeployment": + r = &MirroringDeployment{} + case "gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup": + r = &MirroringDeploymentGroup{} + case "gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup": + r = &MirroringEndpointGroup{} + case "gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation": + r = &MirroringEndpointGroupAssociation{} case "gcp:networksecurity/securityProfile:SecurityProfile": r = &SecurityProfile{} case "gcp:networksecurity/securityProfileGroup:SecurityProfileGroup": @@ -114,6 +122,26 @@ func init() { "networksecurity/gatewaySecurityPolicyRule", &module{version}, ) + pulumi.RegisterResourceModule( + "gcp", + "networksecurity/mirroringDeployment", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "networksecurity/mirroringDeploymentGroup", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "networksecurity/mirroringEndpointGroup", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "networksecurity/mirroringEndpointGroupAssociation", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "networksecurity/securityProfile", diff --git a/sdk/go/gcp/networksecurity/mirroringDeployment.go b/sdk/go/gcp/networksecurity/mirroringDeployment.go new file mode 100644 index 0000000000..37f7bbcab5 --- /dev/null +++ b/sdk/go/gcp/networksecurity/mirroringDeployment.go @@ -0,0 +1,598 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package networksecurity + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Network Security Mirroring Deployment Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{ +// Name: pulumi.String("example-network"), +// AutoCreateSubnetworks: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// subnetwork, err := compute.NewSubnetwork(ctx, "subnetwork", &compute.SubnetworkArgs{ +// Name: pulumi.String("example-subnet"), +// Region: pulumi.String("us-central1"), +// IpCidrRange: pulumi.String("10.1.0.0/16"), +// Network: network.Name, +// }) +// if err != nil { +// return err +// } +// healthCheck, err := compute.NewRegionHealthCheck(ctx, "health_check", &compute.RegionHealthCheckArgs{ +// Name: pulumi.String("example-hc"), +// Region: pulumi.String("us-central1"), +// HttpHealthCheck: &compute.RegionHealthCheckHttpHealthCheckArgs{ +// Port: pulumi.Int(80), +// }, +// }) +// if err != nil { +// return err +// } +// backendService, err := compute.NewRegionBackendService(ctx, "backend_service", &compute.RegionBackendServiceArgs{ +// Name: pulumi.String("example-bs"), +// Region: pulumi.String("us-central1"), +// HealthChecks: healthCheck.ID(), +// Protocol: pulumi.String("UDP"), +// LoadBalancingScheme: pulumi.String("INTERNAL"), +// }) +// if err != nil { +// return err +// } +// forwardingRule, err := compute.NewForwardingRule(ctx, "forwarding_rule", &compute.ForwardingRuleArgs{ +// Name: pulumi.String("example-fwr"), +// Region: pulumi.String("us-central1"), +// Network: network.Name, +// Subnetwork: subnetwork.Name, +// BackendService: backendService.ID(), +// LoadBalancingScheme: pulumi.String("INTERNAL"), +// Ports: pulumi.StringArray{ +// pulumi.String("6081"), +// }, +// IpProtocol: pulumi.String("UDP"), +// IsMirroringCollector: pulumi.Bool(true), +// }) +// if err != nil { +// return err +// } +// deploymentGroup, err := networksecurity.NewMirroringDeploymentGroup(ctx, "deployment_group", &networksecurity.MirroringDeploymentGroupArgs{ +// MirroringDeploymentGroupId: pulumi.String("example-dg"), +// Location: pulumi.String("global"), +// Network: network.ID(), +// }) +// if err != nil { +// return err +// } +// _, err = networksecurity.NewMirroringDeployment(ctx, "default", &networksecurity.MirroringDeploymentArgs{ +// MirroringDeploymentId: pulumi.String("example-deployment"), +// Location: pulumi.String("us-central1-a"), +// ForwardingRule: forwardingRule.ID(), +// MirroringDeploymentGroup: deploymentGroup.ID(), +// Labels: pulumi.StringMap{ +// "foo": pulumi.String("bar"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// MirroringDeployment can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}}` +// +// * `{{project}}/{{location}}/{{mirroring_deployment_id}}` +// +// * `{{location}}/{{mirroring_deployment_id}}` +// +// When using the `pulumi import` command, MirroringDeployment can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{project}}/{{location}}/{{mirroring_deployment_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{location}}/{{mirroring_deployment_id}} +// ``` +type MirroringDeployment struct { + pulumi.CustomResourceState + + // Output only. [Output only] Create time stamp + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + // to. Format is: + // projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + ForwardingRule pulumi.StringOutput `pulumi:"forwardingRule"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // 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`. + Location pulumi.StringOutput `pulumi:"location"` + // Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup pulumi.StringOutput `pulumi:"mirroringDeploymentGroup"` + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentId pulumi.StringOutput `pulumi:"mirroringDeploymentId"` + // Immutable. Identifier. The name of the MirroringDeployment. + Name pulumi.StringOutput `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling pulumi.BoolOutput `pulumi:"reconciling"` + // Output only. Current state of the deployment. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // CREATING + // DELETING + // OUT_OF_SYNC + // DELETE_FAILED + State pulumi.StringOutput `pulumi:"state"` + // Output only. [Output only] Update time stamp + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewMirroringDeployment registers a new resource with the given unique name, arguments, and options. +func NewMirroringDeployment(ctx *pulumi.Context, + name string, args *MirroringDeploymentArgs, opts ...pulumi.ResourceOption) (*MirroringDeployment, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ForwardingRule == nil { + return nil, errors.New("invalid value for required argument 'ForwardingRule'") + } + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.MirroringDeploymentGroup == nil { + return nil, errors.New("invalid value for required argument 'MirroringDeploymentGroup'") + } + if args.MirroringDeploymentId == nil { + return nil, errors.New("invalid value for required argument 'MirroringDeploymentId'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource MirroringDeployment + err := ctx.RegisterResource("gcp:networksecurity/mirroringDeployment:MirroringDeployment", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetMirroringDeployment gets an existing MirroringDeployment resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetMirroringDeployment(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *MirroringDeploymentState, opts ...pulumi.ResourceOption) (*MirroringDeployment, error) { + var resource MirroringDeployment + err := ctx.ReadResource("gcp:networksecurity/mirroringDeployment:MirroringDeployment", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering MirroringDeployment resources. +type mirroringDeploymentState struct { + // Output only. [Output only] Create time stamp + CreateTime *string `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + // to. Format is: + // projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + ForwardingRule *string `pulumi:"forwardingRule"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // 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`. + Location *string `pulumi:"location"` + // Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup *string `pulumi:"mirroringDeploymentGroup"` + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentId *string `pulumi:"mirroringDeploymentId"` + // Immutable. Identifier. The name of the MirroringDeployment. + Name *string `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling *bool `pulumi:"reconciling"` + // Output only. Current state of the deployment. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // CREATING + // DELETING + // OUT_OF_SYNC + // DELETE_FAILED + State *string `pulumi:"state"` + // Output only. [Output only] Update time stamp + UpdateTime *string `pulumi:"updateTime"` +} + +type MirroringDeploymentState struct { + // Output only. [Output only] Create time stamp + CreateTime pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + // to. Format is: + // projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + ForwardingRule pulumi.StringPtrInput + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // 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`. + Location pulumi.StringPtrInput + // Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup pulumi.StringPtrInput + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentId pulumi.StringPtrInput + // Immutable. Identifier. The name of the MirroringDeployment. + Name pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling pulumi.BoolPtrInput + // Output only. Current state of the deployment. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // CREATING + // DELETING + // OUT_OF_SYNC + // DELETE_FAILED + State pulumi.StringPtrInput + // Output only. [Output only] Update time stamp + UpdateTime pulumi.StringPtrInput +} + +func (MirroringDeploymentState) ElementType() reflect.Type { + return reflect.TypeOf((*mirroringDeploymentState)(nil)).Elem() +} + +type mirroringDeploymentArgs struct { + // Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + // to. Format is: + // projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + ForwardingRule string `pulumi:"forwardingRule"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // 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`. + Location string `pulumi:"location"` + // Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup string `pulumi:"mirroringDeploymentGroup"` + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentId string `pulumi:"mirroringDeploymentId"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a MirroringDeployment resource. +type MirroringDeploymentArgs struct { + // Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + // to. Format is: + // projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + ForwardingRule pulumi.StringInput + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // 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`. + Location pulumi.StringInput + // Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup pulumi.StringInput + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentId pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput +} + +func (MirroringDeploymentArgs) ElementType() reflect.Type { + return reflect.TypeOf((*mirroringDeploymentArgs)(nil)).Elem() +} + +type MirroringDeploymentInput interface { + pulumi.Input + + ToMirroringDeploymentOutput() MirroringDeploymentOutput + ToMirroringDeploymentOutputWithContext(ctx context.Context) MirroringDeploymentOutput +} + +func (*MirroringDeployment) ElementType() reflect.Type { + return reflect.TypeOf((**MirroringDeployment)(nil)).Elem() +} + +func (i *MirroringDeployment) ToMirroringDeploymentOutput() MirroringDeploymentOutput { + return i.ToMirroringDeploymentOutputWithContext(context.Background()) +} + +func (i *MirroringDeployment) ToMirroringDeploymentOutputWithContext(ctx context.Context) MirroringDeploymentOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringDeploymentOutput) +} + +// MirroringDeploymentArrayInput is an input type that accepts MirroringDeploymentArray and MirroringDeploymentArrayOutput values. +// You can construct a concrete instance of `MirroringDeploymentArrayInput` via: +// +// MirroringDeploymentArray{ MirroringDeploymentArgs{...} } +type MirroringDeploymentArrayInput interface { + pulumi.Input + + ToMirroringDeploymentArrayOutput() MirroringDeploymentArrayOutput + ToMirroringDeploymentArrayOutputWithContext(context.Context) MirroringDeploymentArrayOutput +} + +type MirroringDeploymentArray []MirroringDeploymentInput + +func (MirroringDeploymentArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MirroringDeployment)(nil)).Elem() +} + +func (i MirroringDeploymentArray) ToMirroringDeploymentArrayOutput() MirroringDeploymentArrayOutput { + return i.ToMirroringDeploymentArrayOutputWithContext(context.Background()) +} + +func (i MirroringDeploymentArray) ToMirroringDeploymentArrayOutputWithContext(ctx context.Context) MirroringDeploymentArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringDeploymentArrayOutput) +} + +// MirroringDeploymentMapInput is an input type that accepts MirroringDeploymentMap and MirroringDeploymentMapOutput values. +// You can construct a concrete instance of `MirroringDeploymentMapInput` via: +// +// MirroringDeploymentMap{ "key": MirroringDeploymentArgs{...} } +type MirroringDeploymentMapInput interface { + pulumi.Input + + ToMirroringDeploymentMapOutput() MirroringDeploymentMapOutput + ToMirroringDeploymentMapOutputWithContext(context.Context) MirroringDeploymentMapOutput +} + +type MirroringDeploymentMap map[string]MirroringDeploymentInput + +func (MirroringDeploymentMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MirroringDeployment)(nil)).Elem() +} + +func (i MirroringDeploymentMap) ToMirroringDeploymentMapOutput() MirroringDeploymentMapOutput { + return i.ToMirroringDeploymentMapOutputWithContext(context.Background()) +} + +func (i MirroringDeploymentMap) ToMirroringDeploymentMapOutputWithContext(ctx context.Context) MirroringDeploymentMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringDeploymentMapOutput) +} + +type MirroringDeploymentOutput struct{ *pulumi.OutputState } + +func (MirroringDeploymentOutput) ElementType() reflect.Type { + return reflect.TypeOf((**MirroringDeployment)(nil)).Elem() +} + +func (o MirroringDeploymentOutput) ToMirroringDeploymentOutput() MirroringDeploymentOutput { + return o +} + +func (o MirroringDeploymentOutput) ToMirroringDeploymentOutputWithContext(ctx context.Context) MirroringDeploymentOutput { + return o +} + +// Output only. [Output only] Create time stamp +func (o MirroringDeploymentOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o MirroringDeploymentOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded +// to. Format is: +// projects/{project}/regions/{region}/forwardingRules/{forwardingRule} +func (o MirroringDeploymentOutput) ForwardingRule() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringOutput { return v.ForwardingRule }).(pulumi.StringOutput) +} + +// 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 `effectiveLabels` for all of the labels present on the resource. +func (o MirroringDeploymentOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// 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`. +func (o MirroringDeploymentOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: +// `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` +func (o MirroringDeploymentOutput) MirroringDeploymentGroup() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringOutput { return v.MirroringDeploymentGroup }).(pulumi.StringOutput) +} + +// Required. Id of the requesting object +// If auto-generating Id server-side, remove this field and +// mirroringDeploymentId from the methodSignature of Create RPC +// +// *** +func (o MirroringDeploymentOutput) MirroringDeploymentId() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringOutput { return v.MirroringDeploymentId }).(pulumi.StringOutput) +} + +// Immutable. Identifier. The name of the MirroringDeployment. +func (o MirroringDeploymentOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o MirroringDeploymentOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o MirroringDeploymentOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// Output only. Whether reconciling is in progress, recommended per +// https://google.aip.dev/128. +func (o MirroringDeploymentOutput) Reconciling() pulumi.BoolOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.BoolOutput { return v.Reconciling }).(pulumi.BoolOutput) +} + +// Output only. Current state of the deployment. +// Possible values: +// STATE_UNSPECIFIED +// ACTIVE +// CREATING +// DELETING +// OUT_OF_SYNC +// DELETE_FAILED +func (o MirroringDeploymentOutput) State() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringOutput { return v.State }).(pulumi.StringOutput) +} + +// Output only. [Output only] Update time stamp +func (o MirroringDeploymentOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeployment) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type MirroringDeploymentArrayOutput struct{ *pulumi.OutputState } + +func (MirroringDeploymentArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MirroringDeployment)(nil)).Elem() +} + +func (o MirroringDeploymentArrayOutput) ToMirroringDeploymentArrayOutput() MirroringDeploymentArrayOutput { + return o +} + +func (o MirroringDeploymentArrayOutput) ToMirroringDeploymentArrayOutputWithContext(ctx context.Context) MirroringDeploymentArrayOutput { + return o +} + +func (o MirroringDeploymentArrayOutput) Index(i pulumi.IntInput) MirroringDeploymentOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *MirroringDeployment { + return vs[0].([]*MirroringDeployment)[vs[1].(int)] + }).(MirroringDeploymentOutput) +} + +type MirroringDeploymentMapOutput struct{ *pulumi.OutputState } + +func (MirroringDeploymentMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MirroringDeployment)(nil)).Elem() +} + +func (o MirroringDeploymentMapOutput) ToMirroringDeploymentMapOutput() MirroringDeploymentMapOutput { + return o +} + +func (o MirroringDeploymentMapOutput) ToMirroringDeploymentMapOutputWithContext(ctx context.Context) MirroringDeploymentMapOutput { + return o +} + +func (o MirroringDeploymentMapOutput) MapIndex(k pulumi.StringInput) MirroringDeploymentOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *MirroringDeployment { + return vs[0].(map[string]*MirroringDeployment)[vs[1].(string)] + }).(MirroringDeploymentOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*MirroringDeploymentInput)(nil)).Elem(), &MirroringDeployment{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringDeploymentArrayInput)(nil)).Elem(), MirroringDeploymentArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringDeploymentMapInput)(nil)).Elem(), MirroringDeploymentMap{}) + pulumi.RegisterOutputType(MirroringDeploymentOutput{}) + pulumi.RegisterOutputType(MirroringDeploymentArrayOutput{}) + pulumi.RegisterOutputType(MirroringDeploymentMapOutput{}) +} diff --git a/sdk/go/gcp/networksecurity/mirroringDeploymentGroup.go b/sdk/go/gcp/networksecurity/mirroringDeploymentGroup.go new file mode 100644 index 0000000000..2522fc9c7b --- /dev/null +++ b/sdk/go/gcp/networksecurity/mirroringDeploymentGroup.go @@ -0,0 +1,527 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package networksecurity + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Network Security Mirroring Deployment Group Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{ +// Name: pulumi.String("example-network"), +// AutoCreateSubnetworks: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// _, err = networksecurity.NewMirroringDeploymentGroup(ctx, "default", &networksecurity.MirroringDeploymentGroupArgs{ +// MirroringDeploymentGroupId: pulumi.String("example-dg"), +// Location: pulumi.String("global"), +// Network: network.ID(), +// Labels: pulumi.StringMap{ +// "foo": pulumi.String("bar"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// MirroringDeploymentGroup can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}}` +// +// * `{{project}}/{{location}}/{{mirroring_deployment_group_id}}` +// +// * `{{location}}/{{mirroring_deployment_group_id}}` +// +// When using the `pulumi import` command, MirroringDeploymentGroup can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{project}}/{{location}}/{{mirroring_deployment_group_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{location}}/{{mirroring_deployment_group_id}} +// ``` +type MirroringDeploymentGroup struct { + pulumi.CustomResourceState + + // Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + // Structure is documented below. + ConnectedEndpointGroups MirroringDeploymentGroupConnectedEndpointGroupArrayOutput `pulumi:"connectedEndpointGroups"` + // Output only. [Output only] Create time stamp + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // 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`. + Location pulumi.StringOutput `pulumi:"location"` + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentGroupId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentGroupId pulumi.StringOutput `pulumi:"mirroringDeploymentGroupId"` + // (Output) + // Output only. A connected mirroring endpoint group. + Name pulumi.StringOutput `pulumi:"name"` + // Required. Immutable. The network that is being used for the deployment. Format is: + // projects/{project}/global/networks/{network}. + Network pulumi.StringOutput `pulumi:"network"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling pulumi.BoolOutput `pulumi:"reconciling"` + // Output only. Current state of the deployment group. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // CREATING + // DELETING + State pulumi.StringOutput `pulumi:"state"` + // Output only. [Output only] Update time stamp + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewMirroringDeploymentGroup registers a new resource with the given unique name, arguments, and options. +func NewMirroringDeploymentGroup(ctx *pulumi.Context, + name string, args *MirroringDeploymentGroupArgs, opts ...pulumi.ResourceOption) (*MirroringDeploymentGroup, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.MirroringDeploymentGroupId == nil { + return nil, errors.New("invalid value for required argument 'MirroringDeploymentGroupId'") + } + if args.Network == nil { + return nil, errors.New("invalid value for required argument 'Network'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource MirroringDeploymentGroup + err := ctx.RegisterResource("gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetMirroringDeploymentGroup gets an existing MirroringDeploymentGroup resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetMirroringDeploymentGroup(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *MirroringDeploymentGroupState, opts ...pulumi.ResourceOption) (*MirroringDeploymentGroup, error) { + var resource MirroringDeploymentGroup + err := ctx.ReadResource("gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering MirroringDeploymentGroup resources. +type mirroringDeploymentGroupState struct { + // Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + // Structure is documented below. + ConnectedEndpointGroups []MirroringDeploymentGroupConnectedEndpointGroup `pulumi:"connectedEndpointGroups"` + // Output only. [Output only] Create time stamp + CreateTime *string `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // 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`. + Location *string `pulumi:"location"` + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentGroupId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentGroupId *string `pulumi:"mirroringDeploymentGroupId"` + // (Output) + // Output only. A connected mirroring endpoint group. + Name *string `pulumi:"name"` + // Required. Immutable. The network that is being used for the deployment. Format is: + // projects/{project}/global/networks/{network}. + Network *string `pulumi:"network"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling *bool `pulumi:"reconciling"` + // Output only. Current state of the deployment group. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // CREATING + // DELETING + State *string `pulumi:"state"` + // Output only. [Output only] Update time stamp + UpdateTime *string `pulumi:"updateTime"` +} + +type MirroringDeploymentGroupState struct { + // Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + // Structure is documented below. + ConnectedEndpointGroups MirroringDeploymentGroupConnectedEndpointGroupArrayInput + // Output only. [Output only] Create time stamp + CreateTime pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // 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`. + Location pulumi.StringPtrInput + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentGroupId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentGroupId pulumi.StringPtrInput + // (Output) + // Output only. A connected mirroring endpoint group. + Name pulumi.StringPtrInput + // Required. Immutable. The network that is being used for the deployment. Format is: + // projects/{project}/global/networks/{network}. + Network pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling pulumi.BoolPtrInput + // Output only. Current state of the deployment group. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // CREATING + // DELETING + State pulumi.StringPtrInput + // Output only. [Output only] Update time stamp + UpdateTime pulumi.StringPtrInput +} + +func (MirroringDeploymentGroupState) ElementType() reflect.Type { + return reflect.TypeOf((*mirroringDeploymentGroupState)(nil)).Elem() +} + +type mirroringDeploymentGroupArgs struct { + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // 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`. + Location string `pulumi:"location"` + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentGroupId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentGroupId string `pulumi:"mirroringDeploymentGroupId"` + // Required. Immutable. The network that is being used for the deployment. Format is: + // projects/{project}/global/networks/{network}. + Network string `pulumi:"network"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a MirroringDeploymentGroup resource. +type MirroringDeploymentGroupArgs struct { + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // 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`. + Location pulumi.StringInput + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringDeploymentGroupId from the methodSignature of Create RPC + // + // *** + MirroringDeploymentGroupId pulumi.StringInput + // Required. Immutable. The network that is being used for the deployment. Format is: + // projects/{project}/global/networks/{network}. + Network pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput +} + +func (MirroringDeploymentGroupArgs) ElementType() reflect.Type { + return reflect.TypeOf((*mirroringDeploymentGroupArgs)(nil)).Elem() +} + +type MirroringDeploymentGroupInput interface { + pulumi.Input + + ToMirroringDeploymentGroupOutput() MirroringDeploymentGroupOutput + ToMirroringDeploymentGroupOutputWithContext(ctx context.Context) MirroringDeploymentGroupOutput +} + +func (*MirroringDeploymentGroup) ElementType() reflect.Type { + return reflect.TypeOf((**MirroringDeploymentGroup)(nil)).Elem() +} + +func (i *MirroringDeploymentGroup) ToMirroringDeploymentGroupOutput() MirroringDeploymentGroupOutput { + return i.ToMirroringDeploymentGroupOutputWithContext(context.Background()) +} + +func (i *MirroringDeploymentGroup) ToMirroringDeploymentGroupOutputWithContext(ctx context.Context) MirroringDeploymentGroupOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringDeploymentGroupOutput) +} + +// MirroringDeploymentGroupArrayInput is an input type that accepts MirroringDeploymentGroupArray and MirroringDeploymentGroupArrayOutput values. +// You can construct a concrete instance of `MirroringDeploymentGroupArrayInput` via: +// +// MirroringDeploymentGroupArray{ MirroringDeploymentGroupArgs{...} } +type MirroringDeploymentGroupArrayInput interface { + pulumi.Input + + ToMirroringDeploymentGroupArrayOutput() MirroringDeploymentGroupArrayOutput + ToMirroringDeploymentGroupArrayOutputWithContext(context.Context) MirroringDeploymentGroupArrayOutput +} + +type MirroringDeploymentGroupArray []MirroringDeploymentGroupInput + +func (MirroringDeploymentGroupArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MirroringDeploymentGroup)(nil)).Elem() +} + +func (i MirroringDeploymentGroupArray) ToMirroringDeploymentGroupArrayOutput() MirroringDeploymentGroupArrayOutput { + return i.ToMirroringDeploymentGroupArrayOutputWithContext(context.Background()) +} + +func (i MirroringDeploymentGroupArray) ToMirroringDeploymentGroupArrayOutputWithContext(ctx context.Context) MirroringDeploymentGroupArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringDeploymentGroupArrayOutput) +} + +// MirroringDeploymentGroupMapInput is an input type that accepts MirroringDeploymentGroupMap and MirroringDeploymentGroupMapOutput values. +// You can construct a concrete instance of `MirroringDeploymentGroupMapInput` via: +// +// MirroringDeploymentGroupMap{ "key": MirroringDeploymentGroupArgs{...} } +type MirroringDeploymentGroupMapInput interface { + pulumi.Input + + ToMirroringDeploymentGroupMapOutput() MirroringDeploymentGroupMapOutput + ToMirroringDeploymentGroupMapOutputWithContext(context.Context) MirroringDeploymentGroupMapOutput +} + +type MirroringDeploymentGroupMap map[string]MirroringDeploymentGroupInput + +func (MirroringDeploymentGroupMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MirroringDeploymentGroup)(nil)).Elem() +} + +func (i MirroringDeploymentGroupMap) ToMirroringDeploymentGroupMapOutput() MirroringDeploymentGroupMapOutput { + return i.ToMirroringDeploymentGroupMapOutputWithContext(context.Background()) +} + +func (i MirroringDeploymentGroupMap) ToMirroringDeploymentGroupMapOutputWithContext(ctx context.Context) MirroringDeploymentGroupMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringDeploymentGroupMapOutput) +} + +type MirroringDeploymentGroupOutput struct{ *pulumi.OutputState } + +func (MirroringDeploymentGroupOutput) ElementType() reflect.Type { + return reflect.TypeOf((**MirroringDeploymentGroup)(nil)).Elem() +} + +func (o MirroringDeploymentGroupOutput) ToMirroringDeploymentGroupOutput() MirroringDeploymentGroupOutput { + return o +} + +func (o MirroringDeploymentGroupOutput) ToMirroringDeploymentGroupOutputWithContext(ctx context.Context) MirroringDeploymentGroupOutput { + return o +} + +// Output only. The list of Mirroring Endpoint Groups that are connected to this resource. +// Structure is documented below. +func (o MirroringDeploymentGroupOutput) ConnectedEndpointGroups() MirroringDeploymentGroupConnectedEndpointGroupArrayOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) MirroringDeploymentGroupConnectedEndpointGroupArrayOutput { + return v.ConnectedEndpointGroups + }).(MirroringDeploymentGroupConnectedEndpointGroupArrayOutput) +} + +// Output only. [Output only] Create time stamp +func (o MirroringDeploymentGroupOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o MirroringDeploymentGroupOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// 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 `effectiveLabels` for all of the labels present on the resource. +func (o MirroringDeploymentGroupOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// 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`. +func (o MirroringDeploymentGroupOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Required. Id of the requesting object +// If auto-generating Id server-side, remove this field and +// mirroringDeploymentGroupId from the methodSignature of Create RPC +// +// *** +func (o MirroringDeploymentGroupOutput) MirroringDeploymentGroupId() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringOutput { return v.MirroringDeploymentGroupId }).(pulumi.StringOutput) +} + +// (Output) +// Output only. A connected mirroring endpoint group. +func (o MirroringDeploymentGroupOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Required. Immutable. The network that is being used for the deployment. Format is: +// projects/{project}/global/networks/{network}. +func (o MirroringDeploymentGroupOutput) Network() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringOutput { return v.Network }).(pulumi.StringOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o MirroringDeploymentGroupOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o MirroringDeploymentGroupOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// Output only. Whether reconciling is in progress, recommended per +// https://google.aip.dev/128. +func (o MirroringDeploymentGroupOutput) Reconciling() pulumi.BoolOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.BoolOutput { return v.Reconciling }).(pulumi.BoolOutput) +} + +// Output only. Current state of the deployment group. +// Possible values: +// STATE_UNSPECIFIED +// ACTIVE +// CREATING +// DELETING +func (o MirroringDeploymentGroupOutput) State() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringOutput { return v.State }).(pulumi.StringOutput) +} + +// Output only. [Output only] Update time stamp +func (o MirroringDeploymentGroupOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringDeploymentGroup) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type MirroringDeploymentGroupArrayOutput struct{ *pulumi.OutputState } + +func (MirroringDeploymentGroupArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MirroringDeploymentGroup)(nil)).Elem() +} + +func (o MirroringDeploymentGroupArrayOutput) ToMirroringDeploymentGroupArrayOutput() MirroringDeploymentGroupArrayOutput { + return o +} + +func (o MirroringDeploymentGroupArrayOutput) ToMirroringDeploymentGroupArrayOutputWithContext(ctx context.Context) MirroringDeploymentGroupArrayOutput { + return o +} + +func (o MirroringDeploymentGroupArrayOutput) Index(i pulumi.IntInput) MirroringDeploymentGroupOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *MirroringDeploymentGroup { + return vs[0].([]*MirroringDeploymentGroup)[vs[1].(int)] + }).(MirroringDeploymentGroupOutput) +} + +type MirroringDeploymentGroupMapOutput struct{ *pulumi.OutputState } + +func (MirroringDeploymentGroupMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MirroringDeploymentGroup)(nil)).Elem() +} + +func (o MirroringDeploymentGroupMapOutput) ToMirroringDeploymentGroupMapOutput() MirroringDeploymentGroupMapOutput { + return o +} + +func (o MirroringDeploymentGroupMapOutput) ToMirroringDeploymentGroupMapOutputWithContext(ctx context.Context) MirroringDeploymentGroupMapOutput { + return o +} + +func (o MirroringDeploymentGroupMapOutput) MapIndex(k pulumi.StringInput) MirroringDeploymentGroupOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *MirroringDeploymentGroup { + return vs[0].(map[string]*MirroringDeploymentGroup)[vs[1].(string)] + }).(MirroringDeploymentGroupOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*MirroringDeploymentGroupInput)(nil)).Elem(), &MirroringDeploymentGroup{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringDeploymentGroupArrayInput)(nil)).Elem(), MirroringDeploymentGroupArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringDeploymentGroupMapInput)(nil)).Elem(), MirroringDeploymentGroupMap{}) + pulumi.RegisterOutputType(MirroringDeploymentGroupOutput{}) + pulumi.RegisterOutputType(MirroringDeploymentGroupArrayOutput{}) + pulumi.RegisterOutputType(MirroringDeploymentGroupMapOutput{}) +} diff --git a/sdk/go/gcp/networksecurity/mirroringEndpointGroup.go b/sdk/go/gcp/networksecurity/mirroringEndpointGroup.go new file mode 100644 index 0000000000..948a35dbf3 --- /dev/null +++ b/sdk/go/gcp/networksecurity/mirroringEndpointGroup.go @@ -0,0 +1,528 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package networksecurity + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Network Security Mirroring Endpoint Group Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{ +// Name: pulumi.String("example-network"), +// AutoCreateSubnetworks: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// deploymentGroup, err := networksecurity.NewMirroringDeploymentGroup(ctx, "deployment_group", &networksecurity.MirroringDeploymentGroupArgs{ +// MirroringDeploymentGroupId: pulumi.String("example-dg"), +// Location: pulumi.String("global"), +// Network: network.ID(), +// }) +// if err != nil { +// return err +// } +// _, err = networksecurity.NewMirroringEndpointGroup(ctx, "default", &networksecurity.MirroringEndpointGroupArgs{ +// MirroringEndpointGroupId: pulumi.String("example-eg"), +// Location: pulumi.String("global"), +// MirroringDeploymentGroup: deploymentGroup.ID(), +// Labels: pulumi.StringMap{ +// "foo": pulumi.String("bar"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// MirroringEndpointGroup can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}}` +// +// * `{{project}}/{{location}}/{{mirroring_endpoint_group_id}}` +// +// * `{{location}}/{{mirroring_endpoint_group_id}}` +// +// When using the `pulumi import` command, MirroringEndpointGroup can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{project}}/{{location}}/{{mirroring_endpoint_group_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{location}}/{{mirroring_endpoint_group_id}} +// ``` +type MirroringEndpointGroup struct { + pulumi.CustomResourceState + + // Output only. [Output only] Create time stamp + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // 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`. + Location pulumi.StringOutput `pulumi:"location"` + // Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup pulumi.StringOutput `pulumi:"mirroringDeploymentGroup"` + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupId from the methodSignature of Create RPC + // + // *** + MirroringEndpointGroupId pulumi.StringOutput `pulumi:"mirroringEndpointGroupId"` + // Immutable. Identifier. The name of the MirroringEndpointGroup. + Name pulumi.StringOutput `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling pulumi.BoolOutput `pulumi:"reconciling"` + // Output only. Current state of the endpoint group. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // CLOSED + // CREATING + // DELETING + // OUT_OF_SYNC + State pulumi.StringOutput `pulumi:"state"` + // Output only. [Output only] Update time stamp + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewMirroringEndpointGroup registers a new resource with the given unique name, arguments, and options. +func NewMirroringEndpointGroup(ctx *pulumi.Context, + name string, args *MirroringEndpointGroupArgs, opts ...pulumi.ResourceOption) (*MirroringEndpointGroup, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.MirroringDeploymentGroup == nil { + return nil, errors.New("invalid value for required argument 'MirroringDeploymentGroup'") + } + if args.MirroringEndpointGroupId == nil { + return nil, errors.New("invalid value for required argument 'MirroringEndpointGroupId'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource MirroringEndpointGroup + err := ctx.RegisterResource("gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetMirroringEndpointGroup gets an existing MirroringEndpointGroup resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetMirroringEndpointGroup(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *MirroringEndpointGroupState, opts ...pulumi.ResourceOption) (*MirroringEndpointGroup, error) { + var resource MirroringEndpointGroup + err := ctx.ReadResource("gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering MirroringEndpointGroup resources. +type mirroringEndpointGroupState struct { + // Output only. [Output only] Create time stamp + CreateTime *string `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // 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`. + Location *string `pulumi:"location"` + // Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup *string `pulumi:"mirroringDeploymentGroup"` + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupId from the methodSignature of Create RPC + // + // *** + MirroringEndpointGroupId *string `pulumi:"mirroringEndpointGroupId"` + // Immutable. Identifier. The name of the MirroringEndpointGroup. + Name *string `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling *bool `pulumi:"reconciling"` + // Output only. Current state of the endpoint group. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // CLOSED + // CREATING + // DELETING + // OUT_OF_SYNC + State *string `pulumi:"state"` + // Output only. [Output only] Update time stamp + UpdateTime *string `pulumi:"updateTime"` +} + +type MirroringEndpointGroupState struct { + // Output only. [Output only] Create time stamp + CreateTime pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // 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`. + Location pulumi.StringPtrInput + // Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup pulumi.StringPtrInput + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupId from the methodSignature of Create RPC + // + // *** + MirroringEndpointGroupId pulumi.StringPtrInput + // Immutable. Identifier. The name of the MirroringEndpointGroup. + Name pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling pulumi.BoolPtrInput + // Output only. Current state of the endpoint group. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // CLOSED + // CREATING + // DELETING + // OUT_OF_SYNC + State pulumi.StringPtrInput + // Output only. [Output only] Update time stamp + UpdateTime pulumi.StringPtrInput +} + +func (MirroringEndpointGroupState) ElementType() reflect.Type { + return reflect.TypeOf((*mirroringEndpointGroupState)(nil)).Elem() +} + +type mirroringEndpointGroupArgs struct { + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // 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`. + Location string `pulumi:"location"` + // Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup string `pulumi:"mirroringDeploymentGroup"` + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupId from the methodSignature of Create RPC + // + // *** + MirroringEndpointGroupId string `pulumi:"mirroringEndpointGroupId"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a MirroringEndpointGroup resource. +type MirroringEndpointGroupArgs struct { + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // 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`. + Location pulumi.StringInput + // Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + MirroringDeploymentGroup pulumi.StringInput + // Required. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupId from the methodSignature of Create RPC + // + // *** + MirroringEndpointGroupId pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput +} + +func (MirroringEndpointGroupArgs) ElementType() reflect.Type { + return reflect.TypeOf((*mirroringEndpointGroupArgs)(nil)).Elem() +} + +type MirroringEndpointGroupInput interface { + pulumi.Input + + ToMirroringEndpointGroupOutput() MirroringEndpointGroupOutput + ToMirroringEndpointGroupOutputWithContext(ctx context.Context) MirroringEndpointGroupOutput +} + +func (*MirroringEndpointGroup) ElementType() reflect.Type { + return reflect.TypeOf((**MirroringEndpointGroup)(nil)).Elem() +} + +func (i *MirroringEndpointGroup) ToMirroringEndpointGroupOutput() MirroringEndpointGroupOutput { + return i.ToMirroringEndpointGroupOutputWithContext(context.Background()) +} + +func (i *MirroringEndpointGroup) ToMirroringEndpointGroupOutputWithContext(ctx context.Context) MirroringEndpointGroupOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringEndpointGroupOutput) +} + +// MirroringEndpointGroupArrayInput is an input type that accepts MirroringEndpointGroupArray and MirroringEndpointGroupArrayOutput values. +// You can construct a concrete instance of `MirroringEndpointGroupArrayInput` via: +// +// MirroringEndpointGroupArray{ MirroringEndpointGroupArgs{...} } +type MirroringEndpointGroupArrayInput interface { + pulumi.Input + + ToMirroringEndpointGroupArrayOutput() MirroringEndpointGroupArrayOutput + ToMirroringEndpointGroupArrayOutputWithContext(context.Context) MirroringEndpointGroupArrayOutput +} + +type MirroringEndpointGroupArray []MirroringEndpointGroupInput + +func (MirroringEndpointGroupArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MirroringEndpointGroup)(nil)).Elem() +} + +func (i MirroringEndpointGroupArray) ToMirroringEndpointGroupArrayOutput() MirroringEndpointGroupArrayOutput { + return i.ToMirroringEndpointGroupArrayOutputWithContext(context.Background()) +} + +func (i MirroringEndpointGroupArray) ToMirroringEndpointGroupArrayOutputWithContext(ctx context.Context) MirroringEndpointGroupArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringEndpointGroupArrayOutput) +} + +// MirroringEndpointGroupMapInput is an input type that accepts MirroringEndpointGroupMap and MirroringEndpointGroupMapOutput values. +// You can construct a concrete instance of `MirroringEndpointGroupMapInput` via: +// +// MirroringEndpointGroupMap{ "key": MirroringEndpointGroupArgs{...} } +type MirroringEndpointGroupMapInput interface { + pulumi.Input + + ToMirroringEndpointGroupMapOutput() MirroringEndpointGroupMapOutput + ToMirroringEndpointGroupMapOutputWithContext(context.Context) MirroringEndpointGroupMapOutput +} + +type MirroringEndpointGroupMap map[string]MirroringEndpointGroupInput + +func (MirroringEndpointGroupMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MirroringEndpointGroup)(nil)).Elem() +} + +func (i MirroringEndpointGroupMap) ToMirroringEndpointGroupMapOutput() MirroringEndpointGroupMapOutput { + return i.ToMirroringEndpointGroupMapOutputWithContext(context.Background()) +} + +func (i MirroringEndpointGroupMap) ToMirroringEndpointGroupMapOutputWithContext(ctx context.Context) MirroringEndpointGroupMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringEndpointGroupMapOutput) +} + +type MirroringEndpointGroupOutput struct{ *pulumi.OutputState } + +func (MirroringEndpointGroupOutput) ElementType() reflect.Type { + return reflect.TypeOf((**MirroringEndpointGroup)(nil)).Elem() +} + +func (o MirroringEndpointGroupOutput) ToMirroringEndpointGroupOutput() MirroringEndpointGroupOutput { + return o +} + +func (o MirroringEndpointGroupOutput) ToMirroringEndpointGroupOutputWithContext(ctx context.Context) MirroringEndpointGroupOutput { + return o +} + +// Output only. [Output only] Create time stamp +func (o MirroringEndpointGroupOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o MirroringEndpointGroupOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// 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 `effectiveLabels` for all of the labels present on the resource. +func (o MirroringEndpointGroupOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// 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`. +func (o MirroringEndpointGroupOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format +// is: +// `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` +func (o MirroringEndpointGroupOutput) MirroringDeploymentGroup() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringOutput { return v.MirroringDeploymentGroup }).(pulumi.StringOutput) +} + +// Required. Id of the requesting object +// If auto-generating Id server-side, remove this field and +// mirroringEndpointGroupId from the methodSignature of Create RPC +// +// *** +func (o MirroringEndpointGroupOutput) MirroringEndpointGroupId() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringOutput { return v.MirroringEndpointGroupId }).(pulumi.StringOutput) +} + +// Immutable. Identifier. The name of the MirroringEndpointGroup. +func (o MirroringEndpointGroupOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o MirroringEndpointGroupOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o MirroringEndpointGroupOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// Output only. Whether reconciling is in progress, recommended per +// https://google.aip.dev/128. +func (o MirroringEndpointGroupOutput) Reconciling() pulumi.BoolOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.BoolOutput { return v.Reconciling }).(pulumi.BoolOutput) +} + +// Output only. Current state of the endpoint group. +// Possible values: +// STATE_UNSPECIFIED +// ACTIVE +// CLOSED +// CREATING +// DELETING +// OUT_OF_SYNC +func (o MirroringEndpointGroupOutput) State() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringOutput { return v.State }).(pulumi.StringOutput) +} + +// Output only. [Output only] Update time stamp +func (o MirroringEndpointGroupOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroup) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type MirroringEndpointGroupArrayOutput struct{ *pulumi.OutputState } + +func (MirroringEndpointGroupArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MirroringEndpointGroup)(nil)).Elem() +} + +func (o MirroringEndpointGroupArrayOutput) ToMirroringEndpointGroupArrayOutput() MirroringEndpointGroupArrayOutput { + return o +} + +func (o MirroringEndpointGroupArrayOutput) ToMirroringEndpointGroupArrayOutputWithContext(ctx context.Context) MirroringEndpointGroupArrayOutput { + return o +} + +func (o MirroringEndpointGroupArrayOutput) Index(i pulumi.IntInput) MirroringEndpointGroupOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *MirroringEndpointGroup { + return vs[0].([]*MirroringEndpointGroup)[vs[1].(int)] + }).(MirroringEndpointGroupOutput) +} + +type MirroringEndpointGroupMapOutput struct{ *pulumi.OutputState } + +func (MirroringEndpointGroupMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MirroringEndpointGroup)(nil)).Elem() +} + +func (o MirroringEndpointGroupMapOutput) ToMirroringEndpointGroupMapOutput() MirroringEndpointGroupMapOutput { + return o +} + +func (o MirroringEndpointGroupMapOutput) ToMirroringEndpointGroupMapOutputWithContext(ctx context.Context) MirroringEndpointGroupMapOutput { + return o +} + +func (o MirroringEndpointGroupMapOutput) MapIndex(k pulumi.StringInput) MirroringEndpointGroupOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *MirroringEndpointGroup { + return vs[0].(map[string]*MirroringEndpointGroup)[vs[1].(string)] + }).(MirroringEndpointGroupOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*MirroringEndpointGroupInput)(nil)).Elem(), &MirroringEndpointGroup{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringEndpointGroupArrayInput)(nil)).Elem(), MirroringEndpointGroupArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringEndpointGroupMapInput)(nil)).Elem(), MirroringEndpointGroupMap{}) + pulumi.RegisterOutputType(MirroringEndpointGroupOutput{}) + pulumi.RegisterOutputType(MirroringEndpointGroupArrayOutput{}) + pulumi.RegisterOutputType(MirroringEndpointGroupMapOutput{}) +} diff --git a/sdk/go/gcp/networksecurity/mirroringEndpointGroupAssociation.go b/sdk/go/gcp/networksecurity/mirroringEndpointGroupAssociation.go new file mode 100644 index 0000000000..24f5a0da3f --- /dev/null +++ b/sdk/go/gcp/networksecurity/mirroringEndpointGroupAssociation.go @@ -0,0 +1,582 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package networksecurity + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Network Security Mirroring Endpoint Group Association Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// producerNetwork, err := compute.NewNetwork(ctx, "producer_network", &compute.NetworkArgs{ +// Name: pulumi.String("example-prod-network"), +// AutoCreateSubnetworks: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// consumerNetwork, err := compute.NewNetwork(ctx, "consumer_network", &compute.NetworkArgs{ +// Name: pulumi.String("example-cons-network"), +// AutoCreateSubnetworks: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// deploymentGroup, err := networksecurity.NewMirroringDeploymentGroup(ctx, "deployment_group", &networksecurity.MirroringDeploymentGroupArgs{ +// MirroringDeploymentGroupId: pulumi.String("example-dg"), +// Location: pulumi.String("global"), +// Network: producerNetwork.ID(), +// }) +// if err != nil { +// return err +// } +// endpointGroup, err := networksecurity.NewMirroringEndpointGroup(ctx, "endpoint_group", &networksecurity.MirroringEndpointGroupArgs{ +// MirroringEndpointGroupId: pulumi.String("example-eg"), +// Location: pulumi.String("global"), +// MirroringDeploymentGroup: deploymentGroup.ID(), +// }) +// if err != nil { +// return err +// } +// _, err = networksecurity.NewMirroringEndpointGroupAssociation(ctx, "default", &networksecurity.MirroringEndpointGroupAssociationArgs{ +// MirroringEndpointGroupAssociationId: pulumi.String("example-ega"), +// Location: pulumi.String("global"), +// Network: consumerNetwork.ID(), +// MirroringEndpointGroup: endpointGroup.ID(), +// Labels: pulumi.StringMap{ +// "foo": pulumi.String("bar"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// MirroringEndpointGroupAssociation can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}}` +// +// * `{{project}}/{{location}}/{{mirroring_endpoint_group_association_id}}` +// +// * `{{location}}/{{mirroring_endpoint_group_association_id}}` +// +// When using the `pulumi import` command, MirroringEndpointGroupAssociation can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{project}}/{{location}}/{{mirroring_endpoint_group_association_id}} +// ``` +// +// ```sh +// $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{location}}/{{mirroring_endpoint_group_association_id}} +// ``` +type MirroringEndpointGroupAssociation struct { + pulumi.CustomResourceState + + // Output only. [Output only] Create time stamp + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapOutput `pulumi:"effectiveLabels"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // 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`. + // + // *** + Location pulumi.StringOutput `pulumi:"location"` + // Output only. The list of locations that this association is in and its details. + // Structure is documented below. + LocationsDetails MirroringEndpointGroupAssociationLocationsDetailArrayOutput `pulumi:"locationsDetails"` + // Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + MirroringEndpointGroup pulumi.StringOutput `pulumi:"mirroringEndpointGroup"` + // Optional. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupAssociationId from the methodSignature of Create + // RPC + MirroringEndpointGroupAssociationId pulumi.StringPtrOutput `pulumi:"mirroringEndpointGroupAssociationId"` + // Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + Name pulumi.StringOutput `pulumi:"name"` + // Required. Immutable. The VPC network associated. Format: + // projects/{project}/global/networks/{network}. + Network pulumi.StringOutput `pulumi:"network"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapOutput `pulumi:"pulumiLabels"` + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling pulumi.BoolOutput `pulumi:"reconciling"` + // (Output) + // Output only. The association state in this location. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // OUT_OF_SYNC + State pulumi.StringOutput `pulumi:"state"` + // Output only. [Output only] Update time stamp + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewMirroringEndpointGroupAssociation registers a new resource with the given unique name, arguments, and options. +func NewMirroringEndpointGroupAssociation(ctx *pulumi.Context, + name string, args *MirroringEndpointGroupAssociationArgs, opts ...pulumi.ResourceOption) (*MirroringEndpointGroupAssociation, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Location == nil { + return nil, errors.New("invalid value for required argument 'Location'") + } + if args.MirroringEndpointGroup == nil { + return nil, errors.New("invalid value for required argument 'MirroringEndpointGroup'") + } + if args.Network == nil { + return nil, errors.New("invalid value for required argument 'Network'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "effectiveLabels", + "pulumiLabels", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource MirroringEndpointGroupAssociation + err := ctx.RegisterResource("gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetMirroringEndpointGroupAssociation gets an existing MirroringEndpointGroupAssociation resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetMirroringEndpointGroupAssociation(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *MirroringEndpointGroupAssociationState, opts ...pulumi.ResourceOption) (*MirroringEndpointGroupAssociation, error) { + var resource MirroringEndpointGroupAssociation + err := ctx.ReadResource("gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering MirroringEndpointGroupAssociation resources. +type mirroringEndpointGroupAssociationState struct { + // Output only. [Output only] Create time stamp + CreateTime *string `pulumi:"createTime"` + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels map[string]string `pulumi:"effectiveLabels"` + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // 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`. + // + // *** + Location *string `pulumi:"location"` + // Output only. The list of locations that this association is in and its details. + // Structure is documented below. + LocationsDetails []MirroringEndpointGroupAssociationLocationsDetail `pulumi:"locationsDetails"` + // Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + MirroringEndpointGroup *string `pulumi:"mirroringEndpointGroup"` + // Optional. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupAssociationId from the methodSignature of Create + // RPC + MirroringEndpointGroupAssociationId *string `pulumi:"mirroringEndpointGroupAssociationId"` + // Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + Name *string `pulumi:"name"` + // Required. Immutable. The VPC network associated. Format: + // projects/{project}/global/networks/{network}. + Network *string `pulumi:"network"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels map[string]string `pulumi:"pulumiLabels"` + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling *bool `pulumi:"reconciling"` + // (Output) + // Output only. The association state in this location. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // OUT_OF_SYNC + State *string `pulumi:"state"` + // Output only. [Output only] Update time stamp + UpdateTime *string `pulumi:"updateTime"` +} + +type MirroringEndpointGroupAssociationState struct { + // Output only. [Output only] Create time stamp + CreateTime pulumi.StringPtrInput + // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + EffectiveLabels pulumi.StringMapInput + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // 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`. + // + // *** + Location pulumi.StringPtrInput + // Output only. The list of locations that this association is in and its details. + // Structure is documented below. + LocationsDetails MirroringEndpointGroupAssociationLocationsDetailArrayInput + // Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + MirroringEndpointGroup pulumi.StringPtrInput + // Optional. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupAssociationId from the methodSignature of Create + // RPC + MirroringEndpointGroupAssociationId pulumi.StringPtrInput + // Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + Name pulumi.StringPtrInput + // Required. Immutable. The VPC network associated. Format: + // projects/{project}/global/networks/{network}. + Network pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // The combination of labels configured directly on the resource + // and default labels configured on the provider. + PulumiLabels pulumi.StringMapInput + // Output only. Whether reconciling is in progress, recommended per + // https://google.aip.dev/128. + Reconciling pulumi.BoolPtrInput + // (Output) + // Output only. The association state in this location. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // OUT_OF_SYNC + State pulumi.StringPtrInput + // Output only. [Output only] Update time stamp + UpdateTime pulumi.StringPtrInput +} + +func (MirroringEndpointGroupAssociationState) ElementType() reflect.Type { + return reflect.TypeOf((*mirroringEndpointGroupAssociationState)(nil)).Elem() +} + +type mirroringEndpointGroupAssociationArgs struct { + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels map[string]string `pulumi:"labels"` + // 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`. + // + // *** + Location string `pulumi:"location"` + // Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + MirroringEndpointGroup string `pulumi:"mirroringEndpointGroup"` + // Optional. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupAssociationId from the methodSignature of Create + // RPC + MirroringEndpointGroupAssociationId *string `pulumi:"mirroringEndpointGroupAssociationId"` + // Required. Immutable. The VPC network associated. Format: + // projects/{project}/global/networks/{network}. + Network string `pulumi:"network"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a MirroringEndpointGroupAssociation resource. +type MirroringEndpointGroupAssociationArgs struct { + // 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 `effectiveLabels` for all of the labels present on the resource. + Labels pulumi.StringMapInput + // 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`. + // + // *** + Location pulumi.StringInput + // Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + // is: + // `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + MirroringEndpointGroup pulumi.StringInput + // Optional. Id of the requesting object + // If auto-generating Id server-side, remove this field and + // mirroringEndpointGroupAssociationId from the methodSignature of Create + // RPC + MirroringEndpointGroupAssociationId pulumi.StringPtrInput + // Required. Immutable. The VPC network associated. Format: + // projects/{project}/global/networks/{network}. + Network pulumi.StringInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput +} + +func (MirroringEndpointGroupAssociationArgs) ElementType() reflect.Type { + return reflect.TypeOf((*mirroringEndpointGroupAssociationArgs)(nil)).Elem() +} + +type MirroringEndpointGroupAssociationInput interface { + pulumi.Input + + ToMirroringEndpointGroupAssociationOutput() MirroringEndpointGroupAssociationOutput + ToMirroringEndpointGroupAssociationOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationOutput +} + +func (*MirroringEndpointGroupAssociation) ElementType() reflect.Type { + return reflect.TypeOf((**MirroringEndpointGroupAssociation)(nil)).Elem() +} + +func (i *MirroringEndpointGroupAssociation) ToMirroringEndpointGroupAssociationOutput() MirroringEndpointGroupAssociationOutput { + return i.ToMirroringEndpointGroupAssociationOutputWithContext(context.Background()) +} + +func (i *MirroringEndpointGroupAssociation) ToMirroringEndpointGroupAssociationOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringEndpointGroupAssociationOutput) +} + +// MirroringEndpointGroupAssociationArrayInput is an input type that accepts MirroringEndpointGroupAssociationArray and MirroringEndpointGroupAssociationArrayOutput values. +// You can construct a concrete instance of `MirroringEndpointGroupAssociationArrayInput` via: +// +// MirroringEndpointGroupAssociationArray{ MirroringEndpointGroupAssociationArgs{...} } +type MirroringEndpointGroupAssociationArrayInput interface { + pulumi.Input + + ToMirroringEndpointGroupAssociationArrayOutput() MirroringEndpointGroupAssociationArrayOutput + ToMirroringEndpointGroupAssociationArrayOutputWithContext(context.Context) MirroringEndpointGroupAssociationArrayOutput +} + +type MirroringEndpointGroupAssociationArray []MirroringEndpointGroupAssociationInput + +func (MirroringEndpointGroupAssociationArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MirroringEndpointGroupAssociation)(nil)).Elem() +} + +func (i MirroringEndpointGroupAssociationArray) ToMirroringEndpointGroupAssociationArrayOutput() MirroringEndpointGroupAssociationArrayOutput { + return i.ToMirroringEndpointGroupAssociationArrayOutputWithContext(context.Background()) +} + +func (i MirroringEndpointGroupAssociationArray) ToMirroringEndpointGroupAssociationArrayOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringEndpointGroupAssociationArrayOutput) +} + +// MirroringEndpointGroupAssociationMapInput is an input type that accepts MirroringEndpointGroupAssociationMap and MirroringEndpointGroupAssociationMapOutput values. +// You can construct a concrete instance of `MirroringEndpointGroupAssociationMapInput` via: +// +// MirroringEndpointGroupAssociationMap{ "key": MirroringEndpointGroupAssociationArgs{...} } +type MirroringEndpointGroupAssociationMapInput interface { + pulumi.Input + + ToMirroringEndpointGroupAssociationMapOutput() MirroringEndpointGroupAssociationMapOutput + ToMirroringEndpointGroupAssociationMapOutputWithContext(context.Context) MirroringEndpointGroupAssociationMapOutput +} + +type MirroringEndpointGroupAssociationMap map[string]MirroringEndpointGroupAssociationInput + +func (MirroringEndpointGroupAssociationMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MirroringEndpointGroupAssociation)(nil)).Elem() +} + +func (i MirroringEndpointGroupAssociationMap) ToMirroringEndpointGroupAssociationMapOutput() MirroringEndpointGroupAssociationMapOutput { + return i.ToMirroringEndpointGroupAssociationMapOutputWithContext(context.Background()) +} + +func (i MirroringEndpointGroupAssociationMap) ToMirroringEndpointGroupAssociationMapOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringEndpointGroupAssociationMapOutput) +} + +type MirroringEndpointGroupAssociationOutput struct{ *pulumi.OutputState } + +func (MirroringEndpointGroupAssociationOutput) ElementType() reflect.Type { + return reflect.TypeOf((**MirroringEndpointGroupAssociation)(nil)).Elem() +} + +func (o MirroringEndpointGroupAssociationOutput) ToMirroringEndpointGroupAssociationOutput() MirroringEndpointGroupAssociationOutput { + return o +} + +func (o MirroringEndpointGroupAssociationOutput) ToMirroringEndpointGroupAssociationOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationOutput { + return o +} + +// Output only. [Output only] Create time stamp +func (o MirroringEndpointGroupAssociationOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. +func (o MirroringEndpointGroupAssociationOutput) EffectiveLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringMapOutput { return v.EffectiveLabels }).(pulumi.StringMapOutput) +} + +// 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 `effectiveLabels` for all of the labels present on the resource. +func (o MirroringEndpointGroupAssociationOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// 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`. +// +// *** +func (o MirroringEndpointGroupAssociationOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Output only. The list of locations that this association is in and its details. +// Structure is documented below. +func (o MirroringEndpointGroupAssociationOutput) LocationsDetails() MirroringEndpointGroupAssociationLocationsDetailArrayOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) MirroringEndpointGroupAssociationLocationsDetailArrayOutput { + return v.LocationsDetails + }).(MirroringEndpointGroupAssociationLocationsDetailArrayOutput) +} + +// Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format +// is: +// `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` +func (o MirroringEndpointGroupAssociationOutput) MirroringEndpointGroup() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringOutput { return v.MirroringEndpointGroup }).(pulumi.StringOutput) +} + +// Optional. Id of the requesting object +// If auto-generating Id server-side, remove this field and +// mirroringEndpointGroupAssociationId from the methodSignature of Create +// RPC +func (o MirroringEndpointGroupAssociationOutput) MirroringEndpointGroupAssociationId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringPtrOutput { + return v.MirroringEndpointGroupAssociationId + }).(pulumi.StringPtrOutput) +} + +// Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. +func (o MirroringEndpointGroupAssociationOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Required. Immutable. The VPC network associated. Format: +// projects/{project}/global/networks/{network}. +func (o MirroringEndpointGroupAssociationOutput) Network() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringOutput { return v.Network }).(pulumi.StringOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o MirroringEndpointGroupAssociationOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// The combination of labels configured directly on the resource +// and default labels configured on the provider. +func (o MirroringEndpointGroupAssociationOutput) PulumiLabels() pulumi.StringMapOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringMapOutput { return v.PulumiLabels }).(pulumi.StringMapOutput) +} + +// Output only. Whether reconciling is in progress, recommended per +// https://google.aip.dev/128. +func (o MirroringEndpointGroupAssociationOutput) Reconciling() pulumi.BoolOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.BoolOutput { return v.Reconciling }).(pulumi.BoolOutput) +} + +// (Output) +// Output only. The association state in this location. +// Possible values: +// STATE_UNSPECIFIED +// ACTIVE +// OUT_OF_SYNC +func (o MirroringEndpointGroupAssociationOutput) State() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringOutput { return v.State }).(pulumi.StringOutput) +} + +// Output only. [Output only] Update time stamp +func (o MirroringEndpointGroupAssociationOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *MirroringEndpointGroupAssociation) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type MirroringEndpointGroupAssociationArrayOutput struct{ *pulumi.OutputState } + +func (MirroringEndpointGroupAssociationArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*MirroringEndpointGroupAssociation)(nil)).Elem() +} + +func (o MirroringEndpointGroupAssociationArrayOutput) ToMirroringEndpointGroupAssociationArrayOutput() MirroringEndpointGroupAssociationArrayOutput { + return o +} + +func (o MirroringEndpointGroupAssociationArrayOutput) ToMirroringEndpointGroupAssociationArrayOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationArrayOutput { + return o +} + +func (o MirroringEndpointGroupAssociationArrayOutput) Index(i pulumi.IntInput) MirroringEndpointGroupAssociationOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *MirroringEndpointGroupAssociation { + return vs[0].([]*MirroringEndpointGroupAssociation)[vs[1].(int)] + }).(MirroringEndpointGroupAssociationOutput) +} + +type MirroringEndpointGroupAssociationMapOutput struct{ *pulumi.OutputState } + +func (MirroringEndpointGroupAssociationMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*MirroringEndpointGroupAssociation)(nil)).Elem() +} + +func (o MirroringEndpointGroupAssociationMapOutput) ToMirroringEndpointGroupAssociationMapOutput() MirroringEndpointGroupAssociationMapOutput { + return o +} + +func (o MirroringEndpointGroupAssociationMapOutput) ToMirroringEndpointGroupAssociationMapOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationMapOutput { + return o +} + +func (o MirroringEndpointGroupAssociationMapOutput) MapIndex(k pulumi.StringInput) MirroringEndpointGroupAssociationOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *MirroringEndpointGroupAssociation { + return vs[0].(map[string]*MirroringEndpointGroupAssociation)[vs[1].(string)] + }).(MirroringEndpointGroupAssociationOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*MirroringEndpointGroupAssociationInput)(nil)).Elem(), &MirroringEndpointGroupAssociation{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringEndpointGroupAssociationArrayInput)(nil)).Elem(), MirroringEndpointGroupAssociationArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringEndpointGroupAssociationMapInput)(nil)).Elem(), MirroringEndpointGroupAssociationMap{}) + pulumi.RegisterOutputType(MirroringEndpointGroupAssociationOutput{}) + pulumi.RegisterOutputType(MirroringEndpointGroupAssociationArrayOutput{}) + pulumi.RegisterOutputType(MirroringEndpointGroupAssociationMapOutput{}) +} diff --git a/sdk/go/gcp/networksecurity/pulumiTypes.go b/sdk/go/gcp/networksecurity/pulumiTypes.go index d7f074f0eb..426ecb4cbb 100644 --- a/sdk/go/gcp/networksecurity/pulumiTypes.go +++ b/sdk/go/gcp/networksecurity/pulumiTypes.go @@ -1689,6 +1689,233 @@ func (o ClientTlsPolicyServerValidationCaGrpcEndpointPtrOutput) TargetUri() pulu }).(pulumi.StringPtrOutput) } +type MirroringDeploymentGroupConnectedEndpointGroup struct { + // (Output) + // Output only. A connected mirroring endpoint group. + Name *string `pulumi:"name"` +} + +// MirroringDeploymentGroupConnectedEndpointGroupInput is an input type that accepts MirroringDeploymentGroupConnectedEndpointGroupArgs and MirroringDeploymentGroupConnectedEndpointGroupOutput values. +// You can construct a concrete instance of `MirroringDeploymentGroupConnectedEndpointGroupInput` via: +// +// MirroringDeploymentGroupConnectedEndpointGroupArgs{...} +type MirroringDeploymentGroupConnectedEndpointGroupInput interface { + pulumi.Input + + ToMirroringDeploymentGroupConnectedEndpointGroupOutput() MirroringDeploymentGroupConnectedEndpointGroupOutput + ToMirroringDeploymentGroupConnectedEndpointGroupOutputWithContext(context.Context) MirroringDeploymentGroupConnectedEndpointGroupOutput +} + +type MirroringDeploymentGroupConnectedEndpointGroupArgs struct { + // (Output) + // Output only. A connected mirroring endpoint group. + Name pulumi.StringPtrInput `pulumi:"name"` +} + +func (MirroringDeploymentGroupConnectedEndpointGroupArgs) ElementType() reflect.Type { + return reflect.TypeOf((*MirroringDeploymentGroupConnectedEndpointGroup)(nil)).Elem() +} + +func (i MirroringDeploymentGroupConnectedEndpointGroupArgs) ToMirroringDeploymentGroupConnectedEndpointGroupOutput() MirroringDeploymentGroupConnectedEndpointGroupOutput { + return i.ToMirroringDeploymentGroupConnectedEndpointGroupOutputWithContext(context.Background()) +} + +func (i MirroringDeploymentGroupConnectedEndpointGroupArgs) ToMirroringDeploymentGroupConnectedEndpointGroupOutputWithContext(ctx context.Context) MirroringDeploymentGroupConnectedEndpointGroupOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringDeploymentGroupConnectedEndpointGroupOutput) +} + +// MirroringDeploymentGroupConnectedEndpointGroupArrayInput is an input type that accepts MirroringDeploymentGroupConnectedEndpointGroupArray and MirroringDeploymentGroupConnectedEndpointGroupArrayOutput values. +// You can construct a concrete instance of `MirroringDeploymentGroupConnectedEndpointGroupArrayInput` via: +// +// MirroringDeploymentGroupConnectedEndpointGroupArray{ MirroringDeploymentGroupConnectedEndpointGroupArgs{...} } +type MirroringDeploymentGroupConnectedEndpointGroupArrayInput interface { + pulumi.Input + + ToMirroringDeploymentGroupConnectedEndpointGroupArrayOutput() MirroringDeploymentGroupConnectedEndpointGroupArrayOutput + ToMirroringDeploymentGroupConnectedEndpointGroupArrayOutputWithContext(context.Context) MirroringDeploymentGroupConnectedEndpointGroupArrayOutput +} + +type MirroringDeploymentGroupConnectedEndpointGroupArray []MirroringDeploymentGroupConnectedEndpointGroupInput + +func (MirroringDeploymentGroupConnectedEndpointGroupArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]MirroringDeploymentGroupConnectedEndpointGroup)(nil)).Elem() +} + +func (i MirroringDeploymentGroupConnectedEndpointGroupArray) ToMirroringDeploymentGroupConnectedEndpointGroupArrayOutput() MirroringDeploymentGroupConnectedEndpointGroupArrayOutput { + return i.ToMirroringDeploymentGroupConnectedEndpointGroupArrayOutputWithContext(context.Background()) +} + +func (i MirroringDeploymentGroupConnectedEndpointGroupArray) ToMirroringDeploymentGroupConnectedEndpointGroupArrayOutputWithContext(ctx context.Context) MirroringDeploymentGroupConnectedEndpointGroupArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringDeploymentGroupConnectedEndpointGroupArrayOutput) +} + +type MirroringDeploymentGroupConnectedEndpointGroupOutput struct{ *pulumi.OutputState } + +func (MirroringDeploymentGroupConnectedEndpointGroupOutput) ElementType() reflect.Type { + return reflect.TypeOf((*MirroringDeploymentGroupConnectedEndpointGroup)(nil)).Elem() +} + +func (o MirroringDeploymentGroupConnectedEndpointGroupOutput) ToMirroringDeploymentGroupConnectedEndpointGroupOutput() MirroringDeploymentGroupConnectedEndpointGroupOutput { + return o +} + +func (o MirroringDeploymentGroupConnectedEndpointGroupOutput) ToMirroringDeploymentGroupConnectedEndpointGroupOutputWithContext(ctx context.Context) MirroringDeploymentGroupConnectedEndpointGroupOutput { + return o +} + +// (Output) +// Output only. A connected mirroring endpoint group. +func (o MirroringDeploymentGroupConnectedEndpointGroupOutput) Name() pulumi.StringPtrOutput { + return o.ApplyT(func(v MirroringDeploymentGroupConnectedEndpointGroup) *string { return v.Name }).(pulumi.StringPtrOutput) +} + +type MirroringDeploymentGroupConnectedEndpointGroupArrayOutput struct{ *pulumi.OutputState } + +func (MirroringDeploymentGroupConnectedEndpointGroupArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]MirroringDeploymentGroupConnectedEndpointGroup)(nil)).Elem() +} + +func (o MirroringDeploymentGroupConnectedEndpointGroupArrayOutput) ToMirroringDeploymentGroupConnectedEndpointGroupArrayOutput() MirroringDeploymentGroupConnectedEndpointGroupArrayOutput { + return o +} + +func (o MirroringDeploymentGroupConnectedEndpointGroupArrayOutput) ToMirroringDeploymentGroupConnectedEndpointGroupArrayOutputWithContext(ctx context.Context) MirroringDeploymentGroupConnectedEndpointGroupArrayOutput { + return o +} + +func (o MirroringDeploymentGroupConnectedEndpointGroupArrayOutput) Index(i pulumi.IntInput) MirroringDeploymentGroupConnectedEndpointGroupOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) MirroringDeploymentGroupConnectedEndpointGroup { + return vs[0].([]MirroringDeploymentGroupConnectedEndpointGroup)[vs[1].(int)] + }).(MirroringDeploymentGroupConnectedEndpointGroupOutput) +} + +type MirroringEndpointGroupAssociationLocationsDetail struct { + // 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`. + // + // *** + Location *string `pulumi:"location"` + // (Output) + // Output only. The association state in this location. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // OUT_OF_SYNC + State *string `pulumi:"state"` +} + +// MirroringEndpointGroupAssociationLocationsDetailInput is an input type that accepts MirroringEndpointGroupAssociationLocationsDetailArgs and MirroringEndpointGroupAssociationLocationsDetailOutput values. +// You can construct a concrete instance of `MirroringEndpointGroupAssociationLocationsDetailInput` via: +// +// MirroringEndpointGroupAssociationLocationsDetailArgs{...} +type MirroringEndpointGroupAssociationLocationsDetailInput interface { + pulumi.Input + + ToMirroringEndpointGroupAssociationLocationsDetailOutput() MirroringEndpointGroupAssociationLocationsDetailOutput + ToMirroringEndpointGroupAssociationLocationsDetailOutputWithContext(context.Context) MirroringEndpointGroupAssociationLocationsDetailOutput +} + +type MirroringEndpointGroupAssociationLocationsDetailArgs struct { + // 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`. + // + // *** + Location pulumi.StringPtrInput `pulumi:"location"` + // (Output) + // Output only. The association state in this location. + // Possible values: + // STATE_UNSPECIFIED + // ACTIVE + // OUT_OF_SYNC + State pulumi.StringPtrInput `pulumi:"state"` +} + +func (MirroringEndpointGroupAssociationLocationsDetailArgs) ElementType() reflect.Type { + return reflect.TypeOf((*MirroringEndpointGroupAssociationLocationsDetail)(nil)).Elem() +} + +func (i MirroringEndpointGroupAssociationLocationsDetailArgs) ToMirroringEndpointGroupAssociationLocationsDetailOutput() MirroringEndpointGroupAssociationLocationsDetailOutput { + return i.ToMirroringEndpointGroupAssociationLocationsDetailOutputWithContext(context.Background()) +} + +func (i MirroringEndpointGroupAssociationLocationsDetailArgs) ToMirroringEndpointGroupAssociationLocationsDetailOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationLocationsDetailOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringEndpointGroupAssociationLocationsDetailOutput) +} + +// MirroringEndpointGroupAssociationLocationsDetailArrayInput is an input type that accepts MirroringEndpointGroupAssociationLocationsDetailArray and MirroringEndpointGroupAssociationLocationsDetailArrayOutput values. +// You can construct a concrete instance of `MirroringEndpointGroupAssociationLocationsDetailArrayInput` via: +// +// MirroringEndpointGroupAssociationLocationsDetailArray{ MirroringEndpointGroupAssociationLocationsDetailArgs{...} } +type MirroringEndpointGroupAssociationLocationsDetailArrayInput interface { + pulumi.Input + + ToMirroringEndpointGroupAssociationLocationsDetailArrayOutput() MirroringEndpointGroupAssociationLocationsDetailArrayOutput + ToMirroringEndpointGroupAssociationLocationsDetailArrayOutputWithContext(context.Context) MirroringEndpointGroupAssociationLocationsDetailArrayOutput +} + +type MirroringEndpointGroupAssociationLocationsDetailArray []MirroringEndpointGroupAssociationLocationsDetailInput + +func (MirroringEndpointGroupAssociationLocationsDetailArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]MirroringEndpointGroupAssociationLocationsDetail)(nil)).Elem() +} + +func (i MirroringEndpointGroupAssociationLocationsDetailArray) ToMirroringEndpointGroupAssociationLocationsDetailArrayOutput() MirroringEndpointGroupAssociationLocationsDetailArrayOutput { + return i.ToMirroringEndpointGroupAssociationLocationsDetailArrayOutputWithContext(context.Background()) +} + +func (i MirroringEndpointGroupAssociationLocationsDetailArray) ToMirroringEndpointGroupAssociationLocationsDetailArrayOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationLocationsDetailArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(MirroringEndpointGroupAssociationLocationsDetailArrayOutput) +} + +type MirroringEndpointGroupAssociationLocationsDetailOutput struct{ *pulumi.OutputState } + +func (MirroringEndpointGroupAssociationLocationsDetailOutput) ElementType() reflect.Type { + return reflect.TypeOf((*MirroringEndpointGroupAssociationLocationsDetail)(nil)).Elem() +} + +func (o MirroringEndpointGroupAssociationLocationsDetailOutput) ToMirroringEndpointGroupAssociationLocationsDetailOutput() MirroringEndpointGroupAssociationLocationsDetailOutput { + return o +} + +func (o MirroringEndpointGroupAssociationLocationsDetailOutput) ToMirroringEndpointGroupAssociationLocationsDetailOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationLocationsDetailOutput { + return o +} + +// 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`. +// +// *** +func (o MirroringEndpointGroupAssociationLocationsDetailOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v MirroringEndpointGroupAssociationLocationsDetail) *string { return v.Location }).(pulumi.StringPtrOutput) +} + +// (Output) +// Output only. The association state in this location. +// Possible values: +// STATE_UNSPECIFIED +// ACTIVE +// OUT_OF_SYNC +func (o MirroringEndpointGroupAssociationLocationsDetailOutput) State() pulumi.StringPtrOutput { + return o.ApplyT(func(v MirroringEndpointGroupAssociationLocationsDetail) *string { return v.State }).(pulumi.StringPtrOutput) +} + +type MirroringEndpointGroupAssociationLocationsDetailArrayOutput struct{ *pulumi.OutputState } + +func (MirroringEndpointGroupAssociationLocationsDetailArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]MirroringEndpointGroupAssociationLocationsDetail)(nil)).Elem() +} + +func (o MirroringEndpointGroupAssociationLocationsDetailArrayOutput) ToMirroringEndpointGroupAssociationLocationsDetailArrayOutput() MirroringEndpointGroupAssociationLocationsDetailArrayOutput { + return o +} + +func (o MirroringEndpointGroupAssociationLocationsDetailArrayOutput) ToMirroringEndpointGroupAssociationLocationsDetailArrayOutputWithContext(ctx context.Context) MirroringEndpointGroupAssociationLocationsDetailArrayOutput { + return o +} + +func (o MirroringEndpointGroupAssociationLocationsDetailArrayOutput) Index(i pulumi.IntInput) MirroringEndpointGroupAssociationLocationsDetailOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) MirroringEndpointGroupAssociationLocationsDetail { + return vs[0].([]MirroringEndpointGroupAssociationLocationsDetail)[vs[1].(int)] + }).(MirroringEndpointGroupAssociationLocationsDetailOutput) +} + type SecurityProfileThreatPreventionProfile struct { // The configuration for overriding threats actions by severity match. // Structure is documented below. @@ -3165,6 +3392,10 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClientTlsPolicyServerValidationCaCertificateProviderInstancePtrInput)(nil)).Elem(), ClientTlsPolicyServerValidationCaCertificateProviderInstanceArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClientTlsPolicyServerValidationCaGrpcEndpointInput)(nil)).Elem(), ClientTlsPolicyServerValidationCaGrpcEndpointArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClientTlsPolicyServerValidationCaGrpcEndpointPtrInput)(nil)).Elem(), ClientTlsPolicyServerValidationCaGrpcEndpointArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringDeploymentGroupConnectedEndpointGroupInput)(nil)).Elem(), MirroringDeploymentGroupConnectedEndpointGroupArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringDeploymentGroupConnectedEndpointGroupArrayInput)(nil)).Elem(), MirroringDeploymentGroupConnectedEndpointGroupArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringEndpointGroupAssociationLocationsDetailInput)(nil)).Elem(), MirroringEndpointGroupAssociationLocationsDetailArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*MirroringEndpointGroupAssociationLocationsDetailArrayInput)(nil)).Elem(), MirroringEndpointGroupAssociationLocationsDetailArray{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityProfileThreatPreventionProfileInput)(nil)).Elem(), SecurityProfileThreatPreventionProfileArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityProfileThreatPreventionProfilePtrInput)(nil)).Elem(), SecurityProfileThreatPreventionProfileArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityProfileThreatPreventionProfileSeverityOverrideInput)(nil)).Elem(), SecurityProfileThreatPreventionProfileSeverityOverrideArgs{}) @@ -3209,6 +3440,10 @@ func init() { pulumi.RegisterOutputType(ClientTlsPolicyServerValidationCaCertificateProviderInstancePtrOutput{}) pulumi.RegisterOutputType(ClientTlsPolicyServerValidationCaGrpcEndpointOutput{}) pulumi.RegisterOutputType(ClientTlsPolicyServerValidationCaGrpcEndpointPtrOutput{}) + pulumi.RegisterOutputType(MirroringDeploymentGroupConnectedEndpointGroupOutput{}) + pulumi.RegisterOutputType(MirroringDeploymentGroupConnectedEndpointGroupArrayOutput{}) + pulumi.RegisterOutputType(MirroringEndpointGroupAssociationLocationsDetailOutput{}) + pulumi.RegisterOutputType(MirroringEndpointGroupAssociationLocationsDetailArrayOutput{}) pulumi.RegisterOutputType(SecurityProfileThreatPreventionProfileOutput{}) pulumi.RegisterOutputType(SecurityProfileThreatPreventionProfilePtrOutput{}) pulumi.RegisterOutputType(SecurityProfileThreatPreventionProfileSeverityOverrideOutput{}) diff --git a/sdk/go/gcp/oracledatabase/autonomousDatabase.go b/sdk/go/gcp/oracledatabase/autonomousDatabase.go index 117dfe5ad9..b3aad6e15e 100644 --- a/sdk/go/gcp/oracledatabase/autonomousDatabase.go +++ b/sdk/go/gcp/oracledatabase/autonomousDatabase.go @@ -59,6 +59,7 @@ import ( // DbWorkload: pulumi.String("OLTP"), // LicenseType: pulumi.String("LICENSE_INCLUDED"), // }, +// DeletionProtection: pulumi.Bool(true), // }) // if err != nil { // return err @@ -125,6 +126,7 @@ import ( // PrivateEndpointIp: pulumi.String("10.5.0.11"), // PrivateEndpointLabel: pulumi.String("testhost"), // }, +// DeletionProtection: pulumi.Bool(true), // }) // if err != nil { // return err @@ -175,7 +177,8 @@ type AutonomousDatabase struct { // The name of the Autonomous Database. The database name must be unique in // the project. The name must begin with a letter and can // contain a maximum of 30 alphanumeric characters. - Database pulumi.StringOutput `pulumi:"database"` + Database pulumi.StringOutput `pulumi:"database"` + DeletionProtection pulumi.BoolPtrOutput `pulumi:"deletionProtection"` // The display name for the Autonomous Database. The name does not have to be unique within your project. DisplayName pulumi.StringOutput `pulumi:"displayName"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. @@ -271,7 +274,8 @@ type autonomousDatabaseState struct { // The name of the Autonomous Database. The database name must be unique in // the project. The name must begin with a letter and can // contain a maximum of 30 alphanumeric characters. - Database *string `pulumi:"database"` + Database *string `pulumi:"database"` + DeletionProtection *bool `pulumi:"deletionProtection"` // The display name for the Autonomous Database. The name does not have to be unique within your project. DisplayName *string `pulumi:"displayName"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. @@ -315,7 +319,8 @@ type AutonomousDatabaseState struct { // The name of the Autonomous Database. The database name must be unique in // the project. The name must begin with a letter and can // contain a maximum of 30 alphanumeric characters. - Database pulumi.StringPtrInput + Database pulumi.StringPtrInput + DeletionProtection pulumi.BoolPtrInput // The display name for the Autonomous Database. The name does not have to be unique within your project. DisplayName pulumi.StringPtrInput // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. @@ -361,7 +366,8 @@ type autonomousDatabaseArgs struct { // The name of the Autonomous Database. The database name must be unique in // the project. The name must begin with a letter and can // contain a maximum of 30 alphanumeric characters. - Database string `pulumi:"database"` + Database string `pulumi:"database"` + DeletionProtection *bool `pulumi:"deletionProtection"` // The display name for the Autonomous Database. The name does not have to be unique within your project. DisplayName *string `pulumi:"displayName"` // The labels or tags associated with the Autonomous Database. **Note**: This field is non-authoritative, and will only @@ -393,7 +399,8 @@ type AutonomousDatabaseArgs struct { // The name of the Autonomous Database. The database name must be unique in // the project. The name must begin with a letter and can // contain a maximum of 30 alphanumeric characters. - Database pulumi.StringInput + Database pulumi.StringInput + DeletionProtection pulumi.BoolPtrInput // The display name for the Autonomous Database. The name does not have to be unique within your project. DisplayName pulumi.StringPtrInput // The labels or tags associated with the Autonomous Database. **Note**: This field is non-authoritative, and will only @@ -528,6 +535,10 @@ func (o AutonomousDatabaseOutput) Database() pulumi.StringOutput { return o.ApplyT(func(v *AutonomousDatabase) pulumi.StringOutput { return v.Database }).(pulumi.StringOutput) } +func (o AutonomousDatabaseOutput) DeletionProtection() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *AutonomousDatabase) pulumi.BoolPtrOutput { return v.DeletionProtection }).(pulumi.BoolPtrOutput) +} + // The display name for the Autonomous Database. The name does not have to be unique within your project. func (o AutonomousDatabaseOutput) DisplayName() pulumi.StringOutput { return o.ApplyT(func(v *AutonomousDatabase) pulumi.StringOutput { return v.DisplayName }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/oracledatabase/cloudExadataInfrastructure.go b/sdk/go/gcp/oracledatabase/cloudExadataInfrastructure.go index fb17386622..4ec4d852b5 100644 --- a/sdk/go/gcp/oracledatabase/cloudExadataInfrastructure.go +++ b/sdk/go/gcp/oracledatabase/cloudExadataInfrastructure.go @@ -46,6 +46,7 @@ import ( // ComputeCount: pulumi.Int(2), // StorageCount: pulumi.Int(3), // }, +// DeletionProtection: pulumi.Bool(true), // }) // if err != nil { // return err @@ -111,6 +112,7 @@ import ( // Labels: pulumi.StringMap{ // "label-one": pulumi.String("value-one"), // }, +// DeletionProtection: pulumi.Bool(true), // }) // if err != nil { // return err @@ -155,7 +157,8 @@ type CloudExadataInfrastructure struct { // *** CloudExadataInfrastructureId pulumi.StringOutput `pulumi:"cloudExadataInfrastructureId"` // The date and time that the Exadata Infrastructure was created. - CreateTime pulumi.StringOutput `pulumi:"createTime"` + CreateTime pulumi.StringOutput `pulumi:"createTime"` + DeletionProtection pulumi.BoolPtrOutput `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName pulumi.StringPtrOutput `pulumi:"displayName"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. @@ -234,7 +237,8 @@ type cloudExadataInfrastructureState struct { // *** CloudExadataInfrastructureId *string `pulumi:"cloudExadataInfrastructureId"` // The date and time that the Exadata Infrastructure was created. - CreateTime *string `pulumi:"createTime"` + CreateTime *string `pulumi:"createTime"` + DeletionProtection *bool `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName *string `pulumi:"displayName"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. @@ -273,7 +277,8 @@ type CloudExadataInfrastructureState struct { // *** CloudExadataInfrastructureId pulumi.StringPtrInput // The date and time that the Exadata Infrastructure was created. - CreateTime pulumi.StringPtrInput + CreateTime pulumi.StringPtrInput + DeletionProtection pulumi.BoolPtrInput // User friendly name for this resource. DisplayName pulumi.StringPtrInput // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. @@ -315,6 +320,7 @@ type cloudExadataInfrastructureArgs struct { // // *** CloudExadataInfrastructureId string `pulumi:"cloudExadataInfrastructureId"` + DeletionProtection *bool `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName *string `pulumi:"displayName"` // GCP location where Oracle Exadata is hosted. @@ -342,6 +348,7 @@ type CloudExadataInfrastructureArgs struct { // // *** CloudExadataInfrastructureId pulumi.StringInput + DeletionProtection pulumi.BoolPtrInput // User friendly name for this resource. DisplayName pulumi.StringPtrInput // GCP location where Oracle Exadata is hosted. @@ -462,6 +469,10 @@ func (o CloudExadataInfrastructureOutput) CreateTime() pulumi.StringOutput { return o.ApplyT(func(v *CloudExadataInfrastructure) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) } +func (o CloudExadataInfrastructureOutput) DeletionProtection() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *CloudExadataInfrastructure) pulumi.BoolPtrOutput { return v.DeletionProtection }).(pulumi.BoolPtrOutput) +} + // User friendly name for this resource. func (o CloudExadataInfrastructureOutput) DisplayName() pulumi.StringPtrOutput { return o.ApplyT(func(v *CloudExadataInfrastructure) pulumi.StringPtrOutput { return v.DisplayName }).(pulumi.StringPtrOutput) diff --git a/sdk/go/gcp/oracledatabase/cloudVmCluster.go b/sdk/go/gcp/oracledatabase/cloudVmCluster.go index 79c8e5748d..b3bffc88b3 100644 --- a/sdk/go/gcp/oracledatabase/cloudVmCluster.go +++ b/sdk/go/gcp/oracledatabase/cloudVmCluster.go @@ -47,6 +47,7 @@ import ( // ComputeCount: pulumi.Int(2), // StorageCount: pulumi.Int(3), // }, +// DeletionProtection: pulumi.Bool(true), // }) // if err != nil { // return err @@ -76,6 +77,7 @@ import ( // GiVersion: pulumi.String("19.0.0.0"), // HostnamePrefix: pulumi.String("hostname1"), // }, +// DeletionProtection: pulumi.Bool(true), // }) // if err != nil { // return err @@ -110,6 +112,7 @@ import ( // ComputeCount: pulumi.Int(2), // StorageCount: pulumi.Int(3), // }, +// DeletionProtection: pulumi.Bool(true), // }) // if err != nil { // return err @@ -172,6 +175,7 @@ import ( // }, // MemorySizeGb: pulumi.Int(60), // }, +// DeletionProtection: pulumi.Bool(true), // }) // if err != nil { // return err @@ -220,7 +224,8 @@ type CloudVmCluster struct { // *** CloudVmClusterId pulumi.StringOutput `pulumi:"cloudVmClusterId"` // The date and time that the VM cluster was created. - CreateTime pulumi.StringOutput `pulumi:"createTime"` + CreateTime pulumi.StringOutput `pulumi:"createTime"` + DeletionProtection pulumi.BoolPtrOutput `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName pulumi.StringPtrOutput `pulumi:"displayName"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. @@ -320,7 +325,8 @@ type cloudVmClusterState struct { // *** CloudVmClusterId *string `pulumi:"cloudVmClusterId"` // The date and time that the VM cluster was created. - CreateTime *string `pulumi:"createTime"` + CreateTime *string `pulumi:"createTime"` + DeletionProtection *bool `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName *string `pulumi:"displayName"` // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. @@ -368,7 +374,8 @@ type CloudVmClusterState struct { // *** CloudVmClusterId pulumi.StringPtrInput // The date and time that the VM cluster was created. - CreateTime pulumi.StringPtrInput + CreateTime pulumi.StringPtrInput + DeletionProtection pulumi.BoolPtrInput // User friendly name for this resource. DisplayName pulumi.StringPtrInput // All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. @@ -418,7 +425,8 @@ type cloudVmClusterArgs struct { // a letter or a number. // // *** - CloudVmClusterId string `pulumi:"cloudVmClusterId"` + CloudVmClusterId string `pulumi:"cloudVmClusterId"` + DeletionProtection *bool `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName *string `pulumi:"displayName"` // The name of the Exadata Infrastructure resource on which VM cluster @@ -454,7 +462,8 @@ type CloudVmClusterArgs struct { // a letter or a number. // // *** - CloudVmClusterId pulumi.StringInput + CloudVmClusterId pulumi.StringInput + DeletionProtection pulumi.BoolPtrInput // User friendly name for this resource. DisplayName pulumi.StringPtrInput // The name of the Exadata Infrastructure resource on which VM cluster @@ -590,6 +599,10 @@ func (o CloudVmClusterOutput) CreateTime() pulumi.StringOutput { return o.ApplyT(func(v *CloudVmCluster) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) } +func (o CloudVmClusterOutput) DeletionProtection() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *CloudVmCluster) pulumi.BoolPtrOutput { return v.DeletionProtection }).(pulumi.BoolPtrOutput) +} + // User friendly name for this resource. func (o CloudVmClusterOutput) DisplayName() pulumi.StringPtrOutput { return o.ApplyT(func(v *CloudVmCluster) pulumi.StringPtrOutput { return v.DisplayName }).(pulumi.StringPtrOutput) diff --git a/sdk/go/gcp/oracledatabase/getAutonomousDatabase.go b/sdk/go/gcp/oracledatabase/getAutonomousDatabase.go index 096c95669f..d0890794b7 100644 --- a/sdk/go/gcp/oracledatabase/getAutonomousDatabase.go +++ b/sdk/go/gcp/oracledatabase/getAutonomousDatabase.go @@ -72,6 +72,7 @@ type LookupAutonomousDatabaseResult struct { Cidr string `pulumi:"cidr"` CreateTime string `pulumi:"createTime"` Database string `pulumi:"database"` + DeletionProtection bool `pulumi:"deletionProtection"` DisplayName string `pulumi:"displayName"` EffectiveLabels map[string]string `pulumi:"effectiveLabels"` EntitlementId string `pulumi:"entitlementId"` @@ -157,6 +158,10 @@ func (o LookupAutonomousDatabaseResultOutput) Database() pulumi.StringOutput { return o.ApplyT(func(v LookupAutonomousDatabaseResult) string { return v.Database }).(pulumi.StringOutput) } +func (o LookupAutonomousDatabaseResultOutput) DeletionProtection() pulumi.BoolOutput { + return o.ApplyT(func(v LookupAutonomousDatabaseResult) bool { return v.DeletionProtection }).(pulumi.BoolOutput) +} + func (o LookupAutonomousDatabaseResultOutput) DisplayName() pulumi.StringOutput { return o.ApplyT(func(v LookupAutonomousDatabaseResult) string { return v.DisplayName }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/oracledatabase/getCloudExadataInfrastructure.go b/sdk/go/gcp/oracledatabase/getCloudExadataInfrastructure.go index 1087c50238..ef6fb5cc41 100644 --- a/sdk/go/gcp/oracledatabase/getCloudExadataInfrastructure.go +++ b/sdk/go/gcp/oracledatabase/getCloudExadataInfrastructure.go @@ -69,6 +69,7 @@ type LookupCloudExadataInfrastructureArgs struct { type LookupCloudExadataInfrastructureResult struct { CloudExadataInfrastructureId string `pulumi:"cloudExadataInfrastructureId"` CreateTime string `pulumi:"createTime"` + DeletionProtection bool `pulumi:"deletionProtection"` DisplayName string `pulumi:"displayName"` EffectiveLabels map[string]string `pulumi:"effectiveLabels"` EntitlementId string `pulumi:"entitlementId"` @@ -142,6 +143,10 @@ func (o LookupCloudExadataInfrastructureResultOutput) CreateTime() pulumi.String return o.ApplyT(func(v LookupCloudExadataInfrastructureResult) string { return v.CreateTime }).(pulumi.StringOutput) } +func (o LookupCloudExadataInfrastructureResultOutput) DeletionProtection() pulumi.BoolOutput { + return o.ApplyT(func(v LookupCloudExadataInfrastructureResult) bool { return v.DeletionProtection }).(pulumi.BoolOutput) +} + func (o LookupCloudExadataInfrastructureResultOutput) DisplayName() pulumi.StringOutput { return o.ApplyT(func(v LookupCloudExadataInfrastructureResult) string { return v.DisplayName }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/oracledatabase/getCloudVmCluster.go b/sdk/go/gcp/oracledatabase/getCloudVmCluster.go index 6929f21d93..66928a9095 100644 --- a/sdk/go/gcp/oracledatabase/getCloudVmCluster.go +++ b/sdk/go/gcp/oracledatabase/getCloudVmCluster.go @@ -71,6 +71,7 @@ type LookupCloudVmClusterResult struct { Cidr string `pulumi:"cidr"` CloudVmClusterId string `pulumi:"cloudVmClusterId"` CreateTime string `pulumi:"createTime"` + DeletionProtection bool `pulumi:"deletionProtection"` DisplayName string `pulumi:"displayName"` EffectiveLabels map[string]string `pulumi:"effectiveLabels"` ExadataInfrastructure string `pulumi:"exadataInfrastructure"` @@ -153,6 +154,10 @@ func (o LookupCloudVmClusterResultOutput) CreateTime() pulumi.StringOutput { return o.ApplyT(func(v LookupCloudVmClusterResult) string { return v.CreateTime }).(pulumi.StringOutput) } +func (o LookupCloudVmClusterResultOutput) DeletionProtection() pulumi.BoolOutput { + return o.ApplyT(func(v LookupCloudVmClusterResult) bool { return v.DeletionProtection }).(pulumi.BoolOutput) +} + func (o LookupCloudVmClusterResultOutput) DisplayName() pulumi.StringOutput { return o.ApplyT(func(v LookupCloudVmClusterResult) string { return v.DisplayName }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/oracledatabase/pulumiTypes.go b/sdk/go/gcp/oracledatabase/pulumiTypes.go index d0c408e412..9dfcc074f0 100644 --- a/sdk/go/gcp/oracledatabase/pulumiTypes.go +++ b/sdk/go/gcp/oracledatabase/pulumiTypes.go @@ -8400,7 +8400,8 @@ type GetAutonomousDatabasesAutonomousDatabase struct { // The name of the Autonomous Database. The database name must be unique in // the project. The name must begin with a letter and can // contain a maximum of 30 alphanumeric characters. - Database string `pulumi:"database"` + Database string `pulumi:"database"` + DeletionProtection bool `pulumi:"deletionProtection"` // The display name for the Autonomous Database. The name does not have to // be unique within your project. DisplayName string `pulumi:"displayName"` @@ -8459,7 +8460,8 @@ type GetAutonomousDatabasesAutonomousDatabaseArgs struct { // The name of the Autonomous Database. The database name must be unique in // the project. The name must begin with a letter and can // contain a maximum of 30 alphanumeric characters. - Database pulumi.StringInput `pulumi:"database"` + Database pulumi.StringInput `pulumi:"database"` + DeletionProtection pulumi.BoolInput `pulumi:"deletionProtection"` // The display name for the Autonomous Database. The name does not have to // be unique within your project. DisplayName pulumi.StringInput `pulumi:"displayName"` @@ -8573,6 +8575,10 @@ func (o GetAutonomousDatabasesAutonomousDatabaseOutput) Database() pulumi.String return o.ApplyT(func(v GetAutonomousDatabasesAutonomousDatabase) string { return v.Database }).(pulumi.StringOutput) } +func (o GetAutonomousDatabasesAutonomousDatabaseOutput) DeletionProtection() pulumi.BoolOutput { + return o.ApplyT(func(v GetAutonomousDatabasesAutonomousDatabase) bool { return v.DeletionProtection }).(pulumi.BoolOutput) +} + // The display name for the Autonomous Database. The name does not have to // be unique within your project. func (o GetAutonomousDatabasesAutonomousDatabaseOutput) DisplayName() pulumi.StringOutput { @@ -11988,7 +11994,8 @@ type GetCloudExadataInfrastructuresCloudExadataInfrastructure struct { // a letter or a number. CloudExadataInfrastructureId string `pulumi:"cloudExadataInfrastructureId"` // The date and time that the Exadata Infrastructure was created. - CreateTime string `pulumi:"createTime"` + CreateTime string `pulumi:"createTime"` + DeletionProtection bool `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName string `pulumi:"displayName"` EffectiveLabels map[string]string `pulumi:"effectiveLabels"` @@ -12037,7 +12044,8 @@ type GetCloudExadataInfrastructuresCloudExadataInfrastructureArgs struct { // a letter or a number. CloudExadataInfrastructureId pulumi.StringInput `pulumi:"cloudExadataInfrastructureId"` // The date and time that the Exadata Infrastructure was created. - CreateTime pulumi.StringInput `pulumi:"createTime"` + CreateTime pulumi.StringInput `pulumi:"createTime"` + DeletionProtection pulumi.BoolInput `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName pulumi.StringInput `pulumi:"displayName"` EffectiveLabels pulumi.StringMapInput `pulumi:"effectiveLabels"` @@ -12134,6 +12142,10 @@ func (o GetCloudExadataInfrastructuresCloudExadataInfrastructureOutput) CreateTi return o.ApplyT(func(v GetCloudExadataInfrastructuresCloudExadataInfrastructure) string { return v.CreateTime }).(pulumi.StringOutput) } +func (o GetCloudExadataInfrastructuresCloudExadataInfrastructureOutput) DeletionProtection() pulumi.BoolOutput { + return o.ApplyT(func(v GetCloudExadataInfrastructuresCloudExadataInfrastructure) bool { return v.DeletionProtection }).(pulumi.BoolOutput) +} + // User friendly name for this resource. func (o GetCloudExadataInfrastructuresCloudExadataInfrastructureOutput) DisplayName() pulumi.StringOutput { return o.ApplyT(func(v GetCloudExadataInfrastructuresCloudExadataInfrastructure) string { return v.DisplayName }).(pulumi.StringOutput) @@ -13686,7 +13698,8 @@ type GetCloudVmClustersCloudVmCluster struct { // a letter or a number. CloudVmClusterId string `pulumi:"cloudVmClusterId"` // The date and time that the VM cluster was created. - CreateTime string `pulumi:"createTime"` + CreateTime string `pulumi:"createTime"` + DeletionProtection bool `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName string `pulumi:"displayName"` EffectiveLabels map[string]string `pulumi:"effectiveLabels"` @@ -13744,7 +13757,8 @@ type GetCloudVmClustersCloudVmClusterArgs struct { // a letter or a number. CloudVmClusterId pulumi.StringInput `pulumi:"cloudVmClusterId"` // The date and time that the VM cluster was created. - CreateTime pulumi.StringInput `pulumi:"createTime"` + CreateTime pulumi.StringInput `pulumi:"createTime"` + DeletionProtection pulumi.BoolInput `pulumi:"deletionProtection"` // User friendly name for this resource. DisplayName pulumi.StringInput `pulumi:"displayName"` EffectiveLabels pulumi.StringMapInput `pulumi:"effectiveLabels"` @@ -13854,6 +13868,10 @@ func (o GetCloudVmClustersCloudVmClusterOutput) CreateTime() pulumi.StringOutput return o.ApplyT(func(v GetCloudVmClustersCloudVmCluster) string { return v.CreateTime }).(pulumi.StringOutput) } +func (o GetCloudVmClustersCloudVmClusterOutput) DeletionProtection() pulumi.BoolOutput { + return o.ApplyT(func(v GetCloudVmClustersCloudVmCluster) bool { return v.DeletionProtection }).(pulumi.BoolOutput) +} + // User friendly name for this resource. func (o GetCloudVmClustersCloudVmClusterOutput) DisplayName() pulumi.StringOutput { return o.ApplyT(func(v GetCloudVmClustersCloudVmCluster) string { return v.DisplayName }).(pulumi.StringOutput) diff --git a/sdk/go/gcp/orgpolicy/policy.go b/sdk/go/gcp/orgpolicy/policy.go index 9aa77880a7..55609e55c5 100644 --- a/sdk/go/gcp/orgpolicy/policy.go +++ b/sdk/go/gcp/orgpolicy/policy.go @@ -230,7 +230,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // constraint, err := orgpolicy.NewCustomConstraint(ctx, "constraint", &orgpolicy.CustomConstraintArgs{ -// Name: pulumi.String("custom.disableGkeAutoUpgrade_13293"), +// Name: pulumi.String("custom.disableGkeAutoUpgrade_40289"), // Parent: pulumi.String("organizations/123456789"), // DisplayName: pulumi.String("Disable GKE auto upgrade"), // Description: pulumi.String("Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced."), diff --git a/sdk/go/gcp/parallelstore/instance.go b/sdk/go/gcp/parallelstore/instance.go index b03a9d274c..ec77de534f 100644 --- a/sdk/go/gcp/parallelstore/instance.go +++ b/sdk/go/gcp/parallelstore/instance.go @@ -12,6 +12,8 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +// A Parallelstore Instance. +// // ## Example Usage // // ### Parallelstore Instance Basic diff --git a/sdk/go/gcp/provider.go b/sdk/go/gcp/provider.go index f7d2b1d5f8..0900d0d5fa 100644 --- a/sdk/go/gcp/provider.go +++ b/sdk/go/gcp/provider.go @@ -104,6 +104,7 @@ type Provider struct { FirebaseStorageCustomEndpoint pulumi.StringPtrOutput `pulumi:"firebaseStorageCustomEndpoint"` FirebaserulesCustomEndpoint pulumi.StringPtrOutput `pulumi:"firebaserulesCustomEndpoint"` FirestoreCustomEndpoint pulumi.StringPtrOutput `pulumi:"firestoreCustomEndpoint"` + GeminiCustomEndpoint pulumi.StringPtrOutput `pulumi:"geminiCustomEndpoint"` GkeBackupCustomEndpoint pulumi.StringPtrOutput `pulumi:"gkeBackupCustomEndpoint"` GkeHub2CustomEndpoint pulumi.StringPtrOutput `pulumi:"gkeHub2CustomEndpoint"` GkeHubCustomEndpoint pulumi.StringPtrOutput `pulumi:"gkeHubCustomEndpoint"` @@ -321,6 +322,7 @@ type providerArgs struct { FirebaseStorageCustomEndpoint *string `pulumi:"firebaseStorageCustomEndpoint"` FirebaserulesCustomEndpoint *string `pulumi:"firebaserulesCustomEndpoint"` FirestoreCustomEndpoint *string `pulumi:"firestoreCustomEndpoint"` + GeminiCustomEndpoint *string `pulumi:"geminiCustomEndpoint"` GkeBackupCustomEndpoint *string `pulumi:"gkeBackupCustomEndpoint"` GkeHub2CustomEndpoint *string `pulumi:"gkeHub2CustomEndpoint"` GkeHubCustomEndpoint *string `pulumi:"gkeHubCustomEndpoint"` @@ -504,6 +506,7 @@ type ProviderArgs struct { FirebaseStorageCustomEndpoint pulumi.StringPtrInput FirebaserulesCustomEndpoint pulumi.StringPtrInput FirestoreCustomEndpoint pulumi.StringPtrInput + GeminiCustomEndpoint pulumi.StringPtrInput GkeBackupCustomEndpoint pulumi.StringPtrInput GkeHub2CustomEndpoint pulumi.StringPtrInput GkeHubCustomEndpoint pulumi.StringPtrInput @@ -976,6 +979,10 @@ func (o ProviderOutput) FirestoreCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.FirestoreCustomEndpoint }).(pulumi.StringPtrOutput) } +func (o ProviderOutput) GeminiCustomEndpoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.GeminiCustomEndpoint }).(pulumi.StringPtrOutput) +} + func (o ProviderOutput) GkeBackupCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.GkeBackupCustomEndpoint }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/pubsub/subscription.go b/sdk/go/gcp/pubsub/subscription.go index bd8c0a05d8..dd9c183e42 100644 --- a/sdk/go/gcp/pubsub/subscription.go +++ b/sdk/go/gcp/pubsub/subscription.go @@ -496,7 +496,7 @@ import ( // CloudStorageConfig: &pubsub.SubscriptionCloudStorageConfigArgs{ // Bucket: example.Name, // FilenamePrefix: pulumi.String("pre-"), -// FilenameSuffix: pulumi.String("-_40289"), +// FilenameSuffix: pulumi.String("-_33395"), // FilenameDatetimeFormat: pulumi.String("YYYY-MM-DD/hh_mm_ssZ"), // MaxBytes: pulumi.Int(1000), // MaxDuration: pulumi.String("300s"), @@ -564,7 +564,7 @@ import ( // CloudStorageConfig: &pubsub.SubscriptionCloudStorageConfigArgs{ // Bucket: example.Name, // FilenamePrefix: pulumi.String("pre-"), -// FilenameSuffix: pulumi.String("-_33395"), +// FilenameSuffix: pulumi.String("-_76044"), // FilenameDatetimeFormat: pulumi.String("YYYY-MM-DD/hh_mm_ssZ"), // MaxBytes: pulumi.Int(1000), // MaxDuration: pulumi.String("300s"), @@ -642,7 +642,7 @@ import ( // CloudStorageConfig: &pubsub.SubscriptionCloudStorageConfigArgs{ // Bucket: example.Name, // FilenamePrefix: pulumi.String("pre-"), -// FilenameSuffix: pulumi.String("-_76044"), +// FilenameSuffix: pulumi.String("-_69391"), // FilenameDatetimeFormat: pulumi.String("YYYY-MM-DD/hh_mm_ssZ"), // MaxBytes: pulumi.Int(1000), // MaxDuration: pulumi.String("300s"), diff --git a/sdk/go/gcp/redis/cluster.go b/sdk/go/gcp/redis/cluster.go index 1cc68d0c3d..bd8e453385 100644 --- a/sdk/go/gcp/redis/cluster.go +++ b/sdk/go/gcp/redis/cluster.go @@ -12,14 +12,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A Google Cloud Redis Cluster instance. -// -// To get more information about Cluster, see: -// -// * [API documentation](https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/memorystore/docs/cluster/) -// // ## Example Usage // // ### Redis Cluster Ha @@ -198,6 +190,182 @@ import ( // } // // ``` +// ### Redis Cluster Secondary +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity" +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/redis" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// producerNet, err := compute.NewNetwork(ctx, "producer_net", &compute.NetworkArgs{ +// Name: pulumi.String("mynetwork"), +// AutoCreateSubnetworks: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// primaryClusterProducerSubnet, err := compute.NewSubnetwork(ctx, "primary_cluster_producer_subnet", &compute.SubnetworkArgs{ +// Name: pulumi.String("mysubnet-primary-cluster"), +// IpCidrRange: pulumi.String("10.0.1.0/29"), +// Region: pulumi.String("us-east1"), +// Network: producerNet.ID(), +// }) +// if err != nil { +// return err +// } +// primaryClusterRegionScp, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "primary_cluster_region_scp", &networkconnectivity.ServiceConnectionPolicyArgs{ +// Name: pulumi.String("mypolicy-primary-cluster"), +// Location: pulumi.String("us-east1"), +// ServiceClass: pulumi.String("gcp-memorystore-redis"), +// Description: pulumi.String("Primary cluster service connection policy"), +// Network: producerNet.ID(), +// PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{ +// Subnetworks: pulumi.StringArray{ +// primaryClusterProducerSubnet.ID(), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// // Primary cluster +// primaryCluster, err := redis.NewCluster(ctx, "primary_cluster", &redis.ClusterArgs{ +// Name: pulumi.String("my-primary-cluster"), +// Region: pulumi.String("us-east1"), +// PscConfigs: redis.ClusterPscConfigArray{ +// &redis.ClusterPscConfigArgs{ +// Network: producerNet.ID(), +// }, +// }, +// AuthorizationMode: pulumi.String("AUTH_MODE_DISABLED"), +// TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_DISABLED"), +// ShardCount: pulumi.Int(3), +// RedisConfigs: pulumi.StringMap{ +// "maxmemory-policy": pulumi.String("volatile-ttl"), +// }, +// NodeType: pulumi.String("REDIS_HIGHMEM_MEDIUM"), +// PersistenceConfig: &redis.ClusterPersistenceConfigArgs{ +// Mode: pulumi.String("RDB"), +// RdbConfig: &redis.ClusterPersistenceConfigRdbConfigArgs{ +// RdbSnapshotPeriod: pulumi.String("ONE_HOUR"), +// RdbSnapshotStartTime: pulumi.String("2024-10-02T15:01:23Z"), +// }, +// }, +// ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{ +// Mode: pulumi.String("MULTI_ZONE"), +// }, +// ReplicaCount: pulumi.Int(1), +// MaintenancePolicy: &redis.ClusterMaintenancePolicyArgs{ +// WeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{ +// &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{ +// Day: pulumi.String("MONDAY"), +// StartTime: &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{ +// Hours: pulumi.Int(1), +// Minutes: pulumi.Int(0), +// Seconds: pulumi.Int(0), +// Nanos: pulumi.Int(0), +// }, +// }, +// }, +// }, +// DeletionProtectionEnabled: pulumi.Bool(true), +// }, pulumi.DependsOn([]pulumi.Resource{ +// primaryClusterRegionScp, +// })) +// if err != nil { +// return err +// } +// secondaryClusterProducerSubnet, err := compute.NewSubnetwork(ctx, "secondary_cluster_producer_subnet", &compute.SubnetworkArgs{ +// Name: pulumi.String("mysubnet-secondary-cluster"), +// IpCidrRange: pulumi.String("10.0.2.0/29"), +// Region: pulumi.String("europe-west1"), +// Network: producerNet.ID(), +// }) +// if err != nil { +// return err +// } +// secondaryClusterRegionScp, err := networkconnectivity.NewServiceConnectionPolicy(ctx, "secondary_cluster_region_scp", &networkconnectivity.ServiceConnectionPolicyArgs{ +// Name: pulumi.String("mypolicy-secondary-cluster"), +// Location: pulumi.String("europe-west1"), +// ServiceClass: pulumi.String("gcp-memorystore-redis"), +// Description: pulumi.String("Secondary cluster service connection policy"), +// Network: producerNet.ID(), +// PscConfig: &networkconnectivity.ServiceConnectionPolicyPscConfigArgs{ +// Subnetworks: pulumi.StringArray{ +// secondaryClusterProducerSubnet.ID(), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// // Secondary cluster +// _, err = redis.NewCluster(ctx, "secondary_cluster", &redis.ClusterArgs{ +// Name: pulumi.String("my-secondary-cluster"), +// Region: pulumi.String("europe-west1"), +// PscConfigs: redis.ClusterPscConfigArray{ +// &redis.ClusterPscConfigArgs{ +// Network: producerNet.ID(), +// }, +// }, +// AuthorizationMode: pulumi.String("AUTH_MODE_DISABLED"), +// TransitEncryptionMode: pulumi.String("TRANSIT_ENCRYPTION_MODE_DISABLED"), +// ShardCount: pulumi.Int(3), +// RedisConfigs: pulumi.StringMap{ +// "maxmemory-policy": pulumi.String("volatile-ttl"), +// }, +// NodeType: pulumi.String("REDIS_HIGHMEM_MEDIUM"), +// PersistenceConfig: &redis.ClusterPersistenceConfigArgs{ +// Mode: pulumi.String("RDB"), +// RdbConfig: &redis.ClusterPersistenceConfigRdbConfigArgs{ +// RdbSnapshotPeriod: pulumi.String("ONE_HOUR"), +// RdbSnapshotStartTime: pulumi.String("2024-10-02T15:01:23Z"), +// }, +// }, +// ZoneDistributionConfig: &redis.ClusterZoneDistributionConfigArgs{ +// Mode: pulumi.String("MULTI_ZONE"), +// }, +// ReplicaCount: pulumi.Int(2), +// MaintenancePolicy: &redis.ClusterMaintenancePolicyArgs{ +// WeeklyMaintenanceWindows: redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArray{ +// &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs{ +// Day: pulumi.String("WEDNESDAY"), +// StartTime: &redis.ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{ +// Hours: pulumi.Int(1), +// Minutes: pulumi.Int(0), +// Seconds: pulumi.Int(0), +// Nanos: pulumi.Int(0), +// }, +// }, +// }, +// }, +// DeletionProtectionEnabled: pulumi.Bool(true), +// CrossClusterReplicationConfig: &redis.ClusterCrossClusterReplicationConfigArgs{ +// ClusterRole: pulumi.String("SECONDARY"), +// PrimaryCluster: &redis.ClusterCrossClusterReplicationConfigPrimaryClusterArgs{ +// Cluster: primaryCluster.ID(), +// }, +// }, +// }, pulumi.DependsOn([]pulumi.Resource{ +// secondaryClusterRegionScp, +// })) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // ### Redis Cluster Rdb // // ```go @@ -434,6 +602,8 @@ type Cluster struct { // 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". CreateTime pulumi.StringOutput `pulumi:"createTime"` + // Cross cluster replication config + CrossClusterReplicationConfig ClusterCrossClusterReplicationConfigOutput `pulumi:"crossClusterReplicationConfig"` // Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster // operation will fail. Default value is true. DeletionProtectionEnabled pulumi.BoolPtrOutput `pulumi:"deletionProtectionEnabled"` @@ -537,6 +707,8 @@ type clusterState struct { // 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". CreateTime *string `pulumi:"createTime"` + // Cross cluster replication config + CrossClusterReplicationConfig *ClusterCrossClusterReplicationConfig `pulumi:"crossClusterReplicationConfig"` // Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster // operation will fail. Default value is true. DeletionProtectionEnabled *bool `pulumi:"deletionProtectionEnabled"` @@ -605,6 +777,8 @@ type ClusterState struct { // 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". CreateTime pulumi.StringPtrInput + // Cross cluster replication config + CrossClusterReplicationConfig ClusterCrossClusterReplicationConfigPtrInput // Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster // operation will fail. Default value is true. DeletionProtectionEnabled pulumi.BoolPtrInput @@ -673,6 +847,8 @@ type clusterArgs struct { // Default value: "AUTH_MODE_DISABLED" Possible values: ["AUTH_MODE_UNSPECIFIED", "AUTH_MODE_IAM_AUTH", // "AUTH_MODE_DISABLED"] AuthorizationMode *string `pulumi:"authorizationMode"` + // Cross cluster replication config + CrossClusterReplicationConfig *ClusterCrossClusterReplicationConfig `pulumi:"crossClusterReplicationConfig"` // Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster // operation will fail. Default value is true. DeletionProtectionEnabled *bool `pulumi:"deletionProtectionEnabled"` @@ -716,6 +892,8 @@ type ClusterArgs struct { // Default value: "AUTH_MODE_DISABLED" Possible values: ["AUTH_MODE_UNSPECIFIED", "AUTH_MODE_IAM_AUTH", // "AUTH_MODE_DISABLED"] AuthorizationMode pulumi.StringPtrInput + // Cross cluster replication config + CrossClusterReplicationConfig ClusterCrossClusterReplicationConfigPtrInput // Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster // operation will fail. Default value is true. DeletionProtectionEnabled pulumi.BoolPtrInput @@ -854,6 +1032,11 @@ func (o ClusterOutput) CreateTime() pulumi.StringOutput { return o.ApplyT(func(v *Cluster) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) } +// Cross cluster replication config +func (o ClusterOutput) CrossClusterReplicationConfig() ClusterCrossClusterReplicationConfigOutput { + return o.ApplyT(func(v *Cluster) ClusterCrossClusterReplicationConfigOutput { return v.CrossClusterReplicationConfig }).(ClusterCrossClusterReplicationConfigOutput) +} + // Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster // operation will fail. Default value is true. func (o ClusterOutput) DeletionProtectionEnabled() pulumi.BoolPtrOutput { diff --git a/sdk/go/gcp/redis/pulumiTypes.go b/sdk/go/gcp/redis/pulumiTypes.go index 6d0d71d967..8963d4767b 100644 --- a/sdk/go/gcp/redis/pulumiTypes.go +++ b/sdk/go/gcp/redis/pulumiTypes.go @@ -13,6 +13,868 @@ import ( var _ = internal.GetEnvOrDefault +type ClusterCrossClusterReplicationConfig struct { + // The role of the cluster in cross cluster replication. Supported values are: + // 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + // 2. `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. + // 3. `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. + // 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + // Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + ClusterRole *string `pulumi:"clusterRole"` + // (Output) + // An 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. + // Structure is documented below. + Memberships []ClusterCrossClusterReplicationConfigMembership `pulumi:"memberships"` + // 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`. + // Structure is documented below. + PrimaryCluster *ClusterCrossClusterReplicationConfigPrimaryCluster `pulumi:"primaryCluster"` + // 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`. + // Structure is documented below. + SecondaryClusters []ClusterCrossClusterReplicationConfigSecondaryCluster `pulumi:"secondaryClusters"` + // (Output) + // The last time cross cluster replication config was updated. + UpdateTime *string `pulumi:"updateTime"` +} + +// ClusterCrossClusterReplicationConfigInput is an input type that accepts ClusterCrossClusterReplicationConfigArgs and ClusterCrossClusterReplicationConfigOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigInput` via: +// +// ClusterCrossClusterReplicationConfigArgs{...} +type ClusterCrossClusterReplicationConfigInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigOutput() ClusterCrossClusterReplicationConfigOutput + ToClusterCrossClusterReplicationConfigOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigOutput +} + +type ClusterCrossClusterReplicationConfigArgs struct { + // The role of the cluster in cross cluster replication. Supported values are: + // 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + // 2. `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. + // 3. `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. + // 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + // Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + ClusterRole pulumi.StringPtrInput `pulumi:"clusterRole"` + // (Output) + // An 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. + // Structure is documented below. + Memberships ClusterCrossClusterReplicationConfigMembershipArrayInput `pulumi:"memberships"` + // 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`. + // Structure is documented below. + PrimaryCluster ClusterCrossClusterReplicationConfigPrimaryClusterPtrInput `pulumi:"primaryCluster"` + // 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`. + // Structure is documented below. + SecondaryClusters ClusterCrossClusterReplicationConfigSecondaryClusterArrayInput `pulumi:"secondaryClusters"` + // (Output) + // The last time cross cluster replication config was updated. + UpdateTime pulumi.StringPtrInput `pulumi:"updateTime"` +} + +func (ClusterCrossClusterReplicationConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfig)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigArgs) ToClusterCrossClusterReplicationConfigOutput() ClusterCrossClusterReplicationConfigOutput { + return i.ToClusterCrossClusterReplicationConfigOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigArgs) ToClusterCrossClusterReplicationConfigOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigOutput) +} + +func (i ClusterCrossClusterReplicationConfigArgs) ToClusterCrossClusterReplicationConfigPtrOutput() ClusterCrossClusterReplicationConfigPtrOutput { + return i.ToClusterCrossClusterReplicationConfigPtrOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigArgs) ToClusterCrossClusterReplicationConfigPtrOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigOutput).ToClusterCrossClusterReplicationConfigPtrOutputWithContext(ctx) +} + +// ClusterCrossClusterReplicationConfigPtrInput is an input type that accepts ClusterCrossClusterReplicationConfigArgs, ClusterCrossClusterReplicationConfigPtr and ClusterCrossClusterReplicationConfigPtrOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigPtrInput` via: +// +// ClusterCrossClusterReplicationConfigArgs{...} +// +// or: +// +// nil +type ClusterCrossClusterReplicationConfigPtrInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigPtrOutput() ClusterCrossClusterReplicationConfigPtrOutput + ToClusterCrossClusterReplicationConfigPtrOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigPtrOutput +} + +type clusterCrossClusterReplicationConfigPtrType ClusterCrossClusterReplicationConfigArgs + +func ClusterCrossClusterReplicationConfigPtr(v *ClusterCrossClusterReplicationConfigArgs) ClusterCrossClusterReplicationConfigPtrInput { + return (*clusterCrossClusterReplicationConfigPtrType)(v) +} + +func (*clusterCrossClusterReplicationConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterCrossClusterReplicationConfig)(nil)).Elem() +} + +func (i *clusterCrossClusterReplicationConfigPtrType) ToClusterCrossClusterReplicationConfigPtrOutput() ClusterCrossClusterReplicationConfigPtrOutput { + return i.ToClusterCrossClusterReplicationConfigPtrOutputWithContext(context.Background()) +} + +func (i *clusterCrossClusterReplicationConfigPtrType) ToClusterCrossClusterReplicationConfigPtrOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigPtrOutput) +} + +type ClusterCrossClusterReplicationConfigOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfig)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigOutput) ToClusterCrossClusterReplicationConfigOutput() ClusterCrossClusterReplicationConfigOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigOutput) ToClusterCrossClusterReplicationConfigOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigOutput) ToClusterCrossClusterReplicationConfigPtrOutput() ClusterCrossClusterReplicationConfigPtrOutput { + return o.ToClusterCrossClusterReplicationConfigPtrOutputWithContext(context.Background()) +} + +func (o ClusterCrossClusterReplicationConfigOutput) ToClusterCrossClusterReplicationConfigPtrOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterCrossClusterReplicationConfig) *ClusterCrossClusterReplicationConfig { + return &v + }).(ClusterCrossClusterReplicationConfigPtrOutput) +} + +// The role of the cluster in cross cluster replication. Supported values are: +// 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. +// 2. `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. +// 3. `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. +// 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. +// Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. +func (o ClusterCrossClusterReplicationConfigOutput) ClusterRole() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfig) *string { return v.ClusterRole }).(pulumi.StringPtrOutput) +} + +// (Output) +// An 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. +// Structure is documented below. +func (o ClusterCrossClusterReplicationConfigOutput) Memberships() ClusterCrossClusterReplicationConfigMembershipArrayOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfig) []ClusterCrossClusterReplicationConfigMembership { + return v.Memberships + }).(ClusterCrossClusterReplicationConfigMembershipArrayOutput) +} + +// 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`. +// Structure is documented below. +func (o ClusterCrossClusterReplicationConfigOutput) PrimaryCluster() ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfig) *ClusterCrossClusterReplicationConfigPrimaryCluster { + return v.PrimaryCluster + }).(ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) +} + +// 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`. +// Structure is documented below. +func (o ClusterCrossClusterReplicationConfigOutput) SecondaryClusters() ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfig) []ClusterCrossClusterReplicationConfigSecondaryCluster { + return v.SecondaryClusters + }).(ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput) +} + +// (Output) +// The last time cross cluster replication config was updated. +func (o ClusterCrossClusterReplicationConfigOutput) UpdateTime() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfig) *string { return v.UpdateTime }).(pulumi.StringPtrOutput) +} + +type ClusterCrossClusterReplicationConfigPtrOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterCrossClusterReplicationConfig)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigPtrOutput) ToClusterCrossClusterReplicationConfigPtrOutput() ClusterCrossClusterReplicationConfigPtrOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigPtrOutput) ToClusterCrossClusterReplicationConfigPtrOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPtrOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigPtrOutput) Elem() ClusterCrossClusterReplicationConfigOutput { + return o.ApplyT(func(v *ClusterCrossClusterReplicationConfig) ClusterCrossClusterReplicationConfig { + if v != nil { + return *v + } + var ret ClusterCrossClusterReplicationConfig + return ret + }).(ClusterCrossClusterReplicationConfigOutput) +} + +// The role of the cluster in cross cluster replication. Supported values are: +// 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. +// 2. `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. +// 3. `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. +// 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. +// Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. +func (o ClusterCrossClusterReplicationConfigPtrOutput) ClusterRole() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterCrossClusterReplicationConfig) *string { + if v == nil { + return nil + } + return v.ClusterRole + }).(pulumi.StringPtrOutput) +} + +// (Output) +// An 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. +// Structure is documented below. +func (o ClusterCrossClusterReplicationConfigPtrOutput) Memberships() ClusterCrossClusterReplicationConfigMembershipArrayOutput { + return o.ApplyT(func(v *ClusterCrossClusterReplicationConfig) []ClusterCrossClusterReplicationConfigMembership { + if v == nil { + return nil + } + return v.Memberships + }).(ClusterCrossClusterReplicationConfigMembershipArrayOutput) +} + +// 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`. +// Structure is documented below. +func (o ClusterCrossClusterReplicationConfigPtrOutput) PrimaryCluster() ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return o.ApplyT(func(v *ClusterCrossClusterReplicationConfig) *ClusterCrossClusterReplicationConfigPrimaryCluster { + if v == nil { + return nil + } + return v.PrimaryCluster + }).(ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) +} + +// 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`. +// Structure is documented below. +func (o ClusterCrossClusterReplicationConfigPtrOutput) SecondaryClusters() ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput { + return o.ApplyT(func(v *ClusterCrossClusterReplicationConfig) []ClusterCrossClusterReplicationConfigSecondaryCluster { + if v == nil { + return nil + } + return v.SecondaryClusters + }).(ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput) +} + +// (Output) +// The last time cross cluster replication config was updated. +func (o ClusterCrossClusterReplicationConfigPtrOutput) UpdateTime() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterCrossClusterReplicationConfig) *string { + if v == nil { + return nil + } + return v.UpdateTime + }).(pulumi.StringPtrOutput) +} + +type ClusterCrossClusterReplicationConfigMembership struct { + // Details of the primary cluster that is used as the replication source for all the secondary clusters. + PrimaryClusters []ClusterCrossClusterReplicationConfigMembershipPrimaryCluster `pulumi:"primaryClusters"` + // List of secondary clusters that are replicating from the primary cluster. + SecondaryClusters []ClusterCrossClusterReplicationConfigMembershipSecondaryCluster `pulumi:"secondaryClusters"` +} + +// ClusterCrossClusterReplicationConfigMembershipInput is an input type that accepts ClusterCrossClusterReplicationConfigMembershipArgs and ClusterCrossClusterReplicationConfigMembershipOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigMembershipInput` via: +// +// ClusterCrossClusterReplicationConfigMembershipArgs{...} +type ClusterCrossClusterReplicationConfigMembershipInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigMembershipOutput() ClusterCrossClusterReplicationConfigMembershipOutput + ToClusterCrossClusterReplicationConfigMembershipOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigMembershipOutput +} + +type ClusterCrossClusterReplicationConfigMembershipArgs struct { + // Details of the primary cluster that is used as the replication source for all the secondary clusters. + PrimaryClusters ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayInput `pulumi:"primaryClusters"` + // List of secondary clusters that are replicating from the primary cluster. + SecondaryClusters ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayInput `pulumi:"secondaryClusters"` +} + +func (ClusterCrossClusterReplicationConfigMembershipArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembership)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigMembershipArgs) ToClusterCrossClusterReplicationConfigMembershipOutput() ClusterCrossClusterReplicationConfigMembershipOutput { + return i.ToClusterCrossClusterReplicationConfigMembershipOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigMembershipArgs) ToClusterCrossClusterReplicationConfigMembershipOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigMembershipOutput) +} + +// ClusterCrossClusterReplicationConfigMembershipArrayInput is an input type that accepts ClusterCrossClusterReplicationConfigMembershipArray and ClusterCrossClusterReplicationConfigMembershipArrayOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigMembershipArrayInput` via: +// +// ClusterCrossClusterReplicationConfigMembershipArray{ ClusterCrossClusterReplicationConfigMembershipArgs{...} } +type ClusterCrossClusterReplicationConfigMembershipArrayInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigMembershipArrayOutput() ClusterCrossClusterReplicationConfigMembershipArrayOutput + ToClusterCrossClusterReplicationConfigMembershipArrayOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigMembershipArrayOutput +} + +type ClusterCrossClusterReplicationConfigMembershipArray []ClusterCrossClusterReplicationConfigMembershipInput + +func (ClusterCrossClusterReplicationConfigMembershipArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterCrossClusterReplicationConfigMembership)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigMembershipArray) ToClusterCrossClusterReplicationConfigMembershipArrayOutput() ClusterCrossClusterReplicationConfigMembershipArrayOutput { + return i.ToClusterCrossClusterReplicationConfigMembershipArrayOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigMembershipArray) ToClusterCrossClusterReplicationConfigMembershipArrayOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigMembershipArrayOutput) +} + +type ClusterCrossClusterReplicationConfigMembershipOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigMembershipOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembership)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigMembershipOutput) ToClusterCrossClusterReplicationConfigMembershipOutput() ClusterCrossClusterReplicationConfigMembershipOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigMembershipOutput) ToClusterCrossClusterReplicationConfigMembershipOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipOutput { + return o +} + +// Details of the primary cluster that is used as the replication source for all the secondary clusters. +func (o ClusterCrossClusterReplicationConfigMembershipOutput) PrimaryClusters() ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigMembership) []ClusterCrossClusterReplicationConfigMembershipPrimaryCluster { + return v.PrimaryClusters + }).(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput) +} + +// List of secondary clusters that are replicating from the primary cluster. +func (o ClusterCrossClusterReplicationConfigMembershipOutput) SecondaryClusters() ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigMembership) []ClusterCrossClusterReplicationConfigMembershipSecondaryCluster { + return v.SecondaryClusters + }).(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput) +} + +type ClusterCrossClusterReplicationConfigMembershipArrayOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigMembershipArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterCrossClusterReplicationConfigMembership)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigMembershipArrayOutput) ToClusterCrossClusterReplicationConfigMembershipArrayOutput() ClusterCrossClusterReplicationConfigMembershipArrayOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigMembershipArrayOutput) ToClusterCrossClusterReplicationConfigMembershipArrayOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipArrayOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigMembershipArrayOutput) Index(i pulumi.IntInput) ClusterCrossClusterReplicationConfigMembershipOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ClusterCrossClusterReplicationConfigMembership { + return vs[0].([]ClusterCrossClusterReplicationConfigMembership)[vs[1].(int)] + }).(ClusterCrossClusterReplicationConfigMembershipOutput) +} + +type ClusterCrossClusterReplicationConfigMembershipPrimaryCluster struct { + // The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + Cluster *string `pulumi:"cluster"` + // (Output) + // The unique id of the primary cluster. + Uid *string `pulumi:"uid"` +} + +// ClusterCrossClusterReplicationConfigMembershipPrimaryClusterInput is an input type that accepts ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs and ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigMembershipPrimaryClusterInput` via: +// +// ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs{...} +type ClusterCrossClusterReplicationConfigMembershipPrimaryClusterInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput() ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput + ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput +} + +type ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs struct { + // The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + Cluster pulumi.StringPtrInput `pulumi:"cluster"` + // (Output) + // The unique id of the primary cluster. + Uid pulumi.StringPtrInput `pulumi:"uid"` +} + +func (ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipPrimaryCluster)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs) ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput() ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput { + return i.ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs) ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput) +} + +// ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayInput is an input type that accepts ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArray and ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayInput` via: +// +// ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArray{ ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs{...} } +type ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput() ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput + ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput +} + +type ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArray []ClusterCrossClusterReplicationConfigMembershipPrimaryClusterInput + +func (ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterCrossClusterReplicationConfigMembershipPrimaryCluster)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArray) ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput() ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput { + return i.ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArray) ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput) +} + +type ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipPrimaryCluster)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput) ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput() ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput) ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput { + return o +} + +// The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} +func (o ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput) Cluster() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigMembershipPrimaryCluster) *string { return v.Cluster }).(pulumi.StringPtrOutput) +} + +// (Output) +// The unique id of the primary cluster. +func (o ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput) Uid() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigMembershipPrimaryCluster) *string { return v.Uid }).(pulumi.StringPtrOutput) +} + +type ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterCrossClusterReplicationConfigMembershipPrimaryCluster)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput) ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput() ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput) ToClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput) Index(i pulumi.IntInput) ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ClusterCrossClusterReplicationConfigMembershipPrimaryCluster { + return vs[0].([]ClusterCrossClusterReplicationConfigMembershipPrimaryCluster)[vs[1].(int)] + }).(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput) +} + +type ClusterCrossClusterReplicationConfigMembershipSecondaryCluster struct { + // (Output) + // The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + Cluster *string `pulumi:"cluster"` + // (Output) + // The unique id of the secondary cluster. + Uid *string `pulumi:"uid"` +} + +// ClusterCrossClusterReplicationConfigMembershipSecondaryClusterInput is an input type that accepts ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs and ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigMembershipSecondaryClusterInput` via: +// +// ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs{...} +type ClusterCrossClusterReplicationConfigMembershipSecondaryClusterInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput() ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput + ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput +} + +type ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs struct { + // (Output) + // The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + Cluster pulumi.StringPtrInput `pulumi:"cluster"` + // (Output) + // The unique id of the secondary cluster. + Uid pulumi.StringPtrInput `pulumi:"uid"` +} + +func (ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipSecondaryCluster)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs) ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput() ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput { + return i.ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs) ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput) +} + +// ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayInput is an input type that accepts ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArray and ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayInput` via: +// +// ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArray{ ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs{...} } +type ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput() ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput + ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput +} + +type ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArray []ClusterCrossClusterReplicationConfigMembershipSecondaryClusterInput + +func (ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterCrossClusterReplicationConfigMembershipSecondaryCluster)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArray) ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput() ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput { + return i.ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArray) ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput) +} + +type ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipSecondaryCluster)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput) ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput() ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput) ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput { + return o +} + +// (Output) +// The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} +func (o ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput) Cluster() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigMembershipSecondaryCluster) *string { return v.Cluster }).(pulumi.StringPtrOutput) +} + +// (Output) +// The unique id of the secondary cluster. +func (o ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput) Uid() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigMembershipSecondaryCluster) *string { return v.Uid }).(pulumi.StringPtrOutput) +} + +type ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterCrossClusterReplicationConfigMembershipSecondaryCluster)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput) ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput() ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput) ToClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput) Index(i pulumi.IntInput) ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ClusterCrossClusterReplicationConfigMembershipSecondaryCluster { + return vs[0].([]ClusterCrossClusterReplicationConfigMembershipSecondaryCluster)[vs[1].(int)] + }).(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput) +} + +type ClusterCrossClusterReplicationConfigPrimaryCluster struct { + // The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + Cluster *string `pulumi:"cluster"` + // (Output) + // The unique id of the primary cluster. + Uid *string `pulumi:"uid"` +} + +// ClusterCrossClusterReplicationConfigPrimaryClusterInput is an input type that accepts ClusterCrossClusterReplicationConfigPrimaryClusterArgs and ClusterCrossClusterReplicationConfigPrimaryClusterOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigPrimaryClusterInput` via: +// +// ClusterCrossClusterReplicationConfigPrimaryClusterArgs{...} +type ClusterCrossClusterReplicationConfigPrimaryClusterInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigPrimaryClusterOutput() ClusterCrossClusterReplicationConfigPrimaryClusterOutput + ToClusterCrossClusterReplicationConfigPrimaryClusterOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigPrimaryClusterOutput +} + +type ClusterCrossClusterReplicationConfigPrimaryClusterArgs struct { + // The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + Cluster pulumi.StringPtrInput `pulumi:"cluster"` + // (Output) + // The unique id of the primary cluster. + Uid pulumi.StringPtrInput `pulumi:"uid"` +} + +func (ClusterCrossClusterReplicationConfigPrimaryClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigPrimaryCluster)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigPrimaryClusterArgs) ToClusterCrossClusterReplicationConfigPrimaryClusterOutput() ClusterCrossClusterReplicationConfigPrimaryClusterOutput { + return i.ToClusterCrossClusterReplicationConfigPrimaryClusterOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigPrimaryClusterArgs) ToClusterCrossClusterReplicationConfigPrimaryClusterOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPrimaryClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigPrimaryClusterOutput) +} + +func (i ClusterCrossClusterReplicationConfigPrimaryClusterArgs) ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput() ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return i.ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigPrimaryClusterArgs) ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigPrimaryClusterOutput).ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutputWithContext(ctx) +} + +// ClusterCrossClusterReplicationConfigPrimaryClusterPtrInput is an input type that accepts ClusterCrossClusterReplicationConfigPrimaryClusterArgs, ClusterCrossClusterReplicationConfigPrimaryClusterPtr and ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigPrimaryClusterPtrInput` via: +// +// ClusterCrossClusterReplicationConfigPrimaryClusterArgs{...} +// +// or: +// +// nil +type ClusterCrossClusterReplicationConfigPrimaryClusterPtrInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput() ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput + ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput +} + +type clusterCrossClusterReplicationConfigPrimaryClusterPtrType ClusterCrossClusterReplicationConfigPrimaryClusterArgs + +func ClusterCrossClusterReplicationConfigPrimaryClusterPtr(v *ClusterCrossClusterReplicationConfigPrimaryClusterArgs) ClusterCrossClusterReplicationConfigPrimaryClusterPtrInput { + return (*clusterCrossClusterReplicationConfigPrimaryClusterPtrType)(v) +} + +func (*clusterCrossClusterReplicationConfigPrimaryClusterPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterCrossClusterReplicationConfigPrimaryCluster)(nil)).Elem() +} + +func (i *clusterCrossClusterReplicationConfigPrimaryClusterPtrType) ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput() ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return i.ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutputWithContext(context.Background()) +} + +func (i *clusterCrossClusterReplicationConfigPrimaryClusterPtrType) ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) +} + +type ClusterCrossClusterReplicationConfigPrimaryClusterOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigPrimaryClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigPrimaryCluster)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigPrimaryClusterOutput) ToClusterCrossClusterReplicationConfigPrimaryClusterOutput() ClusterCrossClusterReplicationConfigPrimaryClusterOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigPrimaryClusterOutput) ToClusterCrossClusterReplicationConfigPrimaryClusterOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPrimaryClusterOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigPrimaryClusterOutput) ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput() ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return o.ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutputWithContext(context.Background()) +} + +func (o ClusterCrossClusterReplicationConfigPrimaryClusterOutput) ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterCrossClusterReplicationConfigPrimaryCluster) *ClusterCrossClusterReplicationConfigPrimaryCluster { + return &v + }).(ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) +} + +// The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} +func (o ClusterCrossClusterReplicationConfigPrimaryClusterOutput) Cluster() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigPrimaryCluster) *string { return v.Cluster }).(pulumi.StringPtrOutput) +} + +// (Output) +// The unique id of the primary cluster. +func (o ClusterCrossClusterReplicationConfigPrimaryClusterOutput) Uid() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigPrimaryCluster) *string { return v.Uid }).(pulumi.StringPtrOutput) +} + +type ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterCrossClusterReplicationConfigPrimaryCluster)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput() ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) ToClusterCrossClusterReplicationConfigPrimaryClusterPtrOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) Elem() ClusterCrossClusterReplicationConfigPrimaryClusterOutput { + return o.ApplyT(func(v *ClusterCrossClusterReplicationConfigPrimaryCluster) ClusterCrossClusterReplicationConfigPrimaryCluster { + if v != nil { + return *v + } + var ret ClusterCrossClusterReplicationConfigPrimaryCluster + return ret + }).(ClusterCrossClusterReplicationConfigPrimaryClusterOutput) +} + +// The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} +func (o ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) Cluster() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterCrossClusterReplicationConfigPrimaryCluster) *string { + if v == nil { + return nil + } + return v.Cluster + }).(pulumi.StringPtrOutput) +} + +// (Output) +// The unique id of the primary cluster. +func (o ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput) Uid() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterCrossClusterReplicationConfigPrimaryCluster) *string { + if v == nil { + return nil + } + return v.Uid + }).(pulumi.StringPtrOutput) +} + +type ClusterCrossClusterReplicationConfigSecondaryCluster struct { + // (Output) + // The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + Cluster *string `pulumi:"cluster"` + // (Output) + // The unique id of the secondary cluster. + Uid *string `pulumi:"uid"` +} + +// ClusterCrossClusterReplicationConfigSecondaryClusterInput is an input type that accepts ClusterCrossClusterReplicationConfigSecondaryClusterArgs and ClusterCrossClusterReplicationConfigSecondaryClusterOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigSecondaryClusterInput` via: +// +// ClusterCrossClusterReplicationConfigSecondaryClusterArgs{...} +type ClusterCrossClusterReplicationConfigSecondaryClusterInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigSecondaryClusterOutput() ClusterCrossClusterReplicationConfigSecondaryClusterOutput + ToClusterCrossClusterReplicationConfigSecondaryClusterOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigSecondaryClusterOutput +} + +type ClusterCrossClusterReplicationConfigSecondaryClusterArgs struct { + // (Output) + // The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + Cluster pulumi.StringPtrInput `pulumi:"cluster"` + // (Output) + // The unique id of the secondary cluster. + Uid pulumi.StringPtrInput `pulumi:"uid"` +} + +func (ClusterCrossClusterReplicationConfigSecondaryClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigSecondaryCluster)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigSecondaryClusterArgs) ToClusterCrossClusterReplicationConfigSecondaryClusterOutput() ClusterCrossClusterReplicationConfigSecondaryClusterOutput { + return i.ToClusterCrossClusterReplicationConfigSecondaryClusterOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigSecondaryClusterArgs) ToClusterCrossClusterReplicationConfigSecondaryClusterOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigSecondaryClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigSecondaryClusterOutput) +} + +// ClusterCrossClusterReplicationConfigSecondaryClusterArrayInput is an input type that accepts ClusterCrossClusterReplicationConfigSecondaryClusterArray and ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput values. +// You can construct a concrete instance of `ClusterCrossClusterReplicationConfigSecondaryClusterArrayInput` via: +// +// ClusterCrossClusterReplicationConfigSecondaryClusterArray{ ClusterCrossClusterReplicationConfigSecondaryClusterArgs{...} } +type ClusterCrossClusterReplicationConfigSecondaryClusterArrayInput interface { + pulumi.Input + + ToClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput() ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput + ToClusterCrossClusterReplicationConfigSecondaryClusterArrayOutputWithContext(context.Context) ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput +} + +type ClusterCrossClusterReplicationConfigSecondaryClusterArray []ClusterCrossClusterReplicationConfigSecondaryClusterInput + +func (ClusterCrossClusterReplicationConfigSecondaryClusterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterCrossClusterReplicationConfigSecondaryCluster)(nil)).Elem() +} + +func (i ClusterCrossClusterReplicationConfigSecondaryClusterArray) ToClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput() ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput { + return i.ToClusterCrossClusterReplicationConfigSecondaryClusterArrayOutputWithContext(context.Background()) +} + +func (i ClusterCrossClusterReplicationConfigSecondaryClusterArray) ToClusterCrossClusterReplicationConfigSecondaryClusterArrayOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput) +} + +type ClusterCrossClusterReplicationConfigSecondaryClusterOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigSecondaryClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterCrossClusterReplicationConfigSecondaryCluster)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigSecondaryClusterOutput) ToClusterCrossClusterReplicationConfigSecondaryClusterOutput() ClusterCrossClusterReplicationConfigSecondaryClusterOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigSecondaryClusterOutput) ToClusterCrossClusterReplicationConfigSecondaryClusterOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigSecondaryClusterOutput { + return o +} + +// (Output) +// The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} +func (o ClusterCrossClusterReplicationConfigSecondaryClusterOutput) Cluster() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigSecondaryCluster) *string { return v.Cluster }).(pulumi.StringPtrOutput) +} + +// (Output) +// The unique id of the secondary cluster. +func (o ClusterCrossClusterReplicationConfigSecondaryClusterOutput) Uid() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterCrossClusterReplicationConfigSecondaryCluster) *string { return v.Uid }).(pulumi.StringPtrOutput) +} + +type ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput struct{ *pulumi.OutputState } + +func (ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ClusterCrossClusterReplicationConfigSecondaryCluster)(nil)).Elem() +} + +func (o ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput) ToClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput() ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput) ToClusterCrossClusterReplicationConfigSecondaryClusterArrayOutputWithContext(ctx context.Context) ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput { + return o +} + +func (o ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput) Index(i pulumi.IntInput) ClusterCrossClusterReplicationConfigSecondaryClusterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ClusterCrossClusterReplicationConfigSecondaryCluster { + return vs[0].([]ClusterCrossClusterReplicationConfigSecondaryCluster)[vs[1].(int)] + }).(ClusterCrossClusterReplicationConfigSecondaryClusterOutput) +} + type ClusterDiscoveryEndpoint struct { // Output only. The IP allocated on the consumer network for the PSC forwarding rule. Address *string `pulumi:"address"` @@ -1074,7 +1936,7 @@ func (o ClusterPersistenceConfigPtrOutput) RdbConfig() ClusterPersistenceConfigR type ClusterPersistenceConfigAofConfig struct { // Optional. Available fsync modes. - // - NO - Do not explicilty call fsync(). Rely on OS defaults. + // - NO - Do not explicitly call fsync(). Rely on OS defaults. // - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. // - ALWAYS - Call fsync() for earch write command. // Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -1094,7 +1956,7 @@ type ClusterPersistenceConfigAofConfigInput interface { type ClusterPersistenceConfigAofConfigArgs struct { // Optional. Available fsync modes. - // - NO - Do not explicilty call fsync(). Rely on OS defaults. + // - NO - Do not explicitly call fsync(). Rely on OS defaults. // - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. // - ALWAYS - Call fsync() for earch write command. // Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -1179,7 +2041,7 @@ func (o ClusterPersistenceConfigAofConfigOutput) ToClusterPersistenceConfigAofCo } // Optional. Available fsync modes. -// - NO - Do not explicilty call fsync(). Rely on OS defaults. +// - NO - Do not explicitly call fsync(). Rely on OS defaults. // - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. // - ALWAYS - Call fsync() for earch write command. // Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -1212,7 +2074,7 @@ func (o ClusterPersistenceConfigAofConfigPtrOutput) Elem() ClusterPersistenceCon } // Optional. Available fsync modes. -// - NO - Do not explicilty call fsync(). Rely on OS defaults. +// - NO - Do not explicitly call fsync(). Rely on OS defaults. // - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. // - ALWAYS - Call fsync() for earch write command. // Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -4203,6 +5065,18 @@ func (o GetInstanceServerCaCertArrayOutput) Index(i pulumi.IntInput) GetInstance } func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigPtrInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigMembershipArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipArrayInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigMembershipArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipPrimaryClusterInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipSecondaryClusterInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigPrimaryClusterInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigPrimaryClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigPrimaryClusterPtrInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigPrimaryClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigSecondaryClusterInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigSecondaryClusterArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterCrossClusterReplicationConfigSecondaryClusterArrayInput)(nil)).Elem(), ClusterCrossClusterReplicationConfigSecondaryClusterArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterDiscoveryEndpointInput)(nil)).Elem(), ClusterDiscoveryEndpointArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterDiscoveryEndpointArrayInput)(nil)).Elem(), ClusterDiscoveryEndpointArray{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterDiscoveryEndpointPscConfigInput)(nil)).Elem(), ClusterDiscoveryEndpointPscConfigArgs{}) @@ -4257,6 +5131,18 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetInstancePersistenceConfigArrayInput)(nil)).Elem(), GetInstancePersistenceConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceServerCaCertInput)(nil)).Elem(), GetInstanceServerCaCertArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceServerCaCertArrayInput)(nil)).Elem(), GetInstanceServerCaCertArray{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigPtrOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigMembershipOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigMembershipArrayOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArrayOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArrayOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigPrimaryClusterOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigPrimaryClusterPtrOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigSecondaryClusterOutput{}) + pulumi.RegisterOutputType(ClusterCrossClusterReplicationConfigSecondaryClusterArrayOutput{}) pulumi.RegisterOutputType(ClusterDiscoveryEndpointOutput{}) pulumi.RegisterOutputType(ClusterDiscoveryEndpointArrayOutput{}) pulumi.RegisterOutputType(ClusterDiscoveryEndpointPscConfigOutput{}) diff --git a/sdk/go/gcp/serviceaccount/getAccountIdToken.go b/sdk/go/gcp/serviceaccount/getAccountIdToken.go index 4a54c92e46..88e83481b6 100644 --- a/sdk/go/gcp/serviceaccount/getAccountIdToken.go +++ b/sdk/go/gcp/serviceaccount/getAccountIdToken.go @@ -49,7 +49,7 @@ import ( // // ### Service Account Impersonation. // -// `serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `serviceaccount.getAccountAccessToken`. +// `serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `serviceaccount.getAccountAccessToken`. // // Note: to use the following, you must grant `targetServiceAccount` the // `roles/iam.serviceAccountTokenCreator` role on itself. diff --git a/sdk/go/gcp/serviceaccount/getAccountKey.go b/sdk/go/gcp/serviceaccount/getAccountKey.go index f5b2987f51..c41a0bae65 100644 --- a/sdk/go/gcp/serviceaccount/getAccountKey.go +++ b/sdk/go/gcp/serviceaccount/getAccountKey.go @@ -64,7 +64,7 @@ type GetAccountKeyArgs struct { // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{KEYID}`, where `{ACCOUNT}` // is the email address or unique id of the service account. Name string `pulumi:"name"` - // The ID of the project that the service account will be created in. + // The ID of the project that the service account is present in. // Defaults to the provider project configuration. Project *string `pulumi:"project"` // The output format of the public key requested. TYPE_X509_PEM_FILE is the default output format. @@ -108,7 +108,7 @@ type GetAccountKeyOutputArgs struct { // `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{KEYID}`, where `{ACCOUNT}` // is the email address or unique id of the service account. Name pulumi.StringInput `pulumi:"name"` - // The ID of the project that the service account will be created in. + // The ID of the project that the service account is present in. // Defaults to the provider project configuration. Project pulumi.StringPtrInput `pulumi:"project"` // The output format of the public key requested. TYPE_X509_PEM_FILE is the default output format. diff --git a/sdk/go/gcp/storage/getBucket.go b/sdk/go/gcp/storage/getBucket.go index bfbcc67075..51acaa7b4b 100644 --- a/sdk/go/gcp/storage/getBucket.go +++ b/sdk/go/gcp/storage/getBucket.go @@ -55,7 +55,7 @@ func LookupBucket(ctx *pulumi.Context, args *LookupBucketArgs, opts ...pulumi.In type LookupBucketArgs struct { // The name of the bucket. Name string `pulumi:"name"` - // 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. + // 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. Project *string `pulumi:"project"` } @@ -116,7 +116,7 @@ func LookupBucketOutput(ctx *pulumi.Context, args LookupBucketOutputArgs, opts . type LookupBucketOutputArgs struct { // The name of the bucket. Name pulumi.StringInput `pulumi:"name"` - // 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. + // 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. Project pulumi.StringPtrInput `pulumi:"project"` } diff --git a/sdk/go/gcp/storage/getBucketObjectContent.go b/sdk/go/gcp/storage/getBucketObjectContent.go index a1bae6c5d0..c1f6d63e93 100644 --- a/sdk/go/gcp/storage/getBucketObjectContent.go +++ b/sdk/go/gcp/storage/getBucketObjectContent.go @@ -16,7 +16,7 @@ import ( // and // [API](https://cloud.google.com/storage/docs/json_api/v1/objects). // -// > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. +// > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. // // ## Example Usage // diff --git a/sdk/go/gcp/tpu/init.go b/sdk/go/gcp/tpu/init.go index 782151377d..f5878a6055 100644 --- a/sdk/go/gcp/tpu/init.go +++ b/sdk/go/gcp/tpu/init.go @@ -23,6 +23,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi switch typ { case "gcp:tpu/node:Node": r = &Node{} + case "gcp:tpu/v2QueuedResource:V2QueuedResource": + r = &V2QueuedResource{} case "gcp:tpu/v2Vm:V2Vm": r = &V2Vm{} default: @@ -43,6 +45,11 @@ func init() { "tpu/node", &module{version}, ) + pulumi.RegisterResourceModule( + "gcp", + "tpu/v2QueuedResource", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "tpu/v2Vm", diff --git a/sdk/go/gcp/tpu/pulumiTypes.go b/sdk/go/gcp/tpu/pulumiTypes.go index b4dc0ed3f5..9346935e6e 100644 --- a/sdk/go/gcp/tpu/pulumiTypes.go +++ b/sdk/go/gcp/tpu/pulumiTypes.go @@ -262,11 +262,339 @@ func (o NodeSchedulingConfigPtrOutput) Preemptible() pulumi.BoolPtrOutput { }).(pulumi.BoolPtrOutput) } +type V2QueuedResourceTpu struct { + // The TPU node(s) being requested. + // Structure is documented below. + NodeSpecs []V2QueuedResourceTpuNodeSpec `pulumi:"nodeSpecs"` +} + +// V2QueuedResourceTpuInput is an input type that accepts V2QueuedResourceTpuArgs and V2QueuedResourceTpuOutput values. +// You can construct a concrete instance of `V2QueuedResourceTpuInput` via: +// +// V2QueuedResourceTpuArgs{...} +type V2QueuedResourceTpuInput interface { + pulumi.Input + + ToV2QueuedResourceTpuOutput() V2QueuedResourceTpuOutput + ToV2QueuedResourceTpuOutputWithContext(context.Context) V2QueuedResourceTpuOutput +} + +type V2QueuedResourceTpuArgs struct { + // The TPU node(s) being requested. + // Structure is documented below. + NodeSpecs V2QueuedResourceTpuNodeSpecArrayInput `pulumi:"nodeSpecs"` +} + +func (V2QueuedResourceTpuArgs) ElementType() reflect.Type { + return reflect.TypeOf((*V2QueuedResourceTpu)(nil)).Elem() +} + +func (i V2QueuedResourceTpuArgs) ToV2QueuedResourceTpuOutput() V2QueuedResourceTpuOutput { + return i.ToV2QueuedResourceTpuOutputWithContext(context.Background()) +} + +func (i V2QueuedResourceTpuArgs) ToV2QueuedResourceTpuOutputWithContext(ctx context.Context) V2QueuedResourceTpuOutput { + return pulumi.ToOutputWithContext(ctx, i).(V2QueuedResourceTpuOutput) +} + +func (i V2QueuedResourceTpuArgs) ToV2QueuedResourceTpuPtrOutput() V2QueuedResourceTpuPtrOutput { + return i.ToV2QueuedResourceTpuPtrOutputWithContext(context.Background()) +} + +func (i V2QueuedResourceTpuArgs) ToV2QueuedResourceTpuPtrOutputWithContext(ctx context.Context) V2QueuedResourceTpuPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(V2QueuedResourceTpuOutput).ToV2QueuedResourceTpuPtrOutputWithContext(ctx) +} + +// V2QueuedResourceTpuPtrInput is an input type that accepts V2QueuedResourceTpuArgs, V2QueuedResourceTpuPtr and V2QueuedResourceTpuPtrOutput values. +// You can construct a concrete instance of `V2QueuedResourceTpuPtrInput` via: +// +// V2QueuedResourceTpuArgs{...} +// +// or: +// +// nil +type V2QueuedResourceTpuPtrInput interface { + pulumi.Input + + ToV2QueuedResourceTpuPtrOutput() V2QueuedResourceTpuPtrOutput + ToV2QueuedResourceTpuPtrOutputWithContext(context.Context) V2QueuedResourceTpuPtrOutput +} + +type v2queuedResourceTpuPtrType V2QueuedResourceTpuArgs + +func V2QueuedResourceTpuPtr(v *V2QueuedResourceTpuArgs) V2QueuedResourceTpuPtrInput { + return (*v2queuedResourceTpuPtrType)(v) +} + +func (*v2queuedResourceTpuPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**V2QueuedResourceTpu)(nil)).Elem() +} + +func (i *v2queuedResourceTpuPtrType) ToV2QueuedResourceTpuPtrOutput() V2QueuedResourceTpuPtrOutput { + return i.ToV2QueuedResourceTpuPtrOutputWithContext(context.Background()) +} + +func (i *v2queuedResourceTpuPtrType) ToV2QueuedResourceTpuPtrOutputWithContext(ctx context.Context) V2QueuedResourceTpuPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(V2QueuedResourceTpuPtrOutput) +} + +type V2QueuedResourceTpuOutput struct{ *pulumi.OutputState } + +func (V2QueuedResourceTpuOutput) ElementType() reflect.Type { + return reflect.TypeOf((*V2QueuedResourceTpu)(nil)).Elem() +} + +func (o V2QueuedResourceTpuOutput) ToV2QueuedResourceTpuOutput() V2QueuedResourceTpuOutput { + return o +} + +func (o V2QueuedResourceTpuOutput) ToV2QueuedResourceTpuOutputWithContext(ctx context.Context) V2QueuedResourceTpuOutput { + return o +} + +func (o V2QueuedResourceTpuOutput) ToV2QueuedResourceTpuPtrOutput() V2QueuedResourceTpuPtrOutput { + return o.ToV2QueuedResourceTpuPtrOutputWithContext(context.Background()) +} + +func (o V2QueuedResourceTpuOutput) ToV2QueuedResourceTpuPtrOutputWithContext(ctx context.Context) V2QueuedResourceTpuPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v V2QueuedResourceTpu) *V2QueuedResourceTpu { + return &v + }).(V2QueuedResourceTpuPtrOutput) +} + +// The TPU node(s) being requested. +// Structure is documented below. +func (o V2QueuedResourceTpuOutput) NodeSpecs() V2QueuedResourceTpuNodeSpecArrayOutput { + return o.ApplyT(func(v V2QueuedResourceTpu) []V2QueuedResourceTpuNodeSpec { return v.NodeSpecs }).(V2QueuedResourceTpuNodeSpecArrayOutput) +} + +type V2QueuedResourceTpuPtrOutput struct{ *pulumi.OutputState } + +func (V2QueuedResourceTpuPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**V2QueuedResourceTpu)(nil)).Elem() +} + +func (o V2QueuedResourceTpuPtrOutput) ToV2QueuedResourceTpuPtrOutput() V2QueuedResourceTpuPtrOutput { + return o +} + +func (o V2QueuedResourceTpuPtrOutput) ToV2QueuedResourceTpuPtrOutputWithContext(ctx context.Context) V2QueuedResourceTpuPtrOutput { + return o +} + +func (o V2QueuedResourceTpuPtrOutput) Elem() V2QueuedResourceTpuOutput { + return o.ApplyT(func(v *V2QueuedResourceTpu) V2QueuedResourceTpu { + if v != nil { + return *v + } + var ret V2QueuedResourceTpu + return ret + }).(V2QueuedResourceTpuOutput) +} + +// The TPU node(s) being requested. +// Structure is documented below. +func (o V2QueuedResourceTpuPtrOutput) NodeSpecs() V2QueuedResourceTpuNodeSpecArrayOutput { + return o.ApplyT(func(v *V2QueuedResourceTpu) []V2QueuedResourceTpuNodeSpec { + if v == nil { + return nil + } + return v.NodeSpecs + }).(V2QueuedResourceTpuNodeSpecArrayOutput) +} + +type V2QueuedResourceTpuNodeSpec struct { + // The node. + // Structure is documented below. + Node V2QueuedResourceTpuNodeSpecNode `pulumi:"node"` + // Unqualified node identifier used to identify the node in the project once provisioned. + NodeId *string `pulumi:"nodeId"` + // The parent resource name. + Parent string `pulumi:"parent"` +} + +// V2QueuedResourceTpuNodeSpecInput is an input type that accepts V2QueuedResourceTpuNodeSpecArgs and V2QueuedResourceTpuNodeSpecOutput values. +// You can construct a concrete instance of `V2QueuedResourceTpuNodeSpecInput` via: +// +// V2QueuedResourceTpuNodeSpecArgs{...} +type V2QueuedResourceTpuNodeSpecInput interface { + pulumi.Input + + ToV2QueuedResourceTpuNodeSpecOutput() V2QueuedResourceTpuNodeSpecOutput + ToV2QueuedResourceTpuNodeSpecOutputWithContext(context.Context) V2QueuedResourceTpuNodeSpecOutput +} + +type V2QueuedResourceTpuNodeSpecArgs struct { + // The node. + // Structure is documented below. + Node V2QueuedResourceTpuNodeSpecNodeInput `pulumi:"node"` + // Unqualified node identifier used to identify the node in the project once provisioned. + NodeId pulumi.StringPtrInput `pulumi:"nodeId"` + // The parent resource name. + Parent pulumi.StringInput `pulumi:"parent"` +} + +func (V2QueuedResourceTpuNodeSpecArgs) ElementType() reflect.Type { + return reflect.TypeOf((*V2QueuedResourceTpuNodeSpec)(nil)).Elem() +} + +func (i V2QueuedResourceTpuNodeSpecArgs) ToV2QueuedResourceTpuNodeSpecOutput() V2QueuedResourceTpuNodeSpecOutput { + return i.ToV2QueuedResourceTpuNodeSpecOutputWithContext(context.Background()) +} + +func (i V2QueuedResourceTpuNodeSpecArgs) ToV2QueuedResourceTpuNodeSpecOutputWithContext(ctx context.Context) V2QueuedResourceTpuNodeSpecOutput { + return pulumi.ToOutputWithContext(ctx, i).(V2QueuedResourceTpuNodeSpecOutput) +} + +// V2QueuedResourceTpuNodeSpecArrayInput is an input type that accepts V2QueuedResourceTpuNodeSpecArray and V2QueuedResourceTpuNodeSpecArrayOutput values. +// You can construct a concrete instance of `V2QueuedResourceTpuNodeSpecArrayInput` via: +// +// V2QueuedResourceTpuNodeSpecArray{ V2QueuedResourceTpuNodeSpecArgs{...} } +type V2QueuedResourceTpuNodeSpecArrayInput interface { + pulumi.Input + + ToV2QueuedResourceTpuNodeSpecArrayOutput() V2QueuedResourceTpuNodeSpecArrayOutput + ToV2QueuedResourceTpuNodeSpecArrayOutputWithContext(context.Context) V2QueuedResourceTpuNodeSpecArrayOutput +} + +type V2QueuedResourceTpuNodeSpecArray []V2QueuedResourceTpuNodeSpecInput + +func (V2QueuedResourceTpuNodeSpecArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]V2QueuedResourceTpuNodeSpec)(nil)).Elem() +} + +func (i V2QueuedResourceTpuNodeSpecArray) ToV2QueuedResourceTpuNodeSpecArrayOutput() V2QueuedResourceTpuNodeSpecArrayOutput { + return i.ToV2QueuedResourceTpuNodeSpecArrayOutputWithContext(context.Background()) +} + +func (i V2QueuedResourceTpuNodeSpecArray) ToV2QueuedResourceTpuNodeSpecArrayOutputWithContext(ctx context.Context) V2QueuedResourceTpuNodeSpecArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(V2QueuedResourceTpuNodeSpecArrayOutput) +} + +type V2QueuedResourceTpuNodeSpecOutput struct{ *pulumi.OutputState } + +func (V2QueuedResourceTpuNodeSpecOutput) ElementType() reflect.Type { + return reflect.TypeOf((*V2QueuedResourceTpuNodeSpec)(nil)).Elem() +} + +func (o V2QueuedResourceTpuNodeSpecOutput) ToV2QueuedResourceTpuNodeSpecOutput() V2QueuedResourceTpuNodeSpecOutput { + return o +} + +func (o V2QueuedResourceTpuNodeSpecOutput) ToV2QueuedResourceTpuNodeSpecOutputWithContext(ctx context.Context) V2QueuedResourceTpuNodeSpecOutput { + return o +} + +// The node. +// Structure is documented below. +func (o V2QueuedResourceTpuNodeSpecOutput) Node() V2QueuedResourceTpuNodeSpecNodeOutput { + return o.ApplyT(func(v V2QueuedResourceTpuNodeSpec) V2QueuedResourceTpuNodeSpecNode { return v.Node }).(V2QueuedResourceTpuNodeSpecNodeOutput) +} + +// Unqualified node identifier used to identify the node in the project once provisioned. +func (o V2QueuedResourceTpuNodeSpecOutput) NodeId() pulumi.StringPtrOutput { + return o.ApplyT(func(v V2QueuedResourceTpuNodeSpec) *string { return v.NodeId }).(pulumi.StringPtrOutput) +} + +// The parent resource name. +func (o V2QueuedResourceTpuNodeSpecOutput) Parent() pulumi.StringOutput { + return o.ApplyT(func(v V2QueuedResourceTpuNodeSpec) string { return v.Parent }).(pulumi.StringOutput) +} + +type V2QueuedResourceTpuNodeSpecArrayOutput struct{ *pulumi.OutputState } + +func (V2QueuedResourceTpuNodeSpecArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]V2QueuedResourceTpuNodeSpec)(nil)).Elem() +} + +func (o V2QueuedResourceTpuNodeSpecArrayOutput) ToV2QueuedResourceTpuNodeSpecArrayOutput() V2QueuedResourceTpuNodeSpecArrayOutput { + return o +} + +func (o V2QueuedResourceTpuNodeSpecArrayOutput) ToV2QueuedResourceTpuNodeSpecArrayOutputWithContext(ctx context.Context) V2QueuedResourceTpuNodeSpecArrayOutput { + return o +} + +func (o V2QueuedResourceTpuNodeSpecArrayOutput) Index(i pulumi.IntInput) V2QueuedResourceTpuNodeSpecOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) V2QueuedResourceTpuNodeSpec { + return vs[0].([]V2QueuedResourceTpuNodeSpec)[vs[1].(int)] + }).(V2QueuedResourceTpuNodeSpecOutput) +} + +type V2QueuedResourceTpuNodeSpecNode struct { + // TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + AcceleratorType *string `pulumi:"acceleratorType"` + // Text description of the TPU. + Description *string `pulumi:"description"` + // Runtime version for the TPU. + RuntimeVersion string `pulumi:"runtimeVersion"` +} + +// V2QueuedResourceTpuNodeSpecNodeInput is an input type that accepts V2QueuedResourceTpuNodeSpecNodeArgs and V2QueuedResourceTpuNodeSpecNodeOutput values. +// You can construct a concrete instance of `V2QueuedResourceTpuNodeSpecNodeInput` via: +// +// V2QueuedResourceTpuNodeSpecNodeArgs{...} +type V2QueuedResourceTpuNodeSpecNodeInput interface { + pulumi.Input + + ToV2QueuedResourceTpuNodeSpecNodeOutput() V2QueuedResourceTpuNodeSpecNodeOutput + ToV2QueuedResourceTpuNodeSpecNodeOutputWithContext(context.Context) V2QueuedResourceTpuNodeSpecNodeOutput +} + +type V2QueuedResourceTpuNodeSpecNodeArgs struct { + // TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + AcceleratorType pulumi.StringPtrInput `pulumi:"acceleratorType"` + // Text description of the TPU. + Description pulumi.StringPtrInput `pulumi:"description"` + // Runtime version for the TPU. + RuntimeVersion pulumi.StringInput `pulumi:"runtimeVersion"` +} + +func (V2QueuedResourceTpuNodeSpecNodeArgs) ElementType() reflect.Type { + return reflect.TypeOf((*V2QueuedResourceTpuNodeSpecNode)(nil)).Elem() +} + +func (i V2QueuedResourceTpuNodeSpecNodeArgs) ToV2QueuedResourceTpuNodeSpecNodeOutput() V2QueuedResourceTpuNodeSpecNodeOutput { + return i.ToV2QueuedResourceTpuNodeSpecNodeOutputWithContext(context.Background()) +} + +func (i V2QueuedResourceTpuNodeSpecNodeArgs) ToV2QueuedResourceTpuNodeSpecNodeOutputWithContext(ctx context.Context) V2QueuedResourceTpuNodeSpecNodeOutput { + return pulumi.ToOutputWithContext(ctx, i).(V2QueuedResourceTpuNodeSpecNodeOutput) +} + +type V2QueuedResourceTpuNodeSpecNodeOutput struct{ *pulumi.OutputState } + +func (V2QueuedResourceTpuNodeSpecNodeOutput) ElementType() reflect.Type { + return reflect.TypeOf((*V2QueuedResourceTpuNodeSpecNode)(nil)).Elem() +} + +func (o V2QueuedResourceTpuNodeSpecNodeOutput) ToV2QueuedResourceTpuNodeSpecNodeOutput() V2QueuedResourceTpuNodeSpecNodeOutput { + return o +} + +func (o V2QueuedResourceTpuNodeSpecNodeOutput) ToV2QueuedResourceTpuNodeSpecNodeOutputWithContext(ctx context.Context) V2QueuedResourceTpuNodeSpecNodeOutput { + return o +} + +// TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. +func (o V2QueuedResourceTpuNodeSpecNodeOutput) AcceleratorType() pulumi.StringPtrOutput { + return o.ApplyT(func(v V2QueuedResourceTpuNodeSpecNode) *string { return v.AcceleratorType }).(pulumi.StringPtrOutput) +} + +// Text description of the TPU. +func (o V2QueuedResourceTpuNodeSpecNodeOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v V2QueuedResourceTpuNodeSpecNode) *string { return v.Description }).(pulumi.StringPtrOutput) +} + +// Runtime version for the TPU. +func (o V2QueuedResourceTpuNodeSpecNodeOutput) RuntimeVersion() pulumi.StringOutput { + return o.ApplyT(func(v V2QueuedResourceTpuNodeSpecNode) string { return v.RuntimeVersion }).(pulumi.StringOutput) +} + type V2VmAcceleratorConfig struct { // Topology of TPU in chips. Topology string `pulumi:"topology"` - // Type of TPU. - // Possible values are: `V2`, `V3`, `V4`, `V5P`. + // Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type Type string `pulumi:"type"` } @@ -284,8 +612,7 @@ type V2VmAcceleratorConfigInput interface { type V2VmAcceleratorConfigArgs struct { // Topology of TPU in chips. Topology pulumi.StringInput `pulumi:"topology"` - // Type of TPU. - // Possible values are: `V2`, `V3`, `V4`, `V5P`. + // Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type Type pulumi.StringInput `pulumi:"type"` } @@ -371,8 +698,7 @@ func (o V2VmAcceleratorConfigOutput) Topology() pulumi.StringOutput { return o.ApplyT(func(v V2VmAcceleratorConfig) string { return v.Topology }).(pulumi.StringOutput) } -// Type of TPU. -// Possible values are: `V2`, `V3`, `V4`, `V5P`. +// Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type func (o V2VmAcceleratorConfigOutput) Type() pulumi.StringOutput { return o.ApplyT(func(v V2VmAcceleratorConfig) string { return v.Type }).(pulumi.StringOutput) } @@ -411,8 +737,7 @@ func (o V2VmAcceleratorConfigPtrOutput) Topology() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } -// Type of TPU. -// Possible values are: `V2`, `V3`, `V4`, `V5P`. +// Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type func (o V2VmAcceleratorConfigPtrOutput) Type() pulumi.StringPtrOutput { return o.ApplyT(func(v *V2VmAcceleratorConfig) *string { if v == nil { @@ -1587,6 +1912,11 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*NodeNetworkEndpointArrayInput)(nil)).Elem(), NodeNetworkEndpointArray{}) pulumi.RegisterInputType(reflect.TypeOf((*NodeSchedulingConfigInput)(nil)).Elem(), NodeSchedulingConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*NodeSchedulingConfigPtrInput)(nil)).Elem(), NodeSchedulingConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*V2QueuedResourceTpuInput)(nil)).Elem(), V2QueuedResourceTpuArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*V2QueuedResourceTpuPtrInput)(nil)).Elem(), V2QueuedResourceTpuArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*V2QueuedResourceTpuNodeSpecInput)(nil)).Elem(), V2QueuedResourceTpuNodeSpecArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*V2QueuedResourceTpuNodeSpecArrayInput)(nil)).Elem(), V2QueuedResourceTpuNodeSpecArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*V2QueuedResourceTpuNodeSpecNodeInput)(nil)).Elem(), V2QueuedResourceTpuNodeSpecNodeArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*V2VmAcceleratorConfigInput)(nil)).Elem(), V2VmAcceleratorConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*V2VmAcceleratorConfigPtrInput)(nil)).Elem(), V2VmAcceleratorConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*V2VmDataDiskInput)(nil)).Elem(), V2VmDataDiskArgs{}) @@ -1609,6 +1939,11 @@ func init() { pulumi.RegisterOutputType(NodeNetworkEndpointArrayOutput{}) pulumi.RegisterOutputType(NodeSchedulingConfigOutput{}) pulumi.RegisterOutputType(NodeSchedulingConfigPtrOutput{}) + pulumi.RegisterOutputType(V2QueuedResourceTpuOutput{}) + pulumi.RegisterOutputType(V2QueuedResourceTpuPtrOutput{}) + pulumi.RegisterOutputType(V2QueuedResourceTpuNodeSpecOutput{}) + pulumi.RegisterOutputType(V2QueuedResourceTpuNodeSpecArrayOutput{}) + pulumi.RegisterOutputType(V2QueuedResourceTpuNodeSpecNodeOutput{}) pulumi.RegisterOutputType(V2VmAcceleratorConfigOutput{}) pulumi.RegisterOutputType(V2VmAcceleratorConfigPtrOutput{}) pulumi.RegisterOutputType(V2VmDataDiskOutput{}) diff --git a/sdk/go/gcp/tpu/v2queuedResource.go b/sdk/go/gcp/tpu/v2queuedResource.go new file mode 100644 index 0000000000..9196a70de9 --- /dev/null +++ b/sdk/go/gcp/tpu/v2queuedResource.go @@ -0,0 +1,355 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package tpu + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// +// ### Tpu V2 Queued Resource Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tpu" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := tpu.NewV2QueuedResource(ctx, "qr", &tpu.V2QueuedResourceArgs{ +// Name: pulumi.String("test-qr"), +// Zone: pulumi.String("us-central1-c"), +// Project: pulumi.String("my-project-name"), +// Tpu: &tpu.V2QueuedResourceTpuArgs{ +// NodeSpecs: tpu.V2QueuedResourceTpuNodeSpecArray{ +// &tpu.V2QueuedResourceTpuNodeSpecArgs{ +// Parent: pulumi.String("projects/my-project-name/locations/us-central1-c"), +// NodeId: pulumi.String("test-tpu"), +// Node: &tpu.V2QueuedResourceTpuNodeSpecNodeArgs{ +// RuntimeVersion: pulumi.String("tpu-vm-tf-2.13.0"), +// AcceleratorType: pulumi.String("v2-8"), +// Description: pulumi.String("Text description of the TPU."), +// }, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// QueuedResource can be imported using any of these accepted formats: +// +// * `projects/{{project}}/locations/{{zone}}/queuedResources/{{name}}` +// +// * `{{project}}/{{zone}}/{{name}}` +// +// * `{{zone}}/{{name}}` +// +// * `{{name}}` +// +// When using the `pulumi import` command, QueuedResource can be imported using one of the formats above. For example: +// +// ```sh +// $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default projects/{{project}}/locations/{{zone}}/queuedResources/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{project}}/{{zone}}/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{zone}}/{{name}} +// ``` +// +// ```sh +// $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{name}} +// ``` +type V2QueuedResource struct { + pulumi.CustomResourceState + + // The immutable name of the Queued Resource. + // + // *** + Name pulumi.StringOutput `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringOutput `pulumi:"project"` + // Defines a TPU resource. + // Structure is documented below. + Tpu V2QueuedResourceTpuPtrOutput `pulumi:"tpu"` + // The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + Zone pulumi.StringOutput `pulumi:"zone"` +} + +// NewV2QueuedResource registers a new resource with the given unique name, arguments, and options. +func NewV2QueuedResource(ctx *pulumi.Context, + name string, args *V2QueuedResourceArgs, opts ...pulumi.ResourceOption) (*V2QueuedResource, error) { + if args == nil { + args = &V2QueuedResourceArgs{} + } + + opts = internal.PkgResourceDefaultOpts(opts) + var resource V2QueuedResource + err := ctx.RegisterResource("gcp:tpu/v2QueuedResource:V2QueuedResource", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetV2QueuedResource gets an existing V2QueuedResource resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetV2QueuedResource(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *V2QueuedResourceState, opts ...pulumi.ResourceOption) (*V2QueuedResource, error) { + var resource V2QueuedResource + err := ctx.ReadResource("gcp:tpu/v2QueuedResource:V2QueuedResource", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering V2QueuedResource resources. +type v2queuedResourceState struct { + // The immutable name of the Queued Resource. + // + // *** + Name *string `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // Defines a TPU resource. + // Structure is documented below. + Tpu *V2QueuedResourceTpu `pulumi:"tpu"` + // The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + Zone *string `pulumi:"zone"` +} + +type V2QueuedResourceState struct { + // The immutable name of the Queued Resource. + // + // *** + Name pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // Defines a TPU resource. + // Structure is documented below. + Tpu V2QueuedResourceTpuPtrInput + // The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + Zone pulumi.StringPtrInput +} + +func (V2QueuedResourceState) ElementType() reflect.Type { + return reflect.TypeOf((*v2queuedResourceState)(nil)).Elem() +} + +type v2queuedResourceArgs struct { + // The immutable name of the Queued Resource. + // + // *** + Name *string `pulumi:"name"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // Defines a TPU resource. + // Structure is documented below. + Tpu *V2QueuedResourceTpu `pulumi:"tpu"` + // The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + Zone *string `pulumi:"zone"` +} + +// The set of arguments for constructing a V2QueuedResource resource. +type V2QueuedResourceArgs struct { + // The immutable name of the Queued Resource. + // + // *** + Name pulumi.StringPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // Defines a TPU resource. + // Structure is documented below. + Tpu V2QueuedResourceTpuPtrInput + // The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + Zone pulumi.StringPtrInput +} + +func (V2QueuedResourceArgs) ElementType() reflect.Type { + return reflect.TypeOf((*v2queuedResourceArgs)(nil)).Elem() +} + +type V2QueuedResourceInput interface { + pulumi.Input + + ToV2QueuedResourceOutput() V2QueuedResourceOutput + ToV2QueuedResourceOutputWithContext(ctx context.Context) V2QueuedResourceOutput +} + +func (*V2QueuedResource) ElementType() reflect.Type { + return reflect.TypeOf((**V2QueuedResource)(nil)).Elem() +} + +func (i *V2QueuedResource) ToV2QueuedResourceOutput() V2QueuedResourceOutput { + return i.ToV2QueuedResourceOutputWithContext(context.Background()) +} + +func (i *V2QueuedResource) ToV2QueuedResourceOutputWithContext(ctx context.Context) V2QueuedResourceOutput { + return pulumi.ToOutputWithContext(ctx, i).(V2QueuedResourceOutput) +} + +// V2QueuedResourceArrayInput is an input type that accepts V2QueuedResourceArray and V2QueuedResourceArrayOutput values. +// You can construct a concrete instance of `V2QueuedResourceArrayInput` via: +// +// V2QueuedResourceArray{ V2QueuedResourceArgs{...} } +type V2QueuedResourceArrayInput interface { + pulumi.Input + + ToV2QueuedResourceArrayOutput() V2QueuedResourceArrayOutput + ToV2QueuedResourceArrayOutputWithContext(context.Context) V2QueuedResourceArrayOutput +} + +type V2QueuedResourceArray []V2QueuedResourceInput + +func (V2QueuedResourceArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*V2QueuedResource)(nil)).Elem() +} + +func (i V2QueuedResourceArray) ToV2QueuedResourceArrayOutput() V2QueuedResourceArrayOutput { + return i.ToV2QueuedResourceArrayOutputWithContext(context.Background()) +} + +func (i V2QueuedResourceArray) ToV2QueuedResourceArrayOutputWithContext(ctx context.Context) V2QueuedResourceArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(V2QueuedResourceArrayOutput) +} + +// V2QueuedResourceMapInput is an input type that accepts V2QueuedResourceMap and V2QueuedResourceMapOutput values. +// You can construct a concrete instance of `V2QueuedResourceMapInput` via: +// +// V2QueuedResourceMap{ "key": V2QueuedResourceArgs{...} } +type V2QueuedResourceMapInput interface { + pulumi.Input + + ToV2QueuedResourceMapOutput() V2QueuedResourceMapOutput + ToV2QueuedResourceMapOutputWithContext(context.Context) V2QueuedResourceMapOutput +} + +type V2QueuedResourceMap map[string]V2QueuedResourceInput + +func (V2QueuedResourceMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*V2QueuedResource)(nil)).Elem() +} + +func (i V2QueuedResourceMap) ToV2QueuedResourceMapOutput() V2QueuedResourceMapOutput { + return i.ToV2QueuedResourceMapOutputWithContext(context.Background()) +} + +func (i V2QueuedResourceMap) ToV2QueuedResourceMapOutputWithContext(ctx context.Context) V2QueuedResourceMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(V2QueuedResourceMapOutput) +} + +type V2QueuedResourceOutput struct{ *pulumi.OutputState } + +func (V2QueuedResourceOutput) ElementType() reflect.Type { + return reflect.TypeOf((**V2QueuedResource)(nil)).Elem() +} + +func (o V2QueuedResourceOutput) ToV2QueuedResourceOutput() V2QueuedResourceOutput { + return o +} + +func (o V2QueuedResourceOutput) ToV2QueuedResourceOutputWithContext(ctx context.Context) V2QueuedResourceOutput { + return o +} + +// The immutable name of the Queued Resource. +// +// *** +func (o V2QueuedResourceOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *V2QueuedResource) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o V2QueuedResourceOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *V2QueuedResource) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// Defines a TPU resource. +// Structure is documented below. +func (o V2QueuedResourceOutput) Tpu() V2QueuedResourceTpuPtrOutput { + return o.ApplyT(func(v *V2QueuedResource) V2QueuedResourceTpuPtrOutput { return v.Tpu }).(V2QueuedResourceTpuPtrOutput) +} + +// The GCP location for the Queued Resource. If it is not provided, the provider zone is used. +func (o V2QueuedResourceOutput) Zone() pulumi.StringOutput { + return o.ApplyT(func(v *V2QueuedResource) pulumi.StringOutput { return v.Zone }).(pulumi.StringOutput) +} + +type V2QueuedResourceArrayOutput struct{ *pulumi.OutputState } + +func (V2QueuedResourceArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*V2QueuedResource)(nil)).Elem() +} + +func (o V2QueuedResourceArrayOutput) ToV2QueuedResourceArrayOutput() V2QueuedResourceArrayOutput { + return o +} + +func (o V2QueuedResourceArrayOutput) ToV2QueuedResourceArrayOutputWithContext(ctx context.Context) V2QueuedResourceArrayOutput { + return o +} + +func (o V2QueuedResourceArrayOutput) Index(i pulumi.IntInput) V2QueuedResourceOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *V2QueuedResource { + return vs[0].([]*V2QueuedResource)[vs[1].(int)] + }).(V2QueuedResourceOutput) +} + +type V2QueuedResourceMapOutput struct{ *pulumi.OutputState } + +func (V2QueuedResourceMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*V2QueuedResource)(nil)).Elem() +} + +func (o V2QueuedResourceMapOutput) ToV2QueuedResourceMapOutput() V2QueuedResourceMapOutput { + return o +} + +func (o V2QueuedResourceMapOutput) ToV2QueuedResourceMapOutputWithContext(ctx context.Context) V2QueuedResourceMapOutput { + return o +} + +func (o V2QueuedResourceMapOutput) MapIndex(k pulumi.StringInput) V2QueuedResourceOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *V2QueuedResource { + return vs[0].(map[string]*V2QueuedResource)[vs[1].(string)] + }).(V2QueuedResourceOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*V2QueuedResourceInput)(nil)).Elem(), &V2QueuedResource{}) + pulumi.RegisterInputType(reflect.TypeOf((*V2QueuedResourceArrayInput)(nil)).Elem(), V2QueuedResourceArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*V2QueuedResourceMapInput)(nil)).Elem(), V2QueuedResourceMap{}) + pulumi.RegisterOutputType(V2QueuedResourceOutput{}) + pulumi.RegisterOutputType(V2QueuedResourceArrayOutput{}) + pulumi.RegisterOutputType(V2QueuedResourceMapOutput{}) +} diff --git a/sdk/go/gcp/vertex/aiEndpoint.go b/sdk/go/gcp/vertex/aiEndpoint.go index eed0782e09..96f0b4227a 100644 --- a/sdk/go/gcp/vertex/aiEndpoint.go +++ b/sdk/go/gcp/vertex/aiEndpoint.go @@ -155,7 +155,7 @@ import ( // return err // } // _, err = vertex.NewAiEndpoint(ctx, "endpoint", &vertex.AiEndpointArgs{ -// Name: pulumi.String("endpoint-name_69391"), +// Name: pulumi.String("endpoint-name_8270"), // DisplayName: pulumi.String("sample-endpoint"), // Description: pulumi.String("A sample vertex endpoint"), // Location: pulumi.String("us-central1"), @@ -195,7 +195,7 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := vertex.NewAiEndpoint(ctx, "endpoint", &vertex.AiEndpointArgs{ -// Name: pulumi.String("endpoint-name_8270"), +// Name: pulumi.String("endpoint-name_41150"), // DisplayName: pulumi.String("sample-endpoint"), // Description: pulumi.String("A sample vertex endpoint"), // Location: pulumi.String("us-central1"), diff --git a/sdk/go/gcp/vertex/aiFeatureOnlineStoreFeatureview.go b/sdk/go/gcp/vertex/aiFeatureOnlineStoreFeatureview.go index c5434baa3a..fe4d735e0c 100644 --- a/sdk/go/gcp/vertex/aiFeatureOnlineStoreFeatureview.go +++ b/sdk/go/gcp/vertex/aiFeatureOnlineStoreFeatureview.go @@ -286,8 +286,8 @@ import ( // return err // } // project, err := organizations.NewProject(ctx, "project", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test_41150"), -// Name: pulumi.String("tf-test_89313"), +// ProjectId: pulumi.String("tf-test_89313"), +// Name: pulumi.String("tf-test_60646"), // OrgId: pulumi.String("123456789"), // BillingAccount: pulumi.String("000000-0000000-0000000-000000"), // DeletionPolicy: pulumi.String("DELETE"), diff --git a/sdk/go/gcp/vertex/aiIndexEndpoint.go b/sdk/go/gcp/vertex/aiIndexEndpoint.go index 7477282a1a..6fb5f5b641 100644 --- a/sdk/go/gcp/vertex/aiIndexEndpoint.go +++ b/sdk/go/gcp/vertex/aiIndexEndpoint.go @@ -119,7 +119,7 @@ import ( // PrivateServiceConnectConfig: &vertex.AiIndexEndpointPrivateServiceConnectConfigArgs{ // EnablePrivateServiceConnect: pulumi.Bool(true), // ProjectAllowlists: pulumi.StringArray{ -// pulumi.String(project.Number), +// pulumi.String(project.Name), // }, // }, // }) diff --git a/sdk/java/src/main/java/com/pulumi/gcp/Config.java b/sdk/java/src/main/java/com/pulumi/gcp/Config.java index 5d21ed9ba1..5184455513 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Config.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Config.java @@ -285,6 +285,9 @@ public Optional firebaserulesCustomEndpoint() { public Optional firestoreCustomEndpoint() { return Codegen.stringProp("firestoreCustomEndpoint").config(config).get(); } + public Optional geminiCustomEndpoint() { + return Codegen.stringProp("geminiCustomEndpoint").config(config).get(); + } public Optional gkeBackupCustomEndpoint() { return Codegen.stringProp("gkeBackupCustomEndpoint").config(config).get(); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/Provider.java b/sdk/java/src/main/java/com/pulumi/gcp/Provider.java index 0d14e1fc55..5d14612013 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Provider.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Provider.java @@ -539,6 +539,12 @@ public Output> firebaserulesCustomEndpoint() { public Output> firestoreCustomEndpoint() { return Codegen.optional(this.firestoreCustomEndpoint); } + @Export(name="geminiCustomEndpoint", refs={String.class}, tree="[0]") + private Output geminiCustomEndpoint; + + public Output> geminiCustomEndpoint() { + return Codegen.optional(this.geminiCustomEndpoint); + } @Export(name="gkeBackupCustomEndpoint", refs={String.class}, tree="[0]") private Output gkeBackupCustomEndpoint; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java index 7ccf90e62a..cbe0a78729 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java @@ -650,6 +650,13 @@ public Optional> firestoreCustomEndpoint() { return Optional.ofNullable(this.firestoreCustomEndpoint); } + @Import(name="geminiCustomEndpoint") + private @Nullable Output geminiCustomEndpoint; + + public Optional> geminiCustomEndpoint() { + return Optional.ofNullable(this.geminiCustomEndpoint); + } + @Import(name="gkeBackupCustomEndpoint") private @Nullable Output gkeBackupCustomEndpoint; @@ -1366,6 +1373,7 @@ private ProviderArgs(ProviderArgs $) { this.firebaseStorageCustomEndpoint = $.firebaseStorageCustomEndpoint; this.firebaserulesCustomEndpoint = $.firebaserulesCustomEndpoint; this.firestoreCustomEndpoint = $.firestoreCustomEndpoint; + this.geminiCustomEndpoint = $.geminiCustomEndpoint; this.gkeBackupCustomEndpoint = $.gkeBackupCustomEndpoint; this.gkeHub2CustomEndpoint = $.gkeHub2CustomEndpoint; this.gkeHubCustomEndpoint = $.gkeHubCustomEndpoint; @@ -2285,6 +2293,15 @@ public Builder firestoreCustomEndpoint(String firestoreCustomEndpoint) { return firestoreCustomEndpoint(Output.of(firestoreCustomEndpoint)); } + public Builder geminiCustomEndpoint(@Nullable Output geminiCustomEndpoint) { + $.geminiCustomEndpoint = geminiCustomEndpoint; + return this; + } + + public Builder geminiCustomEndpoint(String geminiCustomEndpoint) { + return geminiCustomEndpoint(Output.of(geminiCustomEndpoint)); + } + public Builder gkeBackupCustomEndpoint(@Nullable Output gkeBackupCustomEndpoint) { $.gkeBackupCustomEndpoint = gkeBackupCustomEndpoint; return this; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeter.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeter.java index 09d65da087..d4dc238289 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeter.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeter.java @@ -356,6 +356,24 @@ public Output createTime() { public Output> description() { return Codegen.optional(this.description); } + /** + * 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. + * + */ + @Export(name="etag", refs={String.class}, tree="[0]") + private Output etag; + + /** + * @return 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 Output etag() { + return this.etag; + } /** * Resource name for the ServicePerimeter. The short_name component must * begin with a letter and only include alphanumeric and '_'. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunEgressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunEgressPolicy.java index e34940af0a..ca3c6bfcbd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunEgressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunEgressPolicy.java @@ -29,6 +29,9 @@ * > **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/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunIngressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunIngressPolicy.java index ea2129a489..7d513c1f7e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunIngressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterDryRunIngressPolicy.java @@ -30,6 +30,9 @@ * > **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/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterEgressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterEgressPolicy.java index 8af0ce3c16..104b885f96 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterEgressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterEgressPolicy.java @@ -29,6 +29,9 @@ * > **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/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterIngressPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterIngressPolicy.java index 0db3813b83..f211da8bed 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterIngressPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/ServicePerimeterIngressPolicy.java @@ -30,6 +30,9 @@ * > **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/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterState.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterState.java index a27b16c314..1fdc1a0ef6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimeterState.java @@ -50,6 +50,25 @@ public Optional> description() { return Optional.ofNullable(this.description); } + /** + * 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. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return 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 Optional> etag() { + return Optional.ofNullable(this.etag); + } + /** * Resource name for the ServicePerimeter. The short_name component must * begin with a letter and only include alphanumeric and '_'. @@ -245,6 +264,7 @@ private ServicePerimeterState() {} private ServicePerimeterState(ServicePerimeterState $) { this.createTime = $.createTime; this.description = $.description; + this.etag = $.etag; this.name = $.name; this.parent = $.parent; this.perimeterType = $.perimeterType; @@ -317,6 +337,31 @@ public Builder description(String description) { return description(Output.of(description)); } + /** + * @param etag 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. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag 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. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + /** * @param name Resource name for the ServicePerimeter. The short_name component must * begin with a letter and only include alphanumeric and '_'. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimetersServicePerimeterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimetersServicePerimeterArgs.java index d2a8e06e13..2b8070a22a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimetersServicePerimeterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/inputs/ServicePerimetersServicePerimeterArgs.java @@ -53,6 +53,27 @@ public Optional> description() { return Optional.ofNullable(this.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. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return (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 Optional> etag() { + return Optional.ofNullable(this.etag); + } + /** * Resource name for the ServicePerimeter. The short_name component must * begin with a letter and only include alphanumeric and '_'. @@ -229,6 +250,7 @@ private ServicePerimetersServicePerimeterArgs() {} private ServicePerimetersServicePerimeterArgs(ServicePerimetersServicePerimeterArgs $) { this.createTime = $.createTime; this.description = $.description; + this.etag = $.etag; this.name = $.name; this.perimeterType = $.perimeterType; this.spec = $.spec; @@ -302,6 +324,33 @@ public Builder description(String description) { return description(Output.of(description)); } + /** + * @param etag (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. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag (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. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + /** * @param name Resource name for the ServicePerimeter. The short_name component must * begin with a letter and only include alphanumeric and '_'. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/outputs/ServicePerimetersServicePerimeter.java b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/outputs/ServicePerimetersServicePerimeter.java index 7e17e6e3d6..2b7807912b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/outputs/ServicePerimetersServicePerimeter.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/accesscontextmanager/outputs/ServicePerimetersServicePerimeter.java @@ -27,6 +27,14 @@ public final class ServicePerimetersServicePerimeter { * */ private @Nullable String description; + /** + * @return (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. + * + */ + private @Nullable String etag; /** * @return Resource name for the ServicePerimeter. The short_name component must * begin with a letter and only include alphanumeric and '_'. @@ -113,6 +121,16 @@ public Optional createTime() { public Optional description() { return Optional.ofNullable(this.description); } + /** + * @return (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 Optional etag() { + return Optional.ofNullable(this.etag); + } /** * @return Resource name for the ServicePerimeter. The short_name component must * begin with a letter and only include alphanumeric and '_'. @@ -207,6 +225,7 @@ public static Builder builder(ServicePerimetersServicePerimeter defaults) { public static final class Builder { private @Nullable String createTime; private @Nullable String description; + private @Nullable String etag; private String name; private @Nullable String perimeterType; private @Nullable ServicePerimetersServicePerimeterSpec spec; @@ -219,6 +238,7 @@ public Builder(ServicePerimetersServicePerimeter defaults) { Objects.requireNonNull(defaults); this.createTime = defaults.createTime; this.description = defaults.description; + this.etag = defaults.etag; this.name = defaults.name; this.perimeterType = defaults.perimeterType; this.spec = defaults.spec; @@ -241,6 +261,12 @@ public Builder description(@Nullable String description) { return this; } @CustomType.Setter + public Builder etag(@Nullable String etag) { + + this.etag = etag; + return this; + } + @CustomType.Setter public Builder name(String name) { if (name == null) { throw new MissingRequiredPropertyException("ServicePerimetersServicePerimeter", "name"); @@ -290,6 +316,7 @@ public ServicePerimetersServicePerimeter build() { final var _resultValue = new ServicePerimetersServicePerimeter(); _resultValue.createTime = createTime; _resultValue.description = description; + _resultValue.etag = etag; _resultValue.name = name; _resultValue.perimeterType = perimeterType; _resultValue.spec = spec; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/AppGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/AppGroup.java index 91b1d43e1e..d128c56e31 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigee/AppGroup.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/AppGroup.java @@ -266,14 +266,14 @@ public Output>> attributes() { return Codegen.optional(this.attributes); } /** - * Channel identifier identifies the owner maintaing this grouping. + * Channel identifier identifies the owner maintaining this grouping. * */ @Export(name="channelId", refs={String.class}, tree="[0]") private Output channelId; /** - * @return Channel identifier identifies the owner maintaing this grouping. + * @return Channel identifier identifies the owner maintaining this grouping. * */ public Output> channelId() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/AppGroupArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/AppGroupArgs.java index c05b2d0105..a992a638ca 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigee/AppGroupArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/AppGroupArgs.java @@ -36,14 +36,14 @@ public Optional>> attributes() { } /** - * Channel identifier identifies the owner maintaing this grouping. + * Channel identifier identifies the owner maintaining this grouping. * */ @Import(name="channelId") private @Nullable Output channelId; /** - * @return Channel identifier identifies the owner maintaing this grouping. + * @return Channel identifier identifies the owner maintaining this grouping. * */ public Optional> channelId() { @@ -198,7 +198,7 @@ public Builder attributes(AppGroupAttributeArgs... attributes) { } /** - * @param channelId Channel identifier identifies the owner maintaing this grouping. + * @param channelId Channel identifier identifies the owner maintaining this grouping. * * @return builder * @@ -209,7 +209,7 @@ public Builder channelId(@Nullable Output channelId) { } /** - * @param channelId Channel identifier identifies the owner maintaing this grouping. + * @param channelId Channel identifier identifies the owner maintaining this grouping. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/inputs/AppGroupState.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/inputs/AppGroupState.java index 8d5ba35ffc..8dfab26dd3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigee/inputs/AppGroupState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/inputs/AppGroupState.java @@ -50,14 +50,14 @@ public Optional>> attributes() { } /** - * Channel identifier identifies the owner maintaing this grouping. + * Channel identifier identifies the owner maintaining this grouping. * */ @Import(name="channelId") private @Nullable Output channelId; /** - * @return Channel identifier identifies the owner maintaing this grouping. + * @return Channel identifier identifies the owner maintaining this grouping. * */ public Optional> channelId() { @@ -282,7 +282,7 @@ public Builder attributes(AppGroupAttributeArgs... attributes) { } /** - * @param channelId Channel identifier identifies the owner maintaing this grouping. + * @param channelId Channel identifier identifies the owner maintaining this grouping. * * @return builder * @@ -293,7 +293,7 @@ public Builder channelId(@Nullable Output channelId) { } /** - * @param channelId Channel identifier identifies the owner maintaing this grouping. + * @param channelId Channel identifier identifies the owner maintaining this grouping. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/Client.java b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/Client.java index c97d771294..08e7462ecc 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/Client.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/applicationintegration/Client.java @@ -126,9 +126,9 @@ * .runAsServiceAccount(serviceAccount.email()) * .cloudKmsConfig(ClientCloudKmsConfigArgs.builder() * .kmsLocation("us-east1") - * .kmsRing(keyring.id()) - * .key(cryptokey.id()) - * .keyVersion(testKey.id()) + * .kmsRing(StdFunctions.basename().applyValue(invoke -> invoke.result())) + * .key(StdFunctions.basename().applyValue(invoke -> invoke.result())) + * .keyVersion(StdFunctions.basename().applyValue(invoke -> invoke.result())) * .kmsProjectId(testProject.applyValue(getProjectResult -> getProjectResult.projectId())) * .build()) * .build()); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/Repository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/Repository.java index 77056abd53..4ce19ad611 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/Repository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/Repository.java @@ -941,6 +941,148 @@ * } * * <!--End PulumiCodeChooser --> + * ### Artifact Registry Repository Remote Common Repository With Artifact Registry Uri + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.organizations.OrganizationsFunctions;
+ * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
+ * import com.pulumi.gcp.artifactregistry.Repository;
+ * import com.pulumi.gcp.artifactregistry.RepositoryArgs;
+ * import com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;
+ * import com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         final var project = OrganizationsFunctions.getProject();
+ * 
+ *         var upstreamRepo = new Repository("upstreamRepo", RepositoryArgs.builder()
+ *             .location("us-central1")
+ *             .repositoryId("example-upstream-repo")
+ *             .description("example upstream repository")
+ *             .format("DOCKER")
+ *             .build());
+ * 
+ *         var my_repo = new Repository("my-repo", RepositoryArgs.builder()
+ *             .location("us-central1")
+ *             .repositoryId("example-common-remote")
+ *             .description("example remote common repository with docker upstream")
+ *             .format("DOCKER")
+ *             .mode("REMOTE_REPOSITORY")
+ *             .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()
+ *                 .description("pull-through cache of another Artifact Registry repository by URL")
+ *                 .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()
+ *                     .uri("https://us-central1-docker.pkg.dev//example-upstream-repo")
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Artifact Registry Repository Remote Common Repository With Custom Upstream + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.organizations.OrganizationsFunctions;
+ * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
+ * import com.pulumi.gcp.secretmanager.Secret;
+ * import com.pulumi.gcp.secretmanager.SecretArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;
+ * import com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;
+ * import com.pulumi.gcp.secretmanager.SecretVersion;
+ * import com.pulumi.gcp.secretmanager.SecretVersionArgs;
+ * import com.pulumi.gcp.secretmanager.SecretIamMember;
+ * import com.pulumi.gcp.secretmanager.SecretIamMemberArgs;
+ * import com.pulumi.gcp.artifactregistry.Repository;
+ * import com.pulumi.gcp.artifactregistry.RepositoryArgs;
+ * import com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigArgs;
+ * import com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigCommonRepositoryArgs;
+ * import com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs;
+ * import com.pulumi.gcp.artifactregistry.inputs.RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App }{{@code
+ *     public static void main(String[] args) }{{@code
+ *         Pulumi.run(App::stack);
+ *     }}{@code
+ * 
+ *     public static void stack(Context ctx) }{{@code
+ *         final var project = OrganizationsFunctions.getProject();
+ * 
+ *         var example_remote_secret = new Secret("example-remote-secret", SecretArgs.builder()
+ *             .secretId("example-secret")
+ *             .replication(SecretReplicationArgs.builder()
+ *                 .auto()
+ *                 .build())
+ *             .build());
+ * 
+ *         var example_remote_secretVersion = new SecretVersion("example-remote-secretVersion", SecretVersionArgs.builder()
+ *             .secret(example_remote_secret.id())
+ *             .secretData("remote-password")
+ *             .build());
+ * 
+ *         var secret_access = new SecretIamMember("secret-access", SecretIamMemberArgs.builder()
+ *             .secretId(example_remote_secret.id())
+ *             .role("roles/secretmanager.secretAccessor")
+ *             .member(String.format("serviceAccount:service-%s}{@literal @}{@code gcp-sa-artifactregistry.iam.gserviceaccount.com", project.applyValue(getProjectResult -> getProjectResult.number())))
+ *             .build());
+ * 
+ *         var my_repo = new Repository("my-repo", RepositoryArgs.builder()
+ *             .location("us-central1")
+ *             .repositoryId("example-docker-custom-remote")
+ *             .description("example remote custom docker repository with credentials")
+ *             .format("DOCKER")
+ *             .mode("REMOTE_REPOSITORY")
+ *             .remoteRepositoryConfig(RepositoryRemoteRepositoryConfigArgs.builder()
+ *                 .description("custom common docker remote with credentials")
+ *                 .disableUpstreamValidation(true)
+ *                 .commonRepository(RepositoryRemoteRepositoryConfigCommonRepositoryArgs.builder()
+ *                     .uri("https://registry-1.docker.io")
+ *                     .build())
+ *                 .upstreamCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsArgs.builder()
+ *                     .usernamePasswordCredentials(RepositoryRemoteRepositoryConfigUpstreamCredentialsUsernamePasswordCredentialsArgs.builder()
+ *                         .username("remote-username")
+ *                         .passwordSecretVersion(example_remote_secretVersion.name())
+ *                         .build())
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }}{@code
+ * }}{@code
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/inputs/RepositoryRemoteRepositoryConfigCommonRepositoryArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/inputs/RepositoryRemoteRepositoryConfigCommonRepositoryArgs.java index c919d19d0d..5f60319955 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/inputs/RepositoryRemoteRepositoryConfigCommonRepositoryArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/inputs/RepositoryRemoteRepositoryConfigCommonRepositoryArgs.java @@ -15,14 +15,20 @@ public final class RepositoryRemoteRepositoryConfigCommonRepositoryArgs extends public static final RepositoryRemoteRepositoryConfigCommonRepositoryArgs Empty = new RepositoryRemoteRepositoryConfigCommonRepositoryArgs(); /** - * 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"` * */ @Import(name="uri", required=true) private Output uri; /** - * @return Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY` + * @return 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 Output uri() { @@ -54,7 +60,10 @@ public Builder(RepositoryRemoteRepositoryConfigCommonRepositoryArgs defaults) { } /** - * @param uri Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY` + * @param uri 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"` * * @return builder * @@ -65,7 +74,10 @@ public Builder uri(Output uri) { } /** - * @param uri Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY` + * @param uri 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"` * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/inputs/RepositoryRemoteRepositoryConfigDockerRepositoryArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/inputs/RepositoryRemoteRepositoryConfigDockerRepositoryArgs.java index 67a434a415..3bccb1cf0a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/inputs/RepositoryRemoteRepositoryConfigDockerRepositoryArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/inputs/RepositoryRemoteRepositoryConfigDockerRepositoryArgs.java @@ -17,7 +17,7 @@ public final class RepositoryRemoteRepositoryConfigDockerRepositoryArgs extends public static final RepositoryRemoteRepositoryConfigDockerRepositoryArgs Empty = new RepositoryRemoteRepositoryConfigDockerRepositoryArgs(); /** - * 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. * */ @@ -25,7 +25,7 @@ public final class RepositoryRemoteRepositoryConfigDockerRepositoryArgs extends private @Nullable Output customRepository; /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ @@ -78,7 +78,7 @@ public Builder(RepositoryRemoteRepositoryConfigDockerRepositoryArgs defaults) { } /** - * @param customRepository Settings for a remote repository with a custom uri. + * @param customRepository [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * * @return builder @@ -90,7 +90,7 @@ public Builder customRepository(@Nullable Output customRepository; /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ @@ -78,7 +78,7 @@ public Builder(RepositoryRemoteRepositoryConfigMavenRepositoryArgs defaults) { } /** - * @param customRepository Settings for a remote repository with a custom uri. + * @param customRepository [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * * @return builder @@ -90,7 +90,7 @@ public Builder customRepository(@Nullable Output customRepository; /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ @@ -78,7 +78,7 @@ public Builder(RepositoryRemoteRepositoryConfigNpmRepositoryArgs defaults) { } /** - * @param customRepository Settings for a remote repository with a custom uri. + * @param customRepository [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * * @return builder @@ -90,7 +90,7 @@ public Builder customRepository(@Nullable Output customRepository; /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ @@ -78,7 +78,7 @@ public Builder(RepositoryRemoteRepositoryConfigPythonRepositoryArgs defaults) { } /** - * @param customRepository Settings for a remote repository with a custom uri. + * @param customRepository [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * * @return builder @@ -90,7 +90,7 @@ public Builder customRepository(@Nullable Output customRepositories; @@ -25,7 +25,7 @@ public final class GetRepositoryRemoteRepositoryConfigDockerRepository { private GetRepositoryRemoteRepositoryConfigDockerRepository() {} /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * */ public List customRepositories() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigMavenRepository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigMavenRepository.java index 99c95d8821..fc2431b7e5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigMavenRepository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigMavenRepository.java @@ -13,7 +13,7 @@ @CustomType public final class GetRepositoryRemoteRepositoryConfigMavenRepository { /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * */ private List customRepositories; @@ -25,7 +25,7 @@ public final class GetRepositoryRemoteRepositoryConfigMavenRepository { private GetRepositoryRemoteRepositoryConfigMavenRepository() {} /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * */ public List customRepositories() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigNpmRepository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigNpmRepository.java index ebf8787929..944cbaa46f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigNpmRepository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigNpmRepository.java @@ -13,7 +13,7 @@ @CustomType public final class GetRepositoryRemoteRepositoryConfigNpmRepository { /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * */ private List customRepositories; @@ -25,7 +25,7 @@ public final class GetRepositoryRemoteRepositoryConfigNpmRepository { private GetRepositoryRemoteRepositoryConfigNpmRepository() {} /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * */ public List customRepositories() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigPythonRepository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigPythonRepository.java index e331cd82c9..4b92267418 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigPythonRepository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/GetRepositoryRemoteRepositoryConfigPythonRepository.java @@ -13,7 +13,7 @@ @CustomType public final class GetRepositoryRemoteRepositoryConfigPythonRepository { /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * */ private List customRepositories; @@ -25,7 +25,7 @@ public final class GetRepositoryRemoteRepositoryConfigPythonRepository { private GetRepositoryRemoteRepositoryConfigPythonRepository() {} /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * */ public List customRepositories() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigCommonRepository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigCommonRepository.java index 41935e2060..65b9655e60 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigCommonRepository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigCommonRepository.java @@ -11,14 +11,20 @@ @CustomType public final class RepositoryRemoteRepositoryConfigCommonRepository { /** - * @return Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY` + * @return 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"` * */ private String uri; private RepositoryRemoteRepositoryConfigCommonRepository() {} /** - * @return Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY` + * @return 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 String uri() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigDockerRepository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigDockerRepository.java index 8b2be01dd8..de4b25c688 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigDockerRepository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigDockerRepository.java @@ -13,7 +13,7 @@ @CustomType public final class RepositoryRemoteRepositoryConfigDockerRepository { /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ @@ -28,7 +28,7 @@ public final class RepositoryRemoteRepositoryConfigDockerRepository { private RepositoryRemoteRepositoryConfigDockerRepository() {} /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigMavenRepository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigMavenRepository.java index 6c8fa10f5b..03bc932422 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigMavenRepository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigMavenRepository.java @@ -13,7 +13,7 @@ @CustomType public final class RepositoryRemoteRepositoryConfigMavenRepository { /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ @@ -28,7 +28,7 @@ public final class RepositoryRemoteRepositoryConfigMavenRepository { private RepositoryRemoteRepositoryConfigMavenRepository() {} /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigNpmRepository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigNpmRepository.java index 0b23bce914..c60cf7b6ec 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigNpmRepository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigNpmRepository.java @@ -13,7 +13,7 @@ @CustomType public final class RepositoryRemoteRepositoryConfigNpmRepository { /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ @@ -28,7 +28,7 @@ public final class RepositoryRemoteRepositoryConfigNpmRepository { private RepositoryRemoteRepositoryConfigNpmRepository() {} /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigPythonRepository.java b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigPythonRepository.java index 46a8d5c592..ccc9eff59b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigPythonRepository.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/artifactregistry/outputs/RepositoryRemoteRepositoryConfigPythonRepository.java @@ -13,7 +13,7 @@ @CustomType public final class RepositoryRemoteRepositoryConfigPythonRepository { /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ @@ -28,7 +28,7 @@ public final class RepositoryRemoteRepositoryConfigPythonRepository { private RepositoryRemoteRepositoryConfigPythonRepository() {} /** - * @return Settings for a remote repository with a custom uri. + * @return [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/Workload.java b/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/Workload.java index 82e705345a..0fdfaf1af5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/Workload.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/Workload.java @@ -247,14 +247,14 @@ public Output> billingAccount() { return Codegen.optional(this.billingAccount); } /** - * 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 * */ @Export(name="complianceRegime", refs={String.class}, tree="[0]") private Output complianceRegime; /** - * @return 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 + * @return 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 * */ public Output complianceRegime() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/WorkloadArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/WorkloadArgs.java index 837bb50845..15858d5103 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/WorkloadArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/WorkloadArgs.java @@ -39,14 +39,14 @@ public Optional> billingAccount() { } /** - * 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 * */ @Import(name="complianceRegime", required=true) private Output complianceRegime; /** - * @return 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 + * @return 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 * */ public Output complianceRegime() { @@ -318,7 +318,7 @@ public Builder billingAccount(String billingAccount) { } /** - * @param complianceRegime 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 + * @param complianceRegime 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 * * @return builder * @@ -329,7 +329,7 @@ public Builder complianceRegime(Output complianceRegime) { } /** - * @param complianceRegime 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 + * @param complianceRegime 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 * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/inputs/WorkloadState.java b/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/inputs/WorkloadState.java index 9b7dfb1ad1..6dae06e213 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/inputs/WorkloadState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/assuredworkloads/inputs/WorkloadState.java @@ -42,14 +42,14 @@ public Optional> billingAccount() { } /** - * 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 * */ @Import(name="complianceRegime") private @Nullable Output complianceRegime; /** - * @return 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 + * @return 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 * */ public Optional> complianceRegime() { @@ -481,7 +481,7 @@ public Builder billingAccount(String billingAccount) { } /** - * @param complianceRegime 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 + * @param complianceRegime 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 * * @return builder * @@ -492,7 +492,7 @@ public Builder complianceRegime(@Nullable Output complianceRegime) { } /** - * @param complianceRegime 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 + * @param complianceRegime 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 * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupPlan.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupPlan.java index 5dc9233552..2c7a160b70 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupPlan.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupPlan.java @@ -51,7 +51,7 @@ * public static void stack(Context ctx) { * var myBackupVault = new BackupVault("myBackupVault", BackupVaultArgs.builder() * .location("us-central1") - * .backupVaultId("bv-bp-test") + * .backupVaultId("backup-vault-simple-test") * .backupMinimumEnforcedRetentionDuration("100000s") * .build()); * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupVault.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupVault.java index 8545a521dc..cb8dcc9e58 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupVault.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupVault.java @@ -18,6 +18,8 @@ import javax.annotation.Nullable; /** + * Container to store and organize immutable and indelible backups. + * * ## Example Usage * * ### Backup Dr Backup Vault Full @@ -50,14 +52,14 @@ * .backupVaultId("backup-vault-test") * .description("This is a second backup vault built by Terraform.") * .backupMinimumEnforcedRetentionDuration("100000s") - * .labels(Map.ofEntries( - * Map.entry("foo", "bar1"), - * Map.entry("bar", "baz1") - * )) * .annotations(Map.ofEntries( * Map.entry("annotations1", "bar1"), * Map.entry("annotations2", "baz1") * )) + * .labels(Map.ofEntries( + * Map.entry("foo", "bar1"), + * Map.entry("bar", "baz1") + * )) * .forceUpdate("true") * .accessRestriction("WITHIN_ORGANIZATION") * .ignoreInactiveDatasources("true") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupdisasterrecoveryFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupdisasterrecoveryFunctions.java index 55ad34fd3f..569a1d04ed 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupdisasterrecoveryFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/BackupdisasterrecoveryFunctions.java @@ -8,21 +8,39 @@ import com.pulumi.deployment.Deployment; import com.pulumi.deployment.InvokeOptions; import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupArgs; +import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupPlainArgs; import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupPlanArgs; import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupPlanAssociationArgs; import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupPlanAssociationPlainArgs; import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupPlanPlainArgs; +import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupVaultArgs; +import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupVaultPlainArgs; import com.pulumi.gcp.backupdisasterrecovery.inputs.GetDataSourceArgs; import com.pulumi.gcp.backupdisasterrecovery.inputs.GetDataSourcePlainArgs; import com.pulumi.gcp.backupdisasterrecovery.inputs.GetManagementServerArgs; import com.pulumi.gcp.backupdisasterrecovery.inputs.GetManagementServerPlainArgs; import com.pulumi.gcp.backupdisasterrecovery.outputs.GetBackupPlanAssociationResult; import com.pulumi.gcp.backupdisasterrecovery.outputs.GetBackupPlanResult; +import com.pulumi.gcp.backupdisasterrecovery.outputs.GetBackupResult; +import com.pulumi.gcp.backupdisasterrecovery.outputs.GetBackupVaultResult; import com.pulumi.gcp.backupdisasterrecovery.outputs.GetDataSourceResult; import com.pulumi.gcp.backupdisasterrecovery.outputs.GetManagementServerResult; import java.util.concurrent.CompletableFuture; public final class BackupdisasterrecoveryFunctions { + public static Output getBackup(GetBackupArgs args) { + return getBackup(args, InvokeOptions.Empty); + } + public static CompletableFuture getBackupPlain(GetBackupPlainArgs args) { + return getBackupPlain(args, InvokeOptions.Empty); + } + public static Output getBackup(GetBackupArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("gcp:backupdisasterrecovery/getBackup:getBackup", TypeShape.of(GetBackupResult.class), args, Utilities.withVersion(options)); + } + public static CompletableFuture getBackupPlain(GetBackupPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("gcp:backupdisasterrecovery/getBackup:getBackup", TypeShape.of(GetBackupResult.class), args, Utilities.withVersion(options)); + } public static Output getBackupPlan(GetBackupPlanArgs args) { return getBackupPlan(args, InvokeOptions.Empty); } @@ -199,6 +217,178 @@ public static Output getBackupPlanAssociation(Ge public static CompletableFuture getBackupPlanAssociationPlain(GetBackupPlanAssociationPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:backupdisasterrecovery/getBackupPlanAssociation:getBackupPlanAssociation", TypeShape.of(GetBackupPlanAssociationResult.class), args, Utilities.withVersion(options)); } + /** + * A Backup and DRBackupVault. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.backupdisasterrecovery.BackupdisasterrecoveryFunctions;
+     * import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupVaultArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var my-backup-vault = BackupdisasterrecoveryFunctions.getBackupVault(GetBackupVaultArgs.builder()
+     *             .location("us-central1")
+     *             .backupVaultId("bv-1")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getBackupVault(GetBackupVaultArgs args) { + return getBackupVault(args, InvokeOptions.Empty); + } + /** + * A Backup and DRBackupVault. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.backupdisasterrecovery.BackupdisasterrecoveryFunctions;
+     * import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupVaultArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var my-backup-vault = BackupdisasterrecoveryFunctions.getBackupVault(GetBackupVaultArgs.builder()
+     *             .location("us-central1")
+     *             .backupVaultId("bv-1")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getBackupVaultPlain(GetBackupVaultPlainArgs args) { + return getBackupVaultPlain(args, InvokeOptions.Empty); + } + /** + * A Backup and DRBackupVault. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.backupdisasterrecovery.BackupdisasterrecoveryFunctions;
+     * import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupVaultArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var my-backup-vault = BackupdisasterrecoveryFunctions.getBackupVault(GetBackupVaultArgs.builder()
+     *             .location("us-central1")
+     *             .backupVaultId("bv-1")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static Output getBackupVault(GetBackupVaultArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("gcp:backupdisasterrecovery/getBackupVault:getBackupVault", TypeShape.of(GetBackupVaultResult.class), args, Utilities.withVersion(options)); + } + /** + * A Backup and DRBackupVault. + * + * ## Example Usage + * + * <!--Start PulumiCodeChooser --> + *
+     * {@code
+     * package generated_program;
+     * 
+     * import com.pulumi.Context;
+     * import com.pulumi.Pulumi;
+     * import com.pulumi.core.Output;
+     * import com.pulumi.gcp.backupdisasterrecovery.BackupdisasterrecoveryFunctions;
+     * import com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupVaultArgs;
+     * import java.util.List;
+     * import java.util.ArrayList;
+     * import java.util.Map;
+     * import java.io.File;
+     * import java.nio.file.Files;
+     * import java.nio.file.Paths;
+     * 
+     * public class App {
+     *     public static void main(String[] args) {
+     *         Pulumi.run(App::stack);
+     *     }
+     * 
+     *     public static void stack(Context ctx) {
+     *         final var my-backup-vault = BackupdisasterrecoveryFunctions.getBackupVault(GetBackupVaultArgs.builder()
+     *             .location("us-central1")
+     *             .backupVaultId("bv-1")
+     *             .build());
+     * 
+     *     }
+     * }
+     * }
+     * 
+ * <!--End PulumiCodeChooser --> + * + */ + public static CompletableFuture getBackupVaultPlain(GetBackupVaultPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("gcp:backupdisasterrecovery/getBackupVault:getBackupVault", TypeShape.of(GetBackupVaultResult.class), args, Utilities.withVersion(options)); + } public static Output getDataSource(GetDataSourceArgs args) { return getDataSource(args, InvokeOptions.Empty); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupArgs.java new file mode 100644 index 0000000000..dbbc459198 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupArgs.java @@ -0,0 +1,125 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.backupdisasterrecovery.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetBackupArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetBackupArgs Empty = new GetBackupArgs(); + + @Import(name="backupVaultId", required=true) + private Output backupVaultId; + + public Output backupVaultId() { + return this.backupVaultId; + } + + @Import(name="dataSourceId", required=true) + private Output dataSourceId; + + public Output dataSourceId() { + return this.dataSourceId; + } + + @Import(name="location", required=true) + private Output location; + + public Output location() { + return this.location; + } + + @Import(name="project", required=true) + private Output project; + + public Output project() { + return this.project; + } + + private GetBackupArgs() {} + + private GetBackupArgs(GetBackupArgs $) { + this.backupVaultId = $.backupVaultId; + this.dataSourceId = $.dataSourceId; + this.location = $.location; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetBackupArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetBackupArgs $; + + public Builder() { + $ = new GetBackupArgs(); + } + + public Builder(GetBackupArgs defaults) { + $ = new GetBackupArgs(Objects.requireNonNull(defaults)); + } + + public Builder backupVaultId(Output backupVaultId) { + $.backupVaultId = backupVaultId; + return this; + } + + public Builder backupVaultId(String backupVaultId) { + return backupVaultId(Output.of(backupVaultId)); + } + + public Builder dataSourceId(Output dataSourceId) { + $.dataSourceId = dataSourceId; + return this; + } + + public Builder dataSourceId(String dataSourceId) { + return dataSourceId(Output.of(dataSourceId)); + } + + public Builder location(Output location) { + $.location = location; + return this; + } + + public Builder location(String location) { + return location(Output.of(location)); + } + + public Builder project(Output project) { + $.project = project; + return this; + } + + public Builder project(String project) { + return project(Output.of(project)); + } + + public GetBackupArgs build() { + if ($.backupVaultId == null) { + throw new MissingRequiredPropertyException("GetBackupArgs", "backupVaultId"); + } + if ($.dataSourceId == null) { + throw new MissingRequiredPropertyException("GetBackupArgs", "dataSourceId"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("GetBackupArgs", "location"); + } + if ($.project == null) { + throw new MissingRequiredPropertyException("GetBackupArgs", "project"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupPlainArgs.java new file mode 100644 index 0000000000..559c36dda4 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupPlainArgs.java @@ -0,0 +1,108 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.backupdisasterrecovery.inputs; + +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class GetBackupPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetBackupPlainArgs Empty = new GetBackupPlainArgs(); + + @Import(name="backupVaultId", required=true) + private String backupVaultId; + + public String backupVaultId() { + return this.backupVaultId; + } + + @Import(name="dataSourceId", required=true) + private String dataSourceId; + + public String dataSourceId() { + return this.dataSourceId; + } + + @Import(name="location", required=true) + private String location; + + public String location() { + return this.location; + } + + @Import(name="project", required=true) + private String project; + + public String project() { + return this.project; + } + + private GetBackupPlainArgs() {} + + private GetBackupPlainArgs(GetBackupPlainArgs $) { + this.backupVaultId = $.backupVaultId; + this.dataSourceId = $.dataSourceId; + this.location = $.location; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetBackupPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetBackupPlainArgs $; + + public Builder() { + $ = new GetBackupPlainArgs(); + } + + public Builder(GetBackupPlainArgs defaults) { + $ = new GetBackupPlainArgs(Objects.requireNonNull(defaults)); + } + + public Builder backupVaultId(String backupVaultId) { + $.backupVaultId = backupVaultId; + return this; + } + + public Builder dataSourceId(String dataSourceId) { + $.dataSourceId = dataSourceId; + return this; + } + + public Builder location(String location) { + $.location = location; + return this; + } + + public Builder project(String project) { + $.project = project; + return this; + } + + public GetBackupPlainArgs build() { + if ($.backupVaultId == null) { + throw new MissingRequiredPropertyException("GetBackupPlainArgs", "backupVaultId"); + } + if ($.dataSourceId == null) { + throw new MissingRequiredPropertyException("GetBackupPlainArgs", "dataSourceId"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("GetBackupPlainArgs", "location"); + } + if ($.project == null) { + throw new MissingRequiredPropertyException("GetBackupPlainArgs", "project"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupVaultArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupVaultArgs.java new file mode 100644 index 0000000000..8795697225 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupVaultArgs.java @@ -0,0 +1,176 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.backupdisasterrecovery.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class GetBackupVaultArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetBackupVaultArgs Empty = new GetBackupVaultArgs(); + + /** + * The id of Backup Vault resource. + * + * *** + * + */ + @Import(name="backupVaultId", required=true) + private Output backupVaultId; + + /** + * @return The id of Backup Vault resource. + * + * *** + * + */ + public Output backupVaultId() { + return this.backupVaultId; + } + + /** + * The location in which the Backup Vault resource belongs. + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location in which the Backup Vault resource belongs. + * + */ + public Output location() { + return this.location; + } + + /** + * The project in which the resource belongs. If it + * is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The project in which the resource belongs. If it + * is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private GetBackupVaultArgs() {} + + private GetBackupVaultArgs(GetBackupVaultArgs $) { + this.backupVaultId = $.backupVaultId; + this.location = $.location; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetBackupVaultArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetBackupVaultArgs $; + + public Builder() { + $ = new GetBackupVaultArgs(); + } + + public Builder(GetBackupVaultArgs defaults) { + $ = new GetBackupVaultArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param backupVaultId The id of Backup Vault resource. + * + * *** + * + * @return builder + * + */ + public Builder backupVaultId(Output backupVaultId) { + $.backupVaultId = backupVaultId; + return this; + } + + /** + * @param backupVaultId The id of Backup Vault resource. + * + * *** + * + * @return builder + * + */ + public Builder backupVaultId(String backupVaultId) { + return backupVaultId(Output.of(backupVaultId)); + } + + /** + * @param location The location in which the Backup Vault resource belongs. + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location in which the Backup Vault resource belongs. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param project The project in which the resource belongs. If it + * is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The project in which the resource belongs. If it + * is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public GetBackupVaultArgs build() { + if ($.backupVaultId == null) { + throw new MissingRequiredPropertyException("GetBackupVaultArgs", "backupVaultId"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("GetBackupVaultArgs", "location"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupVaultPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupVaultPlainArgs.java new file mode 100644 index 0000000000..0e2ac1f79e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/inputs/GetBackupVaultPlainArgs.java @@ -0,0 +1,142 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.backupdisasterrecovery.inputs; + +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class GetBackupVaultPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetBackupVaultPlainArgs Empty = new GetBackupVaultPlainArgs(); + + /** + * The id of Backup Vault resource. + * + * *** + * + */ + @Import(name="backupVaultId", required=true) + private String backupVaultId; + + /** + * @return The id of Backup Vault resource. + * + * *** + * + */ + public String backupVaultId() { + return this.backupVaultId; + } + + /** + * The location in which the Backup Vault resource belongs. + * + */ + @Import(name="location", required=true) + private String location; + + /** + * @return The location in which the Backup Vault resource belongs. + * + */ + public String location() { + return this.location; + } + + /** + * The project in which the resource belongs. If it + * is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable String project; + + /** + * @return The project in which the resource belongs. If it + * is not provided, the provider project is used. + * + */ + public Optional project() { + return Optional.ofNullable(this.project); + } + + private GetBackupVaultPlainArgs() {} + + private GetBackupVaultPlainArgs(GetBackupVaultPlainArgs $) { + this.backupVaultId = $.backupVaultId; + this.location = $.location; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetBackupVaultPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetBackupVaultPlainArgs $; + + public Builder() { + $ = new GetBackupVaultPlainArgs(); + } + + public Builder(GetBackupVaultPlainArgs defaults) { + $ = new GetBackupVaultPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param backupVaultId The id of Backup Vault resource. + * + * *** + * + * @return builder + * + */ + public Builder backupVaultId(String backupVaultId) { + $.backupVaultId = backupVaultId; + return this; + } + + /** + * @param location The location in which the Backup Vault resource belongs. + * + * @return builder + * + */ + public Builder location(String location) { + $.location = location; + return this; + } + + /** + * @param project The project in which the resource belongs. If it + * is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable String project) { + $.project = project; + return this; + } + + public GetBackupVaultPlainArgs build() { + if ($.backupVaultId == null) { + throw new MissingRequiredPropertyException("GetBackupVaultPlainArgs", "backupVaultId"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("GetBackupVaultPlainArgs", "location"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/outputs/GetBackupBackup.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/outputs/GetBackupBackup.java new file mode 100644 index 0000000000..f5c94468ae --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/outputs/GetBackupBackup.java @@ -0,0 +1,150 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.backupdisasterrecovery.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetBackupBackup { + /** + * @return Id of the requesting object, Backup. + * + */ + private String backupId; + /** + * @return Name of the Backup Vault associated with Backup. + * + */ + private String backupVaultId; + /** + * @return Name of the Data Source associated with Backup. + * + */ + private String dataSourceId; + /** + * @return Location of the resource. + * + */ + private String location; + /** + * @return Name of the resource. + * + */ + private String name; + + private GetBackupBackup() {} + /** + * @return Id of the requesting object, Backup. + * + */ + public String backupId() { + return this.backupId; + } + /** + * @return Name of the Backup Vault associated with Backup. + * + */ + public String backupVaultId() { + return this.backupVaultId; + } + /** + * @return Name of the Data Source associated with Backup. + * + */ + public String dataSourceId() { + return this.dataSourceId; + } + /** + * @return Location of the resource. + * + */ + public String location() { + return this.location; + } + /** + * @return Name of the resource. + * + */ + public String name() { + return this.name; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetBackupBackup defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String backupId; + private String backupVaultId; + private String dataSourceId; + private String location; + private String name; + public Builder() {} + public Builder(GetBackupBackup defaults) { + Objects.requireNonNull(defaults); + this.backupId = defaults.backupId; + this.backupVaultId = defaults.backupVaultId; + this.dataSourceId = defaults.dataSourceId; + this.location = defaults.location; + this.name = defaults.name; + } + + @CustomType.Setter + public Builder backupId(String backupId) { + if (backupId == null) { + throw new MissingRequiredPropertyException("GetBackupBackup", "backupId"); + } + this.backupId = backupId; + return this; + } + @CustomType.Setter + public Builder backupVaultId(String backupVaultId) { + if (backupVaultId == null) { + throw new MissingRequiredPropertyException("GetBackupBackup", "backupVaultId"); + } + this.backupVaultId = backupVaultId; + return this; + } + @CustomType.Setter + public Builder dataSourceId(String dataSourceId) { + if (dataSourceId == null) { + throw new MissingRequiredPropertyException("GetBackupBackup", "dataSourceId"); + } + this.dataSourceId = dataSourceId; + return this; + } + @CustomType.Setter + public Builder location(String location) { + if (location == null) { + throw new MissingRequiredPropertyException("GetBackupBackup", "location"); + } + this.location = location; + return this; + } + @CustomType.Setter + public Builder name(String name) { + if (name == null) { + throw new MissingRequiredPropertyException("GetBackupBackup", "name"); + } + this.name = name; + return this; + } + public GetBackupBackup build() { + final var _resultValue = new GetBackupBackup(); + _resultValue.backupId = backupId; + _resultValue.backupVaultId = backupVaultId; + _resultValue.dataSourceId = dataSourceId; + _resultValue.location = location; + _resultValue.name = name; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/outputs/GetBackupResult.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/outputs/GetBackupResult.java new file mode 100644 index 0000000000..496ed63b94 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/outputs/GetBackupResult.java @@ -0,0 +1,153 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.backupdisasterrecovery.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.backupdisasterrecovery.outputs.GetBackupBackup; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetBackupResult { + private String backupVaultId; + private List backups; + private String dataSourceId; + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + private String id; + private String location; + private String name; + private String project; + + private GetBackupResult() {} + public String backupVaultId() { + return this.backupVaultId; + } + public List backups() { + return this.backups; + } + public String dataSourceId() { + return this.dataSourceId; + } + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + public String id() { + return this.id; + } + public String location() { + return this.location; + } + public String name() { + return this.name; + } + public String project() { + return this.project; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetBackupResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String backupVaultId; + private List backups; + private String dataSourceId; + private String id; + private String location; + private String name; + private String project; + public Builder() {} + public Builder(GetBackupResult defaults) { + Objects.requireNonNull(defaults); + this.backupVaultId = defaults.backupVaultId; + this.backups = defaults.backups; + this.dataSourceId = defaults.dataSourceId; + this.id = defaults.id; + this.location = defaults.location; + this.name = defaults.name; + this.project = defaults.project; + } + + @CustomType.Setter + public Builder backupVaultId(String backupVaultId) { + if (backupVaultId == null) { + throw new MissingRequiredPropertyException("GetBackupResult", "backupVaultId"); + } + this.backupVaultId = backupVaultId; + return this; + } + @CustomType.Setter + public Builder backups(List backups) { + if (backups == null) { + throw new MissingRequiredPropertyException("GetBackupResult", "backups"); + } + this.backups = backups; + return this; + } + public Builder backups(GetBackupBackup... backups) { + return backups(List.of(backups)); + } + @CustomType.Setter + public Builder dataSourceId(String dataSourceId) { + if (dataSourceId == null) { + throw new MissingRequiredPropertyException("GetBackupResult", "dataSourceId"); + } + this.dataSourceId = dataSourceId; + return this; + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetBackupResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder location(String location) { + if (location == null) { + throw new MissingRequiredPropertyException("GetBackupResult", "location"); + } + this.location = location; + return this; + } + @CustomType.Setter + public Builder name(String name) { + if (name == null) { + throw new MissingRequiredPropertyException("GetBackupResult", "name"); + } + this.name = name; + return this; + } + @CustomType.Setter + public Builder project(String project) { + if (project == null) { + throw new MissingRequiredPropertyException("GetBackupResult", "project"); + } + this.project = project; + return this; + } + public GetBackupResult build() { + final var _resultValue = new GetBackupResult(); + _resultValue.backupVaultId = backupVaultId; + _resultValue.backups = backups; + _resultValue.dataSourceId = dataSourceId; + _resultValue.id = id; + _resultValue.location = location; + _resultValue.name = name; + _resultValue.project = project; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/outputs/GetBackupVaultResult.java b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/outputs/GetBackupVaultResult.java new file mode 100644 index 0000000000..fbe1d11b8a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/backupdisasterrecovery/outputs/GetBackupVaultResult.java @@ -0,0 +1,465 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.backupdisasterrecovery.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class GetBackupVaultResult { + private String accessRestriction; + private Boolean allowMissing; + private Map annotations; + private String backupCount; + private String backupMinimumEnforcedRetentionDuration; + private String backupVaultId; + private String createTime; + private Boolean deletable; + private String description; + private Map effectiveAnnotations; + private Map effectiveLabels; + private String effectiveTime; + private String etag; + private Boolean forceDelete; + private Boolean forceUpdate; + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + private String id; + private Boolean ignoreBackupPlanReferences; + private Boolean ignoreInactiveDatasources; + private Map labels; + private String location; + private String name; + private @Nullable String project; + private Map pulumiLabels; + private String serviceAccount; + private String state; + private String totalStoredBytes; + private String uid; + private String updateTime; + + private GetBackupVaultResult() {} + public String accessRestriction() { + return this.accessRestriction; + } + public Boolean allowMissing() { + return this.allowMissing; + } + public Map annotations() { + return this.annotations; + } + public String backupCount() { + return this.backupCount; + } + public String backupMinimumEnforcedRetentionDuration() { + return this.backupMinimumEnforcedRetentionDuration; + } + public String backupVaultId() { + return this.backupVaultId; + } + public String createTime() { + return this.createTime; + } + public Boolean deletable() { + return this.deletable; + } + public String description() { + return this.description; + } + public Map effectiveAnnotations() { + return this.effectiveAnnotations; + } + public Map effectiveLabels() { + return this.effectiveLabels; + } + public String effectiveTime() { + return this.effectiveTime; + } + public String etag() { + return this.etag; + } + public Boolean forceDelete() { + return this.forceDelete; + } + public Boolean forceUpdate() { + return this.forceUpdate; + } + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + public String id() { + return this.id; + } + public Boolean ignoreBackupPlanReferences() { + return this.ignoreBackupPlanReferences; + } + public Boolean ignoreInactiveDatasources() { + return this.ignoreInactiveDatasources; + } + public Map labels() { + return this.labels; + } + public String location() { + return this.location; + } + public String name() { + return this.name; + } + public Optional project() { + return Optional.ofNullable(this.project); + } + public Map pulumiLabels() { + return this.pulumiLabels; + } + public String serviceAccount() { + return this.serviceAccount; + } + public String state() { + return this.state; + } + public String totalStoredBytes() { + return this.totalStoredBytes; + } + public String uid() { + return this.uid; + } + public String updateTime() { + return this.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetBackupVaultResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String accessRestriction; + private Boolean allowMissing; + private Map annotations; + private String backupCount; + private String backupMinimumEnforcedRetentionDuration; + private String backupVaultId; + private String createTime; + private Boolean deletable; + private String description; + private Map effectiveAnnotations; + private Map effectiveLabels; + private String effectiveTime; + private String etag; + private Boolean forceDelete; + private Boolean forceUpdate; + private String id; + private Boolean ignoreBackupPlanReferences; + private Boolean ignoreInactiveDatasources; + private Map labels; + private String location; + private String name; + private @Nullable String project; + private Map pulumiLabels; + private String serviceAccount; + private String state; + private String totalStoredBytes; + private String uid; + private String updateTime; + public Builder() {} + public Builder(GetBackupVaultResult defaults) { + Objects.requireNonNull(defaults); + this.accessRestriction = defaults.accessRestriction; + this.allowMissing = defaults.allowMissing; + this.annotations = defaults.annotations; + this.backupCount = defaults.backupCount; + this.backupMinimumEnforcedRetentionDuration = defaults.backupMinimumEnforcedRetentionDuration; + this.backupVaultId = defaults.backupVaultId; + this.createTime = defaults.createTime; + this.deletable = defaults.deletable; + this.description = defaults.description; + this.effectiveAnnotations = defaults.effectiveAnnotations; + this.effectiveLabels = defaults.effectiveLabels; + this.effectiveTime = defaults.effectiveTime; + this.etag = defaults.etag; + this.forceDelete = defaults.forceDelete; + this.forceUpdate = defaults.forceUpdate; + this.id = defaults.id; + this.ignoreBackupPlanReferences = defaults.ignoreBackupPlanReferences; + this.ignoreInactiveDatasources = defaults.ignoreInactiveDatasources; + this.labels = defaults.labels; + this.location = defaults.location; + this.name = defaults.name; + this.project = defaults.project; + this.pulumiLabels = defaults.pulumiLabels; + this.serviceAccount = defaults.serviceAccount; + this.state = defaults.state; + this.totalStoredBytes = defaults.totalStoredBytes; + this.uid = defaults.uid; + this.updateTime = defaults.updateTime; + } + + @CustomType.Setter + public Builder accessRestriction(String accessRestriction) { + if (accessRestriction == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "accessRestriction"); + } + this.accessRestriction = accessRestriction; + return this; + } + @CustomType.Setter + public Builder allowMissing(Boolean allowMissing) { + if (allowMissing == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "allowMissing"); + } + this.allowMissing = allowMissing; + return this; + } + @CustomType.Setter + public Builder annotations(Map annotations) { + if (annotations == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "annotations"); + } + this.annotations = annotations; + return this; + } + @CustomType.Setter + public Builder backupCount(String backupCount) { + if (backupCount == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "backupCount"); + } + this.backupCount = backupCount; + return this; + } + @CustomType.Setter + public Builder backupMinimumEnforcedRetentionDuration(String backupMinimumEnforcedRetentionDuration) { + if (backupMinimumEnforcedRetentionDuration == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "backupMinimumEnforcedRetentionDuration"); + } + this.backupMinimumEnforcedRetentionDuration = backupMinimumEnforcedRetentionDuration; + return this; + } + @CustomType.Setter + public Builder backupVaultId(String backupVaultId) { + if (backupVaultId == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "backupVaultId"); + } + this.backupVaultId = backupVaultId; + return this; + } + @CustomType.Setter + public Builder createTime(String createTime) { + if (createTime == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "createTime"); + } + this.createTime = createTime; + return this; + } + @CustomType.Setter + public Builder deletable(Boolean deletable) { + if (deletable == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "deletable"); + } + this.deletable = deletable; + return this; + } + @CustomType.Setter + public Builder description(String description) { + if (description == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "description"); + } + this.description = description; + return this; + } + @CustomType.Setter + public Builder effectiveAnnotations(Map effectiveAnnotations) { + if (effectiveAnnotations == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "effectiveAnnotations"); + } + this.effectiveAnnotations = effectiveAnnotations; + return this; + } + @CustomType.Setter + public Builder effectiveLabels(Map effectiveLabels) { + if (effectiveLabels == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "effectiveLabels"); + } + this.effectiveLabels = effectiveLabels; + return this; + } + @CustomType.Setter + public Builder effectiveTime(String effectiveTime) { + if (effectiveTime == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "effectiveTime"); + } + this.effectiveTime = effectiveTime; + return this; + } + @CustomType.Setter + public Builder etag(String etag) { + if (etag == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "etag"); + } + this.etag = etag; + return this; + } + @CustomType.Setter + public Builder forceDelete(Boolean forceDelete) { + if (forceDelete == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "forceDelete"); + } + this.forceDelete = forceDelete; + return this; + } + @CustomType.Setter + public Builder forceUpdate(Boolean forceUpdate) { + if (forceUpdate == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "forceUpdate"); + } + this.forceUpdate = forceUpdate; + return this; + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder ignoreBackupPlanReferences(Boolean ignoreBackupPlanReferences) { + if (ignoreBackupPlanReferences == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "ignoreBackupPlanReferences"); + } + this.ignoreBackupPlanReferences = ignoreBackupPlanReferences; + return this; + } + @CustomType.Setter + public Builder ignoreInactiveDatasources(Boolean ignoreInactiveDatasources) { + if (ignoreInactiveDatasources == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "ignoreInactiveDatasources"); + } + this.ignoreInactiveDatasources = ignoreInactiveDatasources; + return this; + } + @CustomType.Setter + public Builder labels(Map labels) { + if (labels == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "labels"); + } + this.labels = labels; + return this; + } + @CustomType.Setter + public Builder location(String location) { + if (location == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "location"); + } + this.location = location; + return this; + } + @CustomType.Setter + public Builder name(String name) { + if (name == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "name"); + } + this.name = name; + return this; + } + @CustomType.Setter + public Builder project(@Nullable String project) { + + this.project = project; + return this; + } + @CustomType.Setter + public Builder pulumiLabels(Map pulumiLabels) { + if (pulumiLabels == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "pulumiLabels"); + } + this.pulumiLabels = pulumiLabels; + return this; + } + @CustomType.Setter + public Builder serviceAccount(String serviceAccount) { + if (serviceAccount == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "serviceAccount"); + } + this.serviceAccount = serviceAccount; + return this; + } + @CustomType.Setter + public Builder state(String state) { + if (state == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "state"); + } + this.state = state; + return this; + } + @CustomType.Setter + public Builder totalStoredBytes(String totalStoredBytes) { + if (totalStoredBytes == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "totalStoredBytes"); + } + this.totalStoredBytes = totalStoredBytes; + return this; + } + @CustomType.Setter + public Builder uid(String uid) { + if (uid == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "uid"); + } + this.uid = uid; + return this; + } + @CustomType.Setter + public Builder updateTime(String updateTime) { + if (updateTime == null) { + throw new MissingRequiredPropertyException("GetBackupVaultResult", "updateTime"); + } + this.updateTime = updateTime; + return this; + } + public GetBackupVaultResult build() { + final var _resultValue = new GetBackupVaultResult(); + _resultValue.accessRestriction = accessRestriction; + _resultValue.allowMissing = allowMissing; + _resultValue.annotations = annotations; + _resultValue.backupCount = backupCount; + _resultValue.backupMinimumEnforcedRetentionDuration = backupMinimumEnforcedRetentionDuration; + _resultValue.backupVaultId = backupVaultId; + _resultValue.createTime = createTime; + _resultValue.deletable = deletable; + _resultValue.description = description; + _resultValue.effectiveAnnotations = effectiveAnnotations; + _resultValue.effectiveLabels = effectiveLabels; + _resultValue.effectiveTime = effectiveTime; + _resultValue.etag = etag; + _resultValue.forceDelete = forceDelete; + _resultValue.forceUpdate = forceUpdate; + _resultValue.id = id; + _resultValue.ignoreBackupPlanReferences = ignoreBackupPlanReferences; + _resultValue.ignoreInactiveDatasources = ignoreInactiveDatasources; + _resultValue.labels = labels; + _resultValue.location = location; + _resultValue.name = name; + _resultValue.project = project; + _resultValue.pulumiLabels = pulumiLabels; + _resultValue.serviceAccount = serviceAccount; + _resultValue.state = state; + _resultValue.totalStoredBytes = totalStoredBytes; + _resultValue.uid = uid; + _resultValue.updateTime = updateTime; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/AppProfile.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/AppProfile.java index 521e6c6b70..bb1a4a78a1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/AppProfile.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/AppProfile.java @@ -441,6 +441,28 @@ public Output name() { public Output project() { return this.project; } + /** + * 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. + * + */ + @Export(name="rowAffinity", refs={Boolean.class}, tree="[0]") + private Output rowAffinity; + + /** + * @return 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. + * + */ + public Output> rowAffinity() { + return Codegen.optional(this.rowAffinity); + } /** * Use a single-cluster routing policy. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/AppProfileArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/AppProfileArgs.java index 177591182f..4e51c24e1b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/AppProfileArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/AppProfileArgs.java @@ -155,6 +155,29 @@ public Optional> project() { return Optional.ofNullable(this.project); } + /** + * 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. + * + */ + @Import(name="rowAffinity") + private @Nullable Output rowAffinity; + + /** + * @return 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. + * + */ + public Optional> rowAffinity() { + return Optional.ofNullable(this.rowAffinity); + } + /** * Use a single-cluster routing policy. * Structure is documented below. @@ -200,6 +223,7 @@ private AppProfileArgs(AppProfileArgs $) { this.multiClusterRoutingClusterIds = $.multiClusterRoutingClusterIds; this.multiClusterRoutingUseAny = $.multiClusterRoutingUseAny; this.project = $.project; + this.rowAffinity = $.rowAffinity; this.singleClusterRouting = $.singleClusterRouting; this.standardIsolation = $.standardIsolation; } @@ -415,6 +439,35 @@ public Builder project(String project) { return project(Output.of(project)); } + /** + * @param rowAffinity 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. + * + * @return builder + * + */ + public Builder rowAffinity(@Nullable Output rowAffinity) { + $.rowAffinity = rowAffinity; + return this; + } + + /** + * @param rowAffinity 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. + * + * @return builder + * + */ + public Builder rowAffinity(Boolean rowAffinity) { + return rowAffinity(Output.of(rowAffinity)); + } + /** * @param singleClusterRouting Use a single-cluster routing policy. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/AppProfileState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/AppProfileState.java index 01e91f3723..26bd7d1fa6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/AppProfileState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/AppProfileState.java @@ -169,6 +169,29 @@ public Optional> project() { return Optional.ofNullable(this.project); } + /** + * 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. + * + */ + @Import(name="rowAffinity") + private @Nullable Output rowAffinity; + + /** + * @return 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. + * + */ + public Optional> rowAffinity() { + return Optional.ofNullable(this.rowAffinity); + } + /** * Use a single-cluster routing policy. * Structure is documented below. @@ -215,6 +238,7 @@ private AppProfileState(AppProfileState $) { this.multiClusterRoutingUseAny = $.multiClusterRoutingUseAny; this.name = $.name; this.project = $.project; + this.rowAffinity = $.rowAffinity; this.singleClusterRouting = $.singleClusterRouting; this.standardIsolation = $.standardIsolation; } @@ -451,6 +475,35 @@ public Builder project(String project) { return project(Output.of(project)); } + /** + * @param rowAffinity 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. + * + * @return builder + * + */ + public Builder rowAffinity(@Nullable Output rowAffinity) { + $.rowAffinity = rowAffinity; + return this; + } + + /** + * @param rowAffinity 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. + * + * @return builder + * + */ + public Builder rowAffinity(Boolean rowAffinity) { + return rowAffinity(Output.of(rowAffinity)); + } + /** * @param singleClusterRouting Use a single-cluster routing policy. * Structure is documented below. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/billing/inputs/BudgetBudgetFilterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/billing/inputs/BudgetBudgetFilterArgs.java index f85fa5bf82..0cfc2f4d77 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/billing/inputs/BudgetBudgetFilterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/billing/inputs/BudgetBudgetFilterArgs.java @@ -45,7 +45,7 @@ public Optional> calendarPeriod() { * 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. * */ @Import(name="creditTypes") @@ -55,7 +55,7 @@ public Optional> calendarPeriod() { * @return 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 Optional>> creditTypes() { @@ -197,7 +197,7 @@ public Optional>> 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. * */ @Import(name="subaccounts") @@ -210,7 +210,7 @@ public Optional>> 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 Optional>> subaccounts() { @@ -282,7 +282,7 @@ public Builder calendarPeriod(String calendarPeriod) { * @param creditTypes 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. * * @return builder * @@ -296,7 +296,7 @@ public Builder creditTypes(@Nullable Output> creditTypes) { * @param creditTypes 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. * * @return builder * @@ -309,7 +309,7 @@ public Builder creditTypes(List creditTypes) { * @param creditTypes 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. * * @return builder * @@ -531,7 +531,7 @@ public Builder services(String... 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. * * @return builder * @@ -548,7 +548,7 @@ public Builder subaccounts(@Nullable Output> subaccounts) { * 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. * * @return builder * @@ -564,7 +564,7 @@ public Builder subaccounts(List subaccounts) { * 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/billing/outputs/BudgetBudgetFilter.java b/sdk/java/src/main/java/com/pulumi/gcp/billing/outputs/BudgetBudgetFilter.java index 7d8583ae13..e0708bef0f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/billing/outputs/BudgetBudgetFilter.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/billing/outputs/BudgetBudgetFilter.java @@ -27,7 +27,7 @@ public final class BudgetBudgetFilter { * @return 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. * */ private @Nullable List creditTypes; @@ -87,7 +87,7 @@ public final 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. * */ private @Nullable List subaccounts; @@ -108,7 +108,7 @@ public Optional calendarPeriod() { * @return 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 List creditTypes() { @@ -182,7 +182,7 @@ public List 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 List subaccounts() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/AuthorityConfigSubjectKeyIdArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/AuthorityConfigSubjectKeyIdArgs.java index d4a47def2b..5b46bf231b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/AuthorityConfigSubjectKeyIdArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/AuthorityConfigSubjectKeyIdArgs.java @@ -16,7 +16,7 @@ public final class AuthorityConfigSubjectKeyIdArgs extends com.pulumi.resources. public static final AuthorityConfigSubjectKeyIdArgs Empty = new AuthorityConfigSubjectKeyIdArgs(); /** - * 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: * @@ -25,7 +25,7 @@ public final class AuthorityConfigSubjectKeyIdArgs extends com.pulumi.resources. private @Nullable Output keyId; /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * * <a name="nested_x509_config"></a>The `x509_config` block supports: * @@ -59,7 +59,7 @@ public Builder(AuthorityConfigSubjectKeyIdArgs defaults) { } /** - * @param keyId The value of the KeyId in lowercase hexidecimal. + * @param keyId The value of the KeyId in lowercase hexadecimal. * * <a name="nested_x509_config"></a>The `x509_config` block supports: * @@ -72,7 +72,7 @@ public Builder keyId(@Nullable Output keyId) { } /** - * @param keyId The value of the KeyId in lowercase hexidecimal. + * @param keyId The value of the KeyId in lowercase hexadecimal. * * <a name="nested_x509_config"></a>The `x509_config` block supports: * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/CertificateCertificateDescriptionSubjectKeyIdArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/CertificateCertificateDescriptionSubjectKeyIdArgs.java index babe170c14..bf3a7bc548 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/CertificateCertificateDescriptionSubjectKeyIdArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/CertificateCertificateDescriptionSubjectKeyIdArgs.java @@ -16,14 +16,14 @@ public final class CertificateCertificateDescriptionSubjectKeyIdArgs extends com public static final CertificateCertificateDescriptionSubjectKeyIdArgs Empty = new CertificateCertificateDescriptionSubjectKeyIdArgs(); /** - * The value of the KeyId in lowercase hexidecimal. + * The value of the KeyId in lowercase hexadecimal. * */ @Import(name="keyId") private @Nullable Output keyId; /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * */ public Optional> keyId() { @@ -55,7 +55,7 @@ public Builder(CertificateCertificateDescriptionSubjectKeyIdArgs defaults) { } /** - * @param keyId The value of the KeyId in lowercase hexidecimal. + * @param keyId The value of the KeyId in lowercase hexadecimal. * * @return builder * @@ -66,7 +66,7 @@ public Builder keyId(@Nullable Output keyId) { } /** - * @param keyId The value of the KeyId in lowercase hexidecimal. + * @param keyId The value of the KeyId in lowercase hexadecimal. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/CertificateConfigSubjectKeyIdArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/CertificateConfigSubjectKeyIdArgs.java index 9fc584fe02..31dc1b4c2f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/CertificateConfigSubjectKeyIdArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/inputs/CertificateConfigSubjectKeyIdArgs.java @@ -16,14 +16,14 @@ public final class CertificateConfigSubjectKeyIdArgs extends com.pulumi.resource public static final CertificateConfigSubjectKeyIdArgs Empty = new CertificateConfigSubjectKeyIdArgs(); /** - * The value of the KeyId in lowercase hexidecimal. + * The value of the KeyId in lowercase hexadecimal. * */ @Import(name="keyId") private @Nullable Output keyId; /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * */ public Optional> keyId() { @@ -55,7 +55,7 @@ public Builder(CertificateConfigSubjectKeyIdArgs defaults) { } /** - * @param keyId The value of the KeyId in lowercase hexidecimal. + * @param keyId The value of the KeyId in lowercase hexadecimal. * * @return builder * @@ -66,7 +66,7 @@ public Builder keyId(@Nullable Output keyId) { } /** - * @param keyId The value of the KeyId in lowercase hexidecimal. + * @param keyId The value of the KeyId in lowercase hexadecimal. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/AuthorityConfigSubjectKeyId.java b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/AuthorityConfigSubjectKeyId.java index 7a4f366568..37fc5f271c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/AuthorityConfigSubjectKeyId.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/AuthorityConfigSubjectKeyId.java @@ -12,7 +12,7 @@ @CustomType public final class AuthorityConfigSubjectKeyId { /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * * <a name="nested_x509_config"></a>The `x509_config` block supports: * @@ -21,7 +21,7 @@ public final class AuthorityConfigSubjectKeyId { private AuthorityConfigSubjectKeyId() {} /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * * <a name="nested_x509_config"></a>The `x509_config` block supports: * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/CertificateCertificateDescriptionSubjectKeyId.java b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/CertificateCertificateDescriptionSubjectKeyId.java index 65de1d69b7..590e8a8de8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/CertificateCertificateDescriptionSubjectKeyId.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/CertificateCertificateDescriptionSubjectKeyId.java @@ -12,14 +12,14 @@ @CustomType public final class CertificateCertificateDescriptionSubjectKeyId { /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * */ private @Nullable String keyId; private CertificateCertificateDescriptionSubjectKeyId() {} /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * */ public Optional keyId() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/CertificateConfigSubjectKeyId.java b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/CertificateConfigSubjectKeyId.java index 7ca84cc8cc..56e74bf4a3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/CertificateConfigSubjectKeyId.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/CertificateConfigSubjectKeyId.java @@ -12,14 +12,14 @@ @CustomType public final class CertificateConfigSubjectKeyId { /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * */ private @Nullable String keyId; private CertificateConfigSubjectKeyId() {} /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * */ public Optional keyId() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/GetAuthorityConfigSubjectKeyId.java b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/GetAuthorityConfigSubjectKeyId.java index 8945925b9b..98f0963024 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/GetAuthorityConfigSubjectKeyId.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificateauthority/outputs/GetAuthorityConfigSubjectKeyId.java @@ -11,14 +11,14 @@ @CustomType public final class GetAuthorityConfigSubjectKeyId { /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * */ private String keyId; private GetAuthorityConfigSubjectKeyId() {} /** - * @return The value of the KeyId in lowercase hexidecimal. + * @return The value of the KeyId in lowercase hexadecimal. * */ public String keyId() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/WorkerPool.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/WorkerPool.java index cb5c933d8d..8e81cfad18 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/WorkerPool.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/WorkerPool.java @@ -11,6 +11,7 @@ import com.pulumi.gcp.cloudbuild.WorkerPoolArgs; import com.pulumi.gcp.cloudbuild.inputs.WorkerPoolState; import com.pulumi.gcp.cloudbuild.outputs.WorkerPoolNetworkConfig; +import com.pulumi.gcp.cloudbuild.outputs.WorkerPoolPrivateServiceConnect; import com.pulumi.gcp.cloudbuild.outputs.WorkerPoolWorkerConfig; import java.lang.String; import java.util.Map; @@ -287,6 +288,20 @@ public Output name() { public Output> networkConfig() { return Codegen.optional(this.networkConfig); } + /** + * Private Service Connect configuration for the pool. + * + */ + @Export(name="privateServiceConnect", refs={WorkerPoolPrivateServiceConnect.class}, tree="[0]") + private Output privateServiceConnect; + + /** + * @return Private Service Connect configuration for the pool. + * + */ + public Output> privateServiceConnect() { + return Codegen.optional(this.privateServiceConnect); + } /** * The project for the resource * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/WorkerPoolArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/WorkerPoolArgs.java index c1ac074ca1..4e5da85bcb 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/WorkerPoolArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/WorkerPoolArgs.java @@ -7,6 +7,7 @@ import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.cloudbuild.inputs.WorkerPoolNetworkConfigArgs; +import com.pulumi.gcp.cloudbuild.inputs.WorkerPoolPrivateServiceConnectArgs; import com.pulumi.gcp.cloudbuild.inputs.WorkerPoolWorkerConfigArgs; import java.lang.String; import java.util.Map; @@ -102,6 +103,21 @@ public Optional> networkConfig() { return Optional.ofNullable(this.networkConfig); } + /** + * Private Service Connect configuration for the pool. + * + */ + @Import(name="privateServiceConnect") + private @Nullable Output privateServiceConnect; + + /** + * @return Private Service Connect configuration for the pool. + * + */ + public Optional> privateServiceConnect() { + return Optional.ofNullable(this.privateServiceConnect); + } + /** * The project for the resource * @@ -140,6 +156,7 @@ private WorkerPoolArgs(WorkerPoolArgs $) { this.location = $.location; this.name = $.name; this.networkConfig = $.networkConfig; + this.privateServiceConnect = $.privateServiceConnect; this.project = $.project; this.workerConfig = $.workerConfig; } @@ -275,6 +292,27 @@ public Builder networkConfig(WorkerPoolNetworkConfigArgs networkConfig) { return networkConfig(Output.of(networkConfig)); } + /** + * @param privateServiceConnect Private Service Connect configuration for the pool. + * + * @return builder + * + */ + public Builder privateServiceConnect(@Nullable Output privateServiceConnect) { + $.privateServiceConnect = privateServiceConnect; + return this; + } + + /** + * @param privateServiceConnect Private Service Connect configuration for the pool. + * + * @return builder + * + */ + public Builder privateServiceConnect(WorkerPoolPrivateServiceConnectArgs privateServiceConnect) { + return privateServiceConnect(Output.of(privateServiceConnect)); + } + /** * @param project The project for the resource * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/WorkerPoolPrivateServiceConnectArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/WorkerPoolPrivateServiceConnectArgs.java new file mode 100644 index 0000000000..2da7f5af20 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/WorkerPoolPrivateServiceConnectArgs.java @@ -0,0 +1,125 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuild.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class WorkerPoolPrivateServiceConnectArgs extends com.pulumi.resources.ResourceArgs { + + public static final WorkerPoolPrivateServiceConnectArgs Empty = new WorkerPoolPrivateServiceConnectArgs(); + + /** + * 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) + * + */ + @Import(name="networkAttachment", required=true) + private Output networkAttachment; + + /** + * @return 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 Output networkAttachment() { + return this.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. + * + */ + @Import(name="routeAllTraffic") + private @Nullable Output routeAllTraffic; + + /** + * @return 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 Optional> routeAllTraffic() { + return Optional.ofNullable(this.routeAllTraffic); + } + + private WorkerPoolPrivateServiceConnectArgs() {} + + private WorkerPoolPrivateServiceConnectArgs(WorkerPoolPrivateServiceConnectArgs $) { + this.networkAttachment = $.networkAttachment; + this.routeAllTraffic = $.routeAllTraffic; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(WorkerPoolPrivateServiceConnectArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private WorkerPoolPrivateServiceConnectArgs $; + + public Builder() { + $ = new WorkerPoolPrivateServiceConnectArgs(); + } + + public Builder(WorkerPoolPrivateServiceConnectArgs defaults) { + $ = new WorkerPoolPrivateServiceConnectArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param networkAttachment 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) + * + * @return builder + * + */ + public Builder networkAttachment(Output networkAttachment) { + $.networkAttachment = networkAttachment; + return this; + } + + /** + * @param networkAttachment 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) + * + * @return builder + * + */ + public Builder networkAttachment(String networkAttachment) { + return networkAttachment(Output.of(networkAttachment)); + } + + /** + * @param routeAllTraffic 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. + * + * @return builder + * + */ + public Builder routeAllTraffic(@Nullable Output routeAllTraffic) { + $.routeAllTraffic = routeAllTraffic; + return this; + } + + /** + * @param routeAllTraffic 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. + * + * @return builder + * + */ + public Builder routeAllTraffic(Boolean routeAllTraffic) { + return routeAllTraffic(Output.of(routeAllTraffic)); + } + + public WorkerPoolPrivateServiceConnectArgs build() { + if ($.networkAttachment == null) { + throw new MissingRequiredPropertyException("WorkerPoolPrivateServiceConnectArgs", "networkAttachment"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/WorkerPoolState.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/WorkerPoolState.java index 0143bbb442..0669cdce35 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/WorkerPoolState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/WorkerPoolState.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.gcp.cloudbuild.inputs.WorkerPoolNetworkConfigArgs; +import com.pulumi.gcp.cloudbuild.inputs.WorkerPoolPrivateServiceConnectArgs; import com.pulumi.gcp.cloudbuild.inputs.WorkerPoolWorkerConfigArgs; import java.lang.String; import java.util.Map; @@ -138,6 +139,21 @@ public Optional> networkConfig() { return Optional.ofNullable(this.networkConfig); } + /** + * Private Service Connect configuration for the pool. + * + */ + @Import(name="privateServiceConnect") + private @Nullable Output privateServiceConnect; + + /** + * @return Private Service Connect configuration for the pool. + * + */ + public Optional> privateServiceConnect() { + return Optional.ofNullable(this.privateServiceConnect); + } + /** * The project for the resource * @@ -224,6 +240,7 @@ private WorkerPoolState(WorkerPoolState $) { this.location = $.location; this.name = $.name; this.networkConfig = $.networkConfig; + this.privateServiceConnect = $.privateServiceConnect; this.project = $.project; this.state = $.state; this.uid = $.uid; @@ -413,6 +430,27 @@ public Builder networkConfig(WorkerPoolNetworkConfigArgs networkConfig) { return networkConfig(Output.of(networkConfig)); } + /** + * @param privateServiceConnect Private Service Connect configuration for the pool. + * + * @return builder + * + */ + public Builder privateServiceConnect(@Nullable Output privateServiceConnect) { + $.privateServiceConnect = privateServiceConnect; + return this; + } + + /** + * @param privateServiceConnect Private Service Connect configuration for the pool. + * + * @return builder + * + */ + public Builder privateServiceConnect(WorkerPoolPrivateServiceConnectArgs privateServiceConnect) { + return privateServiceConnect(Output.of(privateServiceConnect)); + } + /** * @param project The project for the resource * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/WorkerPoolPrivateServiceConnect.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/WorkerPoolPrivateServiceConnect.java new file mode 100644 index 0000000000..5aaccb7054 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/WorkerPoolPrivateServiceConnect.java @@ -0,0 +1,82 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuild.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class WorkerPoolPrivateServiceConnect { + /** + * @return 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) + * + */ + private String networkAttachment; + /** + * @return 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. + * + */ + private @Nullable Boolean routeAllTraffic; + + private WorkerPoolPrivateServiceConnect() {} + /** + * @return 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 String networkAttachment() { + return this.networkAttachment; + } + /** + * @return 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 Optional routeAllTraffic() { + return Optional.ofNullable(this.routeAllTraffic); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(WorkerPoolPrivateServiceConnect defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String networkAttachment; + private @Nullable Boolean routeAllTraffic; + public Builder() {} + public Builder(WorkerPoolPrivateServiceConnect defaults) { + Objects.requireNonNull(defaults); + this.networkAttachment = defaults.networkAttachment; + this.routeAllTraffic = defaults.routeAllTraffic; + } + + @CustomType.Setter + public Builder networkAttachment(String networkAttachment) { + if (networkAttachment == null) { + throw new MissingRequiredPropertyException("WorkerPoolPrivateServiceConnect", "networkAttachment"); + } + this.networkAttachment = networkAttachment; + return this; + } + @CustomType.Setter + public Builder routeAllTraffic(@Nullable Boolean routeAllTraffic) { + + this.routeAllTraffic = routeAllTraffic; + return this; + } + public WorkerPoolPrivateServiceConnect build() { + final var _resultValue = new WorkerPoolPrivateServiceConnect(); + _resultValue.networkAttachment = networkAttachment; + _resultValue.routeAllTraffic = routeAllTraffic; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/Target.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/Target.java index b275c1670b..35fdaa06ce 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/Target.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/Target.java @@ -11,6 +11,7 @@ import com.pulumi.gcp.clouddeploy.TargetArgs; import com.pulumi.gcp.clouddeploy.inputs.TargetState; import com.pulumi.gcp.clouddeploy.outputs.TargetAnthosCluster; +import com.pulumi.gcp.clouddeploy.outputs.TargetAssociatedEntity; import com.pulumi.gcp.clouddeploy.outputs.TargetCustomTarget; import com.pulumi.gcp.clouddeploy.outputs.TargetExecutionConfig; import com.pulumi.gcp.clouddeploy.outputs.TargetGke; @@ -259,6 +260,20 @@ public Output>> annotations() { public Output> anthosCluster() { return Codegen.optional(this.anthosCluster); } + /** + * 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?$`. + * + */ + @Export(name="associatedEntities", refs={List.class,TargetAssociatedEntity.class}, tree="[0,1]") + private Output> associatedEntities; + + /** + * @return 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 Output>> associatedEntities() { + return Codegen.optional(this.associatedEntities); + } /** * Output only. Time at which the `Target` was created. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/TargetArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/TargetArgs.java index cf2c6f2670..bbad7f2a5c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/TargetArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/TargetArgs.java @@ -7,6 +7,7 @@ import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.clouddeploy.inputs.TargetAnthosClusterArgs; +import com.pulumi.gcp.clouddeploy.inputs.TargetAssociatedEntityArgs; import com.pulumi.gcp.clouddeploy.inputs.TargetCustomTargetArgs; import com.pulumi.gcp.clouddeploy.inputs.TargetExecutionConfigArgs; import com.pulumi.gcp.clouddeploy.inputs.TargetGkeArgs; @@ -61,6 +62,21 @@ public Optional> anthosCluster() { return Optional.ofNullable(this.anthosCluster); } + /** + * 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?$`. + * + */ + @Import(name="associatedEntities") + private @Nullable Output> associatedEntities; + + /** + * @return 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 Optional>> associatedEntities() { + return Optional.ofNullable(this.associatedEntities); + } + /** * Optional. Information specifying a Custom Target. * @@ -256,6 +272,7 @@ private TargetArgs() {} private TargetArgs(TargetArgs $) { this.annotations = $.annotations; this.anthosCluster = $.anthosCluster; + this.associatedEntities = $.associatedEntities; this.customTarget = $.customTarget; this.deployParameters = $.deployParameters; this.description = $.description; @@ -336,6 +353,37 @@ public Builder anthosCluster(TargetAnthosClusterArgs anthosCluster) { return anthosCluster(Output.of(anthosCluster)); } + /** + * @param 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?$`. + * + * @return builder + * + */ + public Builder associatedEntities(@Nullable Output> associatedEntities) { + $.associatedEntities = associatedEntities; + return this; + } + + /** + * @param 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?$`. + * + * @return builder + * + */ + public Builder associatedEntities(List associatedEntities) { + return associatedEntities(Output.of(associatedEntities)); + } + + /** + * @param 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?$`. + * + * @return builder + * + */ + public Builder associatedEntities(TargetAssociatedEntityArgs... associatedEntities) { + return associatedEntities(List.of(associatedEntities)); + } + /** * @param customTarget Optional. Information specifying a Custom Target. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs.java index 40fbad1641..36f698b136 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.clouddeploy.inputs.DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs; import java.lang.String; import java.util.Objects; import java.util.Optional; @@ -61,6 +62,21 @@ public Optional> podSelectorLabel() { return Optional.ofNullable(this.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. + * + */ + @Import(name="routeDestinations") + private @Nullable Output routeDestinations; + + /** + * @return 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 Optional> routeDestinations() { + return Optional.ofNullable(this.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. * @@ -112,6 +128,7 @@ private DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetes this.deployment = $.deployment; this.httpRoute = $.httpRoute; this.podSelectorLabel = $.podSelectorLabel; + this.routeDestinations = $.routeDestinations; this.routeUpdateWaitTime = $.routeUpdateWaitTime; this.service = $.service; this.stableCutbackDuration = $.stableCutbackDuration; @@ -198,6 +215,27 @@ public Builder podSelectorLabel(String podSelectorLabel) { return podSelectorLabel(Output.of(podSelectorLabel)); } + /** + * @param routeDestinations 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. + * + * @return builder + * + */ + public Builder routeDestinations(@Nullable Output routeDestinations) { + $.routeDestinations = routeDestinations; + return this; + } + + /** + * @param routeDestinations 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. + * + * @return builder + * + */ + public Builder routeDestinations(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs routeDestinations) { + return routeDestinations(Output.of(routeDestinations)); + } + /** * @param routeUpdateWaitTime 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/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs.java new file mode 100644 index 0000000000..4f74646624 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs.java @@ -0,0 +1,136 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.clouddeploy.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs extends com.pulumi.resources.ResourceArgs { + + public static final DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs Empty = new DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs(); + + /** + * 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 "{@literal @}self" to include the Target cluster. + * + */ + @Import(name="destinationIds", required=true) + private Output> destinationIds; + + /** + * @return 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 "{@literal @}self" to include the Target cluster. + * + */ + public Output> destinationIds() { + return this.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. + * + */ + @Import(name="propagateService") + private @Nullable Output propagateService; + + /** + * @return 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 Optional> propagateService() { + return Optional.ofNullable(this.propagateService); + } + + private DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs() {} + + private DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs $) { + this.destinationIds = $.destinationIds; + this.propagateService = $.propagateService; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs $; + + public Builder() { + $ = new DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs(); + } + + public Builder(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs defaults) { + $ = new DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param 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 "{@literal @}self" to include the Target cluster. + * + * @return builder + * + */ + public Builder destinationIds(Output> destinationIds) { + $.destinationIds = destinationIds; + return this; + } + + /** + * @param 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 "{@literal @}self" to include the Target cluster. + * + * @return builder + * + */ + public Builder destinationIds(List destinationIds) { + return destinationIds(Output.of(destinationIds)); + } + + /** + * @param 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 "{@literal @}self" to include the Target cluster. + * + * @return builder + * + */ + public Builder destinationIds(String... destinationIds) { + return destinationIds(List.of(destinationIds)); + } + + /** + * @param propagateService 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. + * + * @return builder + * + */ + public Builder propagateService(@Nullable Output propagateService) { + $.propagateService = propagateService; + return this; + } + + /** + * @param propagateService 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. + * + * @return builder + * + */ + public Builder propagateService(Boolean propagateService) { + return propagateService(Output.of(propagateService)); + } + + public DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs build() { + if ($.destinationIds == null) { + throw new MissingRequiredPropertyException("DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs", "destinationIds"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetAssociatedEntityAnthosClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetAssociatedEntityAnthosClusterArgs.java new file mode 100644 index 0000000000..96998233da --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetAssociatedEntityAnthosClusterArgs.java @@ -0,0 +1,83 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.clouddeploy.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class TargetAssociatedEntityAnthosClusterArgs extends com.pulumi.resources.ResourceArgs { + + public static final TargetAssociatedEntityAnthosClusterArgs Empty = new TargetAssociatedEntityAnthosClusterArgs(); + + /** + * Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + * + */ + @Import(name="membership") + private @Nullable Output membership; + + /** + * @return 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 Optional> membership() { + return Optional.ofNullable(this.membership); + } + + private TargetAssociatedEntityAnthosClusterArgs() {} + + private TargetAssociatedEntityAnthosClusterArgs(TargetAssociatedEntityAnthosClusterArgs $) { + this.membership = $.membership; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(TargetAssociatedEntityAnthosClusterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private TargetAssociatedEntityAnthosClusterArgs $; + + public Builder() { + $ = new TargetAssociatedEntityAnthosClusterArgs(); + } + + public Builder(TargetAssociatedEntityAnthosClusterArgs defaults) { + $ = new TargetAssociatedEntityAnthosClusterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param membership Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + * + * @return builder + * + */ + public Builder membership(@Nullable Output membership) { + $.membership = membership; + return this; + } + + /** + * @param membership Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + * + * @return builder + * + */ + public Builder membership(String membership) { + return membership(Output.of(membership)); + } + + public TargetAssociatedEntityAnthosClusterArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetAssociatedEntityArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetAssociatedEntityArgs.java new file mode 100644 index 0000000000..5ba7b60968 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetAssociatedEntityArgs.java @@ -0,0 +1,184 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.clouddeploy.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.clouddeploy.inputs.TargetAssociatedEntityAnthosClusterArgs; +import com.pulumi.gcp.clouddeploy.inputs.TargetAssociatedEntityGkeClusterArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class TargetAssociatedEntityArgs extends com.pulumi.resources.ResourceArgs { + + public static final TargetAssociatedEntityArgs Empty = new TargetAssociatedEntityArgs(); + + /** + * Optional. Information specifying Anthos clusters as associated entities. + * + */ + @Import(name="anthosClusters") + private @Nullable Output> anthosClusters; + + /** + * @return Optional. Information specifying Anthos clusters as associated entities. + * + */ + public Optional>> anthosClusters() { + return Optional.ofNullable(this.anthosClusters); + } + + /** + * The name for the key in the map for which this object is mapped to in the API + * + */ + @Import(name="entityId", required=true) + private Output entityId; + + /** + * @return The name for the key in the map for which this object is mapped to in the API + * + */ + public Output entityId() { + return this.entityId; + } + + /** + * Optional. Information specifying GKE clusters as associated entities. + * + */ + @Import(name="gkeClusters") + private @Nullable Output> gkeClusters; + + /** + * @return Optional. Information specifying GKE clusters as associated entities. + * + */ + public Optional>> gkeClusters() { + return Optional.ofNullable(this.gkeClusters); + } + + private TargetAssociatedEntityArgs() {} + + private TargetAssociatedEntityArgs(TargetAssociatedEntityArgs $) { + this.anthosClusters = $.anthosClusters; + this.entityId = $.entityId; + this.gkeClusters = $.gkeClusters; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(TargetAssociatedEntityArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private TargetAssociatedEntityArgs $; + + public Builder() { + $ = new TargetAssociatedEntityArgs(); + } + + public Builder(TargetAssociatedEntityArgs defaults) { + $ = new TargetAssociatedEntityArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param anthosClusters Optional. Information specifying Anthos clusters as associated entities. + * + * @return builder + * + */ + public Builder anthosClusters(@Nullable Output> anthosClusters) { + $.anthosClusters = anthosClusters; + return this; + } + + /** + * @param anthosClusters Optional. Information specifying Anthos clusters as associated entities. + * + * @return builder + * + */ + public Builder anthosClusters(List anthosClusters) { + return anthosClusters(Output.of(anthosClusters)); + } + + /** + * @param anthosClusters Optional. Information specifying Anthos clusters as associated entities. + * + * @return builder + * + */ + public Builder anthosClusters(TargetAssociatedEntityAnthosClusterArgs... anthosClusters) { + return anthosClusters(List.of(anthosClusters)); + } + + /** + * @param entityId The name for the key in the map for which this object is mapped to in the API + * + * @return builder + * + */ + public Builder entityId(Output entityId) { + $.entityId = entityId; + return this; + } + + /** + * @param entityId The name for the key in the map for which this object is mapped to in the API + * + * @return builder + * + */ + public Builder entityId(String entityId) { + return entityId(Output.of(entityId)); + } + + /** + * @param gkeClusters Optional. Information specifying GKE clusters as associated entities. + * + * @return builder + * + */ + public Builder gkeClusters(@Nullable Output> gkeClusters) { + $.gkeClusters = gkeClusters; + return this; + } + + /** + * @param gkeClusters Optional. Information specifying GKE clusters as associated entities. + * + * @return builder + * + */ + public Builder gkeClusters(List gkeClusters) { + return gkeClusters(Output.of(gkeClusters)); + } + + /** + * @param gkeClusters Optional. Information specifying GKE clusters as associated entities. + * + * @return builder + * + */ + public Builder gkeClusters(TargetAssociatedEntityGkeClusterArgs... gkeClusters) { + return gkeClusters(List.of(gkeClusters)); + } + + public TargetAssociatedEntityArgs build() { + if ($.entityId == null) { + throw new MissingRequiredPropertyException("TargetAssociatedEntityArgs", "entityId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetAssociatedEntityGkeClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetAssociatedEntityGkeClusterArgs.java new file mode 100644 index 0000000000..858e241b38 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetAssociatedEntityGkeClusterArgs.java @@ -0,0 +1,158 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.clouddeploy.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class TargetAssociatedEntityGkeClusterArgs extends com.pulumi.resources.ResourceArgs { + + public static final TargetAssociatedEntityGkeClusterArgs Empty = new TargetAssociatedEntityGkeClusterArgs(); + + /** + * Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + * + */ + @Import(name="cluster") + private @Nullable Output cluster; + + /** + * @return Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + * + */ + public Optional> cluster() { + return Optional.ofNullable(this.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). + * + */ + @Import(name="internalIp") + private @Nullable Output internalIp; + + /** + * @return 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 Optional> internalIp() { + return Optional.ofNullable(this.internalIp); + } + + /** + * Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + * + */ + @Import(name="proxyUrl") + private @Nullable Output proxyUrl; + + /** + * @return Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + * + */ + public Optional> proxyUrl() { + return Optional.ofNullable(this.proxyUrl); + } + + private TargetAssociatedEntityGkeClusterArgs() {} + + private TargetAssociatedEntityGkeClusterArgs(TargetAssociatedEntityGkeClusterArgs $) { + this.cluster = $.cluster; + this.internalIp = $.internalIp; + this.proxyUrl = $.proxyUrl; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(TargetAssociatedEntityGkeClusterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private TargetAssociatedEntityGkeClusterArgs $; + + public Builder() { + $ = new TargetAssociatedEntityGkeClusterArgs(); + } + + public Builder(TargetAssociatedEntityGkeClusterArgs defaults) { + $ = new TargetAssociatedEntityGkeClusterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param cluster Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + * + * @return builder + * + */ + public Builder cluster(@Nullable Output cluster) { + $.cluster = cluster; + return this; + } + + /** + * @param cluster Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + * + * @return builder + * + */ + public Builder cluster(String cluster) { + return cluster(Output.of(cluster)); + } + + /** + * @param internalIp 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). + * + * @return builder + * + */ + public Builder internalIp(@Nullable Output internalIp) { + $.internalIp = internalIp; + return this; + } + + /** + * @param internalIp 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). + * + * @return builder + * + */ + public Builder internalIp(Boolean internalIp) { + return internalIp(Output.of(internalIp)); + } + + /** + * @param proxyUrl Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + * + * @return builder + * + */ + public Builder proxyUrl(@Nullable Output proxyUrl) { + $.proxyUrl = proxyUrl; + return this; + } + + /** + * @param proxyUrl Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + * + * @return builder + * + */ + public Builder proxyUrl(String proxyUrl) { + return proxyUrl(Output.of(proxyUrl)); + } + + public TargetAssociatedEntityGkeClusterArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetState.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetState.java index 6501955ef3..1dca48ef8c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/inputs/TargetState.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.gcp.clouddeploy.inputs.TargetAnthosClusterArgs; +import com.pulumi.gcp.clouddeploy.inputs.TargetAssociatedEntityArgs; import com.pulumi.gcp.clouddeploy.inputs.TargetCustomTargetArgs; import com.pulumi.gcp.clouddeploy.inputs.TargetExecutionConfigArgs; import com.pulumi.gcp.clouddeploy.inputs.TargetGkeArgs; @@ -60,6 +61,21 @@ public Optional> anthosCluster() { return Optional.ofNullable(this.anthosCluster); } + /** + * 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?$`. + * + */ + @Import(name="associatedEntities") + private @Nullable Output> associatedEntities; + + /** + * @return 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 Optional>> associatedEntities() { + return Optional.ofNullable(this.associatedEntities); + } + /** * Output only. Time at which the `Target` was created. * @@ -367,6 +383,7 @@ private TargetState() {} private TargetState(TargetState $) { this.annotations = $.annotations; this.anthosCluster = $.anthosCluster; + this.associatedEntities = $.associatedEntities; this.createTime = $.createTime; this.customTarget = $.customTarget; this.deployParameters = $.deployParameters; @@ -455,6 +472,37 @@ public Builder anthosCluster(TargetAnthosClusterArgs anthosCluster) { return anthosCluster(Output.of(anthosCluster)); } + /** + * @param 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?$`. + * + * @return builder + * + */ + public Builder associatedEntities(@Nullable Output> associatedEntities) { + $.associatedEntities = associatedEntities; + return this; + } + + /** + * @param 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?$`. + * + * @return builder + * + */ + public Builder associatedEntities(List associatedEntities) { + return associatedEntities(Output.of(associatedEntities)); + } + + /** + * @param 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?$`. + * + * @return builder + * + */ + public Builder associatedEntities(TargetAssociatedEntityArgs... associatedEntities) { + return associatedEntities(List.of(associatedEntities)); + } + /** * @param createTime Output only. Time at which the `Target` was created. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh.java index f8cc4d14e5..cdbdfcd410 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh.java @@ -5,6 +5,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.clouddeploy.outputs.DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations; import java.lang.String; import java.util.Objects; import java.util.Optional; @@ -27,6 +28,11 @@ public final class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfi * */ private @Nullable String podSelectorLabel; + /** + * @return 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. + * + */ + private @Nullable DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations routeDestinations; /** * @return 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. * @@ -65,6 +71,13 @@ public String httpRoute() { public Optional podSelectorLabel() { return Optional.ofNullable(this.podSelectorLabel); } + /** + * @return 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 Optional routeDestinations() { + return Optional.ofNullable(this.routeDestinations); + } /** * @return 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. * @@ -99,6 +112,7 @@ public static final class Builder { private String deployment; private String httpRoute; private @Nullable String podSelectorLabel; + private @Nullable DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations routeDestinations; private @Nullable String routeUpdateWaitTime; private String service; private @Nullable String stableCutbackDuration; @@ -108,6 +122,7 @@ public Builder(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKub this.deployment = defaults.deployment; this.httpRoute = defaults.httpRoute; this.podSelectorLabel = defaults.podSelectorLabel; + this.routeDestinations = defaults.routeDestinations; this.routeUpdateWaitTime = defaults.routeUpdateWaitTime; this.service = defaults.service; this.stableCutbackDuration = defaults.stableCutbackDuration; @@ -136,6 +151,12 @@ public Builder podSelectorLabel(@Nullable String podSelectorLabel) { return this; } @CustomType.Setter + public Builder routeDestinations(@Nullable DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations routeDestinations) { + + this.routeDestinations = routeDestinations; + return this; + } + @CustomType.Setter public Builder routeUpdateWaitTime(@Nullable String routeUpdateWaitTime) { this.routeUpdateWaitTime = routeUpdateWaitTime; @@ -160,6 +181,7 @@ public DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesG _resultValue.deployment = deployment; _resultValue.httpRoute = httpRoute; _resultValue.podSelectorLabel = podSelectorLabel; + _resultValue.routeDestinations = routeDestinations; _resultValue.routeUpdateWaitTime = routeUpdateWaitTime; _resultValue.service = service; _resultValue.stableCutbackDuration = stableCutbackDuration; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations.java new file mode 100644 index 0000000000..e7070e7d5e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations.java @@ -0,0 +1,86 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.clouddeploy.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations { + /** + * @return 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 "{@literal @}self" to include the Target cluster. + * + */ + private List destinationIds; + /** + * @return 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. + * + */ + private @Nullable Boolean propagateService; + + private DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations() {} + /** + * @return 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 "{@literal @}self" to include the Target cluster. + * + */ + public List destinationIds() { + return this.destinationIds; + } + /** + * @return 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 Optional propagateService() { + return Optional.ofNullable(this.propagateService); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List destinationIds; + private @Nullable Boolean propagateService; + public Builder() {} + public Builder(DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations defaults) { + Objects.requireNonNull(defaults); + this.destinationIds = defaults.destinationIds; + this.propagateService = defaults.propagateService; + } + + @CustomType.Setter + public Builder destinationIds(List destinationIds) { + if (destinationIds == null) { + throw new MissingRequiredPropertyException("DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations", "destinationIds"); + } + this.destinationIds = destinationIds; + return this; + } + public Builder destinationIds(String... destinationIds) { + return destinationIds(List.of(destinationIds)); + } + @CustomType.Setter + public Builder propagateService(@Nullable Boolean propagateService) { + + this.propagateService = propagateService; + return this; + } + public DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations build() { + final var _resultValue = new DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations(); + _resultValue.destinationIds = destinationIds; + _resultValue.propagateService = propagateService; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetAssociatedEntity.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetAssociatedEntity.java new file mode 100644 index 0000000000..5a6afd044c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetAssociatedEntity.java @@ -0,0 +1,110 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.clouddeploy.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.clouddeploy.outputs.TargetAssociatedEntityAnthosCluster; +import com.pulumi.gcp.clouddeploy.outputs.TargetAssociatedEntityGkeCluster; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; + +@CustomType +public final class TargetAssociatedEntity { + /** + * @return Optional. Information specifying Anthos clusters as associated entities. + * + */ + private @Nullable List anthosClusters; + /** + * @return The name for the key in the map for which this object is mapped to in the API + * + */ + private String entityId; + /** + * @return Optional. Information specifying GKE clusters as associated entities. + * + */ + private @Nullable List gkeClusters; + + private TargetAssociatedEntity() {} + /** + * @return Optional. Information specifying Anthos clusters as associated entities. + * + */ + public List anthosClusters() { + return this.anthosClusters == null ? List.of() : this.anthosClusters; + } + /** + * @return The name for the key in the map for which this object is mapped to in the API + * + */ + public String entityId() { + return this.entityId; + } + /** + * @return Optional. Information specifying GKE clusters as associated entities. + * + */ + public List gkeClusters() { + return this.gkeClusters == null ? List.of() : this.gkeClusters; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(TargetAssociatedEntity defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List anthosClusters; + private String entityId; + private @Nullable List gkeClusters; + public Builder() {} + public Builder(TargetAssociatedEntity defaults) { + Objects.requireNonNull(defaults); + this.anthosClusters = defaults.anthosClusters; + this.entityId = defaults.entityId; + this.gkeClusters = defaults.gkeClusters; + } + + @CustomType.Setter + public Builder anthosClusters(@Nullable List anthosClusters) { + + this.anthosClusters = anthosClusters; + return this; + } + public Builder anthosClusters(TargetAssociatedEntityAnthosCluster... anthosClusters) { + return anthosClusters(List.of(anthosClusters)); + } + @CustomType.Setter + public Builder entityId(String entityId) { + if (entityId == null) { + throw new MissingRequiredPropertyException("TargetAssociatedEntity", "entityId"); + } + this.entityId = entityId; + return this; + } + @CustomType.Setter + public Builder gkeClusters(@Nullable List gkeClusters) { + + this.gkeClusters = gkeClusters; + return this; + } + public Builder gkeClusters(TargetAssociatedEntityGkeCluster... gkeClusters) { + return gkeClusters(List.of(gkeClusters)); + } + public TargetAssociatedEntity build() { + final var _resultValue = new TargetAssociatedEntity(); + _resultValue.anthosClusters = anthosClusters; + _resultValue.entityId = entityId; + _resultValue.gkeClusters = gkeClusters; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetAssociatedEntityAnthosCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetAssociatedEntityAnthosCluster.java new file mode 100644 index 0000000000..ec3f8f7dbf --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetAssociatedEntityAnthosCluster.java @@ -0,0 +1,57 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.clouddeploy.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class TargetAssociatedEntityAnthosCluster { + /** + * @return Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + * + */ + private @Nullable String membership; + + private TargetAssociatedEntityAnthosCluster() {} + /** + * @return 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 Optional membership() { + return Optional.ofNullable(this.membership); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(TargetAssociatedEntityAnthosCluster defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String membership; + public Builder() {} + public Builder(TargetAssociatedEntityAnthosCluster defaults) { + Objects.requireNonNull(defaults); + this.membership = defaults.membership; + } + + @CustomType.Setter + public Builder membership(@Nullable String membership) { + + this.membership = membership; + return this; + } + public TargetAssociatedEntityAnthosCluster build() { + final var _resultValue = new TargetAssociatedEntityAnthosCluster(); + _resultValue.membership = membership; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetAssociatedEntityGkeCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetAssociatedEntityGkeCluster.java new file mode 100644 index 0000000000..68a8400ada --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/clouddeploy/outputs/TargetAssociatedEntityGkeCluster.java @@ -0,0 +1,100 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.clouddeploy.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class TargetAssociatedEntityGkeCluster { + /** + * @return Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + * + */ + private @Nullable String cluster; + /** + * @return 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). + * + */ + private @Nullable Boolean internalIp; + /** + * @return Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + * + */ + private @Nullable String proxyUrl; + + private TargetAssociatedEntityGkeCluster() {} + /** + * @return Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + * + */ + public Optional cluster() { + return Optional.ofNullable(this.cluster); + } + /** + * @return 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 Optional internalIp() { + return Optional.ofNullable(this.internalIp); + } + /** + * @return Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + * + */ + public Optional proxyUrl() { + return Optional.ofNullable(this.proxyUrl); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(TargetAssociatedEntityGkeCluster defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String cluster; + private @Nullable Boolean internalIp; + private @Nullable String proxyUrl; + public Builder() {} + public Builder(TargetAssociatedEntityGkeCluster defaults) { + Objects.requireNonNull(defaults); + this.cluster = defaults.cluster; + this.internalIp = defaults.internalIp; + this.proxyUrl = defaults.proxyUrl; + } + + @CustomType.Setter + public Builder cluster(@Nullable String cluster) { + + this.cluster = cluster; + return this; + } + @CustomType.Setter + public Builder internalIp(@Nullable Boolean internalIp) { + + this.internalIp = internalIp; + return this; + } + @CustomType.Setter + public Builder proxyUrl(@Nullable String proxyUrl) { + + this.proxyUrl = proxyUrl; + return this; + } + public TargetAssociatedEntityGkeCluster build() { + final var _resultValue = new TargetAssociatedEntityGkeCluster(); + _resultValue.cluster = cluster; + _resultValue.internalIp = internalIp; + _resultValue.proxyUrl = proxyUrl; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/inputs/FunctionServiceConfigSecretEnvironmentVariableArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/inputs/FunctionServiceConfigSecretEnvironmentVariableArgs.java index 9d3c0c6d64..685d9050a1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/inputs/FunctionServiceConfigSecretEnvironmentVariableArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/inputs/FunctionServiceConfigSecretEnvironmentVariableArgs.java @@ -30,14 +30,14 @@ public Output 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. * */ @Import(name="projectId", required=true) private Output projectId; /** - * @return 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. + * @return 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 Output projectId() { @@ -123,7 +123,7 @@ public Builder key(String key) { } /** - * @param projectId 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. + * @param projectId 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. * * @return builder * @@ -134,7 +134,7 @@ public Builder projectId(Output projectId) { } /** - * @param projectId 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. + * @param projectId 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/inputs/FunctionServiceConfigSecretVolumeArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/inputs/FunctionServiceConfigSecretVolumeArgs.java index feb7554598..b3f9879fb8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/inputs/FunctionServiceConfigSecretVolumeArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/inputs/FunctionServiceConfigSecretVolumeArgs.java @@ -34,14 +34,14 @@ public Output 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. * */ @Import(name="projectId", required=true) private Output projectId; /** - * @return 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. + * @return 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 Output projectId() { @@ -129,7 +129,7 @@ public Builder mountPath(String mountPath) { } /** - * @param projectId 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. + * @param projectId 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. * * @return builder * @@ -140,7 +140,7 @@ public Builder projectId(Output projectId) { } /** - * @param projectId 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. + * @param projectId 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/FunctionServiceConfigSecretEnvironmentVariable.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/FunctionServiceConfigSecretEnvironmentVariable.java index b053162e8c..4b9bf6acd9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/FunctionServiceConfigSecretEnvironmentVariable.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/FunctionServiceConfigSecretEnvironmentVariable.java @@ -16,7 +16,7 @@ public final class FunctionServiceConfigSecretEnvironmentVariable { */ private String key; /** - * @return 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. + * @return 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. * */ private String projectId; @@ -40,7 +40,7 @@ public String key() { return this.key; } /** - * @return 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. + * @return 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 String projectId() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/FunctionServiceConfigSecretVolume.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/FunctionServiceConfigSecretVolume.java index 8841aafd15..5134559056 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/FunctionServiceConfigSecretVolume.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/FunctionServiceConfigSecretVolume.java @@ -19,7 +19,7 @@ public final class FunctionServiceConfigSecretVolume { */ private String mountPath; /** - * @return 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. + * @return 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. * */ private String projectId; @@ -44,7 +44,7 @@ public String mountPath() { return this.mountPath; } /** - * @return 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. + * @return 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 String projectId() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/GetFunctionServiceConfigSecretEnvironmentVariable.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/GetFunctionServiceConfigSecretEnvironmentVariable.java index 236d05b941..48a69cdfee 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/GetFunctionServiceConfigSecretEnvironmentVariable.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/GetFunctionServiceConfigSecretEnvironmentVariable.java @@ -16,7 +16,7 @@ public final class GetFunctionServiceConfigSecretEnvironmentVariable { */ private String key; /** - * @return 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. + * @return 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. * */ private String projectId; @@ -40,7 +40,7 @@ public String key() { return this.key; } /** - * @return 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. + * @return 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 String projectId() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/GetFunctionServiceConfigSecretVolume.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/GetFunctionServiceConfigSecretVolume.java index 5c20c6bc83..60f402f9fe 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/GetFunctionServiceConfigSecretVolume.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctionsv2/outputs/GetFunctionServiceConfigSecretVolume.java @@ -18,7 +18,7 @@ public final class GetFunctionServiceConfigSecretVolume { */ private String mountPath; /** - * @return 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. + * @return 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. * */ private String projectId; @@ -42,7 +42,7 @@ public String mountPath() { return this.mountPath; } /** - * @return 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. + * @return 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 String projectId() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java index e839711436..d58cecb85f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java @@ -795,14 +795,14 @@ public Output executionCount() { return this.executionCount; } /** - * 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. * */ @Export(name="expireTime", refs={String.class}, tree="[0]") private Output expireTime; /** - * @return For a deleted resource, the time after which it will be permamently deleted. + * @return For a deleted resource, the time after which it will be permanently deleted. * */ public Output expireTime() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Service.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Service.java index d10b2e92df..bdeec38a36 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Service.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Service.java @@ -1156,14 +1156,14 @@ public Output etag() { return this.etag; } /** - * 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. * */ @Export(name="expireTime", refs={String.class}, tree="[0]") private Output expireTime; /** - * @return For a deleted resource, the time after which it will be permamently deleted. + * @return For a deleted resource, the time after which it will be permanently deleted. * */ public Output expireTime() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/JobState.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/JobState.java index 1f3c30a8c1..a3dcbd5cf4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/JobState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/JobState.java @@ -222,14 +222,14 @@ public Optional> executionCount() { } /** - * 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. * */ @Import(name="expireTime") private @Nullable Output expireTime; /** - * @return For a deleted resource, the time after which it will be permamently deleted. + * @return For a deleted resource, the time after which it will be permanently deleted. * */ public Optional> expireTime() { @@ -858,7 +858,7 @@ public Builder executionCount(Integer executionCount) { } /** - * @param expireTime For a deleted resource, the time after which it will be permamently deleted. + * @param expireTime For a deleted resource, the time after which it will be permanently deleted. * * @return builder * @@ -869,7 +869,7 @@ public Builder expireTime(@Nullable Output expireTime) { } /** - * @param expireTime For a deleted resource, the time after which it will be permamently deleted. + * @param expireTime For a deleted resource, the time after which it will be permanently deleted. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/ServiceState.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/ServiceState.java index b52920e04d..704204e922 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/ServiceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/ServiceState.java @@ -253,14 +253,14 @@ public Optional> etag() { } /** - * 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. * */ @Import(name="expireTime") private @Nullable Output expireTime; /** - * @return For a deleted resource, the time after which it will be permamently deleted. + * @return For a deleted resource, the time after which it will be permanently deleted. * */ public Optional> expireTime() { @@ -1047,7 +1047,7 @@ public Builder etag(String etag) { } /** - * @param expireTime For a deleted resource, the time after which it will be permamently deleted. + * @param expireTime For a deleted resource, the time after which it will be permanently deleted. * * @return builder * @@ -1058,7 +1058,7 @@ public Builder expireTime(@Nullable Output expireTime) { } /** - * @param expireTime For a deleted resource, the time after which it will be permamently deleted. + * @param expireTime For a deleted resource, the time after which it will be permanently deleted. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/composer/ComposerFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/ComposerFunctions.java index 9c1afcd2c6..7f2c161942 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/composer/ComposerFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/ComposerFunctions.java @@ -544,6 +544,8 @@ public static CompletableFuture getImageVersionsPlain(Ge return Deployment.getInstance().invokeAsync("gcp:composer/getImageVersions:getImageVersions", TypeShape.of(GetImageVersionsResult.class), args, Utilities.withVersion(options)); } /** + * Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment. + * * ## Example Usage * * <!--Start PulumiCodeChooser --> @@ -610,6 +612,8 @@ public static Output getUserWorkloadsConfigMap( return getUserWorkloadsConfigMap(args, InvokeOptions.Empty); } /** + * Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment. + * * ## Example Usage * * <!--Start PulumiCodeChooser --> @@ -676,6 +680,8 @@ public static CompletableFuture getUserWorkload return getUserWorkloadsConfigMapPlain(args, InvokeOptions.Empty); } /** + * Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment. + * * ## Example Usage * * <!--Start PulumiCodeChooser --> @@ -742,6 +748,8 @@ public static Output getUserWorkloadsConfigMap( return Deployment.getInstance().invoke("gcp:composer/getUserWorkloadsConfigMap:getUserWorkloadsConfigMap", TypeShape.of(GetUserWorkloadsConfigMapResult.class), args, Utilities.withVersion(options)); } /** + * Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment. + * * ## Example Usage * * <!--Start PulumiCodeChooser --> @@ -808,6 +816,8 @@ public static CompletableFuture getUserWorkload return Deployment.getInstance().invokeAsync("gcp:composer/getUserWorkloadsConfigMap:getUserWorkloadsConfigMap", TypeShape.of(GetUserWorkloadsConfigMapResult.class), args, Utilities.withVersion(options)); } /** + * Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment. + * * ## Example Usage * * <!--Start PulumiCodeChooser --> @@ -878,6 +888,8 @@ public static Output getUserWorkloadsSecret(GetUse return getUserWorkloadsSecret(args, InvokeOptions.Empty); } /** + * Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment. + * * ## Example Usage * * <!--Start PulumiCodeChooser --> @@ -948,6 +960,8 @@ public static CompletableFuture getUserWorkloadsSe return getUserWorkloadsSecretPlain(args, InvokeOptions.Empty); } /** + * Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment. + * * ## Example Usage * * <!--Start PulumiCodeChooser --> @@ -1018,6 +1032,8 @@ public static Output getUserWorkloadsSecret(GetUse return Deployment.getInstance().invoke("gcp:composer/getUserWorkloadsSecret:getUserWorkloadsSecret", TypeShape.of(GetUserWorkloadsSecretResult.class), args, Utilities.withVersion(options)); } /** + * Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment. + * * ## Example Usage * * <!--Start PulumiCodeChooser --> diff --git a/sdk/java/src/main/java/com/pulumi/gcp/composer/UserWorkloadsConfigMap.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/UserWorkloadsConfigMap.java index 9736d6ba20..91750579b4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/composer/UserWorkloadsConfigMap.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/UserWorkloadsConfigMap.java @@ -16,6 +16,13 @@ import javax.annotation.Nullable; /** + * 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/java/src/main/java/com/pulumi/gcp/composer/UserWorkloadsSecret.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/UserWorkloadsSecret.java index 43f38fcc4b..d6c347576b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/composer/UserWorkloadsSecret.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/UserWorkloadsSecret.java @@ -17,6 +17,9 @@ import javax.annotation.Nullable; /** + * User workloads Secret used by Airflow tasks that run with Kubernetes Executor or KubernetesPodOperator. + * Intended for Composer 3 Environments. + * * ## Example Usage * * <!--Start PulumiCodeChooser --> diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/Disk.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/Disk.java index fa50bb5fe3..a859cc4000 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/Disk.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/Disk.java @@ -874,20 +874,24 @@ public Output sourceSnapshotId() { return this.sourceSnapshotId; } /** - * 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} * */ @Export(name="storagePool", refs={String.class}, tree="[0]") private Output storagePool; /** - * @return The URL of the storage pool in which the new disk is created. + * @return 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 Output> storagePool() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskArgs.java index e9cc7c483c..80bdbc067b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskArgs.java @@ -525,20 +525,24 @@ public Optional> sourceSnapshotEncry } /** - * 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} * */ @Import(name="storagePool") private @Nullable Output storagePool; /** - * @return The URL of the storage pool in which the new disk is created. + * @return 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 Optional> storagePool() { @@ -1295,10 +1299,12 @@ public Builder sourceSnapshotEncryptionKey(DiskSourceSnapshotEncryptionKeyArgs s } /** - * @param storagePool The URL of the storage pool in which the new disk is created. + * @param storagePool 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} * * @return builder * @@ -1309,10 +1315,12 @@ public Builder storagePool(@Nullable Output storagePool) { } /** - * @param storagePool The URL of the storage pool in which the new disk is created. + * @param storagePool 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} * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/FirewallPolicyRule.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/FirewallPolicyRule.java index f5537fd4f1..06dc2e8f02 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/FirewallPolicyRule.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/FirewallPolicyRule.java @@ -19,6 +19,12 @@ import javax.annotation.Nullable; /** + * 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/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRule.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRule.java index 00cf66130e..7d3b029767 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRule.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRule.java @@ -13,6 +13,7 @@ import com.pulumi.gcp.compute.outputs.GlobalForwardingRuleMetadataFilter; import com.pulumi.gcp.compute.outputs.GlobalForwardingRuleServiceDirectoryRegistrations; import java.lang.Boolean; +import java.lang.Integer; import java.lang.String; import java.util.List; import java.util.Map; @@ -739,6 +740,20 @@ public Output> description() { public Output> effectiveLabels() { return this.effectiveLabels; } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Export(name="forwardingRuleId", refs={Integer.class}, tree="[0]") + private Output forwardingRuleId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Output forwardingRuleId() { + return this.forwardingRuleId; + } /** * 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/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManager.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManager.java index 5e74000b3d..97fc75139b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManager.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManager.java @@ -361,6 +361,20 @@ public Output fingerprint() { public Output instanceGroup() { return this.instanceGroup; } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Export(name="instanceGroupManagerId", refs={Integer.class}, tree="[0]") + private Output instanceGroupManagerId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Output instanceGroupManagerId() { + return this.instanceGroupManagerId; + } /** * The instance lifecycle policy for this managed instance group. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/Network.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/Network.java index 84015e30dd..75bcc234f8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/Network.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/Network.java @@ -501,6 +501,28 @@ public Output name() { public Output> networkFirewallPolicyEnforcementOrder() { return Codegen.optional(this.networkFirewallPolicyEnforcementOrder); } + /** + * 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} + * + */ + @Export(name="networkProfile", refs={String.class}, tree="[0]") + private Output networkProfile; + + /** + * @return 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} + * + */ + public Output> networkProfile() { + return Codegen.optional(this.networkProfile); + } /** * The unique identifier for the resource. This identifier is defined by the server. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/NetworkArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/NetworkArgs.java index 66dbbe37dd..24d7852565 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/NetworkArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/NetworkArgs.java @@ -238,6 +238,29 @@ public Optional> networkFirewallPolicyEnforcementOrder() { return Optional.ofNullable(this.networkFirewallPolicyEnforcementOrder); } + /** + * 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} + * + */ + @Import(name="networkProfile") + private @Nullable Output networkProfile; + + /** + * @return 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} + * + */ + public Optional> networkProfile() { + return Optional.ofNullable(this.networkProfile); + } + /** * The ID of the project in which the resource belongs. * If it is not provided, the provider project is used. @@ -294,6 +317,7 @@ private NetworkArgs(NetworkArgs $) { this.mtu = $.mtu; this.name = $.name; this.networkFirewallPolicyEnforcementOrder = $.networkFirewallPolicyEnforcementOrder; + this.networkProfile = $.networkProfile; this.project = $.project; this.routingMode = $.routingMode; } @@ -603,6 +627,35 @@ public Builder networkFirewallPolicyEnforcementOrder(String networkFirewallPolic return networkFirewallPolicyEnforcementOrder(Output.of(networkFirewallPolicyEnforcementOrder)); } + /** + * @param networkProfile 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} + * + * @return builder + * + */ + public Builder networkProfile(@Nullable Output networkProfile) { + $.networkProfile = networkProfile; + return this; + } + + /** + * @param networkProfile 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} + * + * @return builder + * + */ + public Builder networkProfile(String networkProfile) { + return networkProfile(Output.of(networkProfile)); + } + /** * @param project The ID of the project in which the resource belongs. * If it is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionHealthCheck.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionHealthCheck.java index 9b40d92ab8..a4bc99a253 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionHealthCheck.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionHealthCheck.java @@ -703,6 +703,20 @@ public Output> description() { public Output> grpcHealthCheck() { return Codegen.optional(this.grpcHealthCheck); } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Export(name="healthCheckId", refs={Integer.class}, tree="[0]") + private Output healthCheckId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Output healthCheckId() { + return this.healthCheckId; + } /** * A so-far unhealthy instance will be marked healthy after this many * consecutive successes. The default value is 2. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManager.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManager.java index 939c9860a9..7ece65a045 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManager.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManager.java @@ -396,6 +396,20 @@ public Output> ins public Output instanceGroup() { return this.instanceGroup; } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Export(name="instanceGroupManagerId", refs={Integer.class}, tree="[0]") + private Output instanceGroupManagerId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Output instanceGroupManagerId() { + return this.instanceGroupManagerId; + } /** * The instance lifecycle policy for this managed instance group. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpoint.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpoint.java index 9feb944d59..801d7b45a8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpoint.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpoint.java @@ -324,6 +324,20 @@ public Output> instance() { public Output> ipAddress() { return Codegen.optional(this.ipAddress); } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Export(name="networkEndpointId", refs={Integer.class}, tree="[0]") + private Output networkEndpointId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Output networkEndpointId() { + return this.networkEndpointId; + } /** * Port number of network endpoint. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroup.java index fbd9500910..d8079a166e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroup.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroup.java @@ -13,6 +13,7 @@ import com.pulumi.gcp.compute.outputs.RegionNetworkEndpointGroupAppEngine; import com.pulumi.gcp.compute.outputs.RegionNetworkEndpointGroupCloudFunction; import com.pulumi.gcp.compute.outputs.RegionNetworkEndpointGroupCloudRun; +import com.pulumi.gcp.compute.outputs.RegionNetworkEndpointGroupPscData; import com.pulumi.gcp.compute.outputs.RegionNetworkEndpointGroupServerlessDeployment; import java.lang.String; import java.util.Optional; @@ -382,6 +383,7 @@ * import com.pulumi.gcp.compute.ServiceAttachmentArgs; * import com.pulumi.gcp.compute.RegionNetworkEndpointGroup; * import com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs; + * import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupPscDataArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -434,7 +436,10 @@ * .region("europe-west4") * .loadBalancingScheme("INTERNAL") * .backendService(defaultRegionBackendService.id()) - * .allPorts(true) + * .ports( + * "80", + * "88", + * "443") * .network(default_.name()) * .subnetwork(defaultSubnetwork.name()) * .build()); @@ -454,6 +459,9 @@ * .region("europe-west4") * .networkEndpointType("PRIVATE_SERVICE_CONNECT") * .pscTargetService(defaultServiceAttachment.selfLink()) + * .pscData(RegionNetworkEndpointGroupPscDataArgs.builder() + * .producerPort("88") + * .build()) * .network(default_.selfLink()) * .subnetwork(defaultSubnetwork.selfLink()) * .build()); @@ -784,6 +792,22 @@ public Output> networkEndpointType() { public Output project() { return this.project; } + /** + * This field is only used for PSC NEGs. + * Structure is documented below. + * + */ + @Export(name="pscData", refs={RegionNetworkEndpointGroupPscData.class}, tree="[0]") + private Output pscData; + + /** + * @return This field is only used for PSC NEGs. + * Structure is documented below. + * + */ + public Output> pscData() { + return Codegen.optional(this.pscData); + } /** * 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/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroupArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroupArgs.java index c7827d0786..20d04d9c66 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroupArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroupArgs.java @@ -9,6 +9,7 @@ import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupAppEngineArgs; import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudFunctionArgs; import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudRunArgs; +import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupPscDataArgs; import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupServerlessDeploymentArgs; import java.lang.String; import java.util.Objects; @@ -176,6 +177,23 @@ public Optional> project() { return Optional.ofNullable(this.project); } + /** + * This field is only used for PSC NEGs. + * Structure is documented below. + * + */ + @Import(name="pscData") + private @Nullable Output pscData; + + /** + * @return This field is only used for PSC NEGs. + * Structure is documented below. + * + */ + public Optional> pscData() { + return Optional.ofNullable(this.pscData); + } + /** * This field is only used for PSC and INTERNET NEGs. * The target service url used to set up private service connection to @@ -261,6 +279,7 @@ private RegionNetworkEndpointGroupArgs(RegionNetworkEndpointGroupArgs $) { this.network = $.network; this.networkEndpointType = $.networkEndpointType; this.project = $.project; + this.pscData = $.pscData; this.pscTargetService = $.pscTargetService; this.region = $.region; this.serverlessDeployment = $.serverlessDeployment; @@ -489,6 +508,29 @@ public Builder project(String project) { return project(Output.of(project)); } + /** + * @param pscData This field is only used for PSC NEGs. + * Structure is documented below. + * + * @return builder + * + */ + public Builder pscData(@Nullable Output pscData) { + $.pscData = pscData; + return this; + } + + /** + * @param pscData This field is only used for PSC NEGs. + * Structure is documented below. + * + * @return builder + * + */ + public Builder pscData(RegionNetworkEndpointGroupPscDataArgs pscData) { + return pscData(Output.of(pscData)); + } + /** * @param pscTargetService 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/java/src/main/java/com/pulumi/gcp/compute/Subnetwork.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/Subnetwork.java index 755f340cdc..489157a998 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/Subnetwork.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/Subnetwork.java @@ -13,6 +13,7 @@ import com.pulumi.gcp.compute.outputs.SubnetworkLogConfig; import com.pulumi.gcp.compute.outputs.SubnetworkSecondaryIpRange; import java.lang.Boolean; +import java.lang.Integer; import java.lang.String; import java.util.List; import java.util.Optional; @@ -979,6 +980,20 @@ public Output> sendSecondaryIpRangeIfEmpty() { public Output stackType() { return this.stackType; } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Export(name="subnetworkId", refs={Integer.class}, tree="[0]") + private Output subnetworkId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Output subnetworkId() { + return this.subnetworkId; + } /** * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMap.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMap.java index 6be8510896..493dbca088 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMap.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMap.java @@ -1076,7 +1076,7 @@ public Output creationTimestamp() { return this.creationTimestamp; } /** - * 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 @@ -1091,7 +1091,7 @@ public Output creationTimestamp() { private Output defaultCustomErrorResponsePolicy; /** - * @return defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @return 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/java/src/main/java/com/pulumi/gcp/compute/URLMapArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMapArgs.java index b0f916b1e4..48b0d75450 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMapArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/URLMapArgs.java @@ -24,7 +24,7 @@ public final class URLMapArgs extends com.pulumi.resources.ResourceArgs { public static final URLMapArgs Empty = new URLMapArgs(); /** - * 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 @@ -39,7 +39,7 @@ public final class URLMapArgs extends com.pulumi.resources.ResourceArgs { private @Nullable Output defaultCustomErrorResponsePolicy; /** - * @return defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @return 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 @@ -289,7 +289,7 @@ public Builder(URLMapArgs defaults) { } /** - * @param defaultCustomErrorResponsePolicy defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @param defaultCustomErrorResponsePolicy 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 @@ -308,7 +308,7 @@ public Builder defaultCustomErrorResponsePolicy(@Nullable Output> sourceSnapshotId() { } /** - * 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} * */ @Import(name="storagePool") private @Nullable Output storagePool; /** - * @return The URL of the storage pool in which the new disk is created. + * @return 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 Optional> storagePool() { @@ -1772,10 +1776,12 @@ public Builder sourceSnapshotId(String sourceSnapshotId) { } /** - * @param storagePool The URL of the storage pool in which the new disk is created. + * @param storagePool 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} * * @return builder * @@ -1786,10 +1792,12 @@ public Builder storagePool(@Nullable Output storagePool) { } /** - * @param storagePool The URL of the storage pool in which the new disk is created. + * @param storagePool 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} * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetForwardingRulesArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetForwardingRulesArgs.java index 055eb6c013..7ac7c4203e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetForwardingRulesArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetForwardingRulesArgs.java @@ -33,7 +33,7 @@ public Optional> project() { /** * 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. * */ @Import(name="region") @@ -42,7 +42,7 @@ public Optional> project() { /** * @return 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 Optional> region() { @@ -98,7 +98,7 @@ public Builder project(String project) { /** * @param region 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. * * @return builder * @@ -111,7 +111,7 @@ public Builder region(@Nullable Output region) { /** * @param region 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetForwardingRulesPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetForwardingRulesPlainArgs.java index ab6f982935..f639457ed3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetForwardingRulesPlainArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetForwardingRulesPlainArgs.java @@ -32,7 +32,7 @@ public Optional project() { /** * 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. * */ @Import(name="region") @@ -41,7 +41,7 @@ public Optional project() { /** * @return 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 Optional region() { @@ -87,7 +87,7 @@ public Builder project(@Nullable String project) { /** * @param region 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetNetworkArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetNetworkArgs.java index 3c9c952256..243401c15f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetNetworkArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetNetworkArgs.java @@ -35,6 +35,21 @@ public Output name() { return this.name; } + /** + * Beta A full or partial URL of the network profile to apply to this network. + * + */ + @Import(name="networkProfile") + private @Nullable Output networkProfile; + + /** + * @return Beta A full or partial URL of the network profile to apply to this network. + * + */ + public Optional> networkProfile() { + return Optional.ofNullable(this.networkProfile); + } + /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -56,6 +71,7 @@ private GetNetworkArgs() {} private GetNetworkArgs(GetNetworkArgs $) { this.name = $.name; + this.networkProfile = $.networkProfile; this.project = $.project; } @@ -102,6 +118,27 @@ public Builder name(String name) { return name(Output.of(name)); } + /** + * @param networkProfile Beta A full or partial URL of the network profile to apply to this network. + * + * @return builder + * + */ + public Builder networkProfile(@Nullable Output networkProfile) { + $.networkProfile = networkProfile; + return this; + } + + /** + * @param networkProfile Beta A full or partial URL of the network profile to apply to this network. + * + * @return builder + * + */ + public Builder networkProfile(String networkProfile) { + return networkProfile(Output.of(networkProfile)); + } + /** * @param project The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetNetworkPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetNetworkPlainArgs.java index bb4e2964a7..d77e491588 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetNetworkPlainArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GetNetworkPlainArgs.java @@ -34,6 +34,21 @@ public String name() { return this.name; } + /** + * Beta A full or partial URL of the network profile to apply to this network. + * + */ + @Import(name="networkProfile") + private @Nullable String networkProfile; + + /** + * @return Beta A full or partial URL of the network profile to apply to this network. + * + */ + public Optional networkProfile() { + return Optional.ofNullable(this.networkProfile); + } + /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -55,6 +70,7 @@ private GetNetworkPlainArgs() {} private GetNetworkPlainArgs(GetNetworkPlainArgs $) { this.name = $.name; + this.networkProfile = $.networkProfile; this.project = $.project; } @@ -89,6 +105,17 @@ public Builder name(String name) { return this; } + /** + * @param networkProfile Beta A full or partial URL of the network profile to apply to this network. + * + * @return builder + * + */ + public Builder networkProfile(@Nullable String networkProfile) { + $.networkProfile = networkProfile; + return this; + } + /** * @param project The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalForwardingRuleState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalForwardingRuleState.java index 81c8e56cf8..e22e8a654d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalForwardingRuleState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalForwardingRuleState.java @@ -8,6 +8,7 @@ import com.pulumi.gcp.compute.inputs.GlobalForwardingRuleMetadataFilterArgs; import com.pulumi.gcp.compute.inputs.GlobalForwardingRuleServiceDirectoryRegistrationsArgs; import java.lang.Boolean; +import java.lang.Integer; import java.lang.String; import java.util.List; import java.util.Map; @@ -82,6 +83,21 @@ public Optional>> effectiveLabels() { return Optional.ofNullable(this.effectiveLabels); } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Import(name="forwardingRuleId") + private @Nullable Output forwardingRuleId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Optional> forwardingRuleId() { + return Optional.ofNullable(this.forwardingRuleId); + } + /** * IP address for which this forwarding rule accepts traffic. When a client * sends traffic to this IP address, the forwarding rule directs the traffic @@ -617,6 +633,7 @@ private GlobalForwardingRuleState(GlobalForwardingRuleState $) { this.baseForwardingRule = $.baseForwardingRule; this.description = $.description; this.effectiveLabels = $.effectiveLabels; + this.forwardingRuleId = $.forwardingRuleId; this.ipAddress = $.ipAddress; this.ipProtocol = $.ipProtocol; this.ipVersion = $.ipVersion; @@ -743,6 +760,27 @@ public Builder effectiveLabels(Map effectiveLabels) { return effectiveLabels(Output.of(effectiveLabels)); } + /** + * @param forwardingRuleId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder forwardingRuleId(@Nullable Output forwardingRuleId) { + $.forwardingRuleId = forwardingRuleId; + return this; + } + + /** + * @param forwardingRuleId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder forwardingRuleId(Integer forwardingRuleId) { + return forwardingRuleId(Output.of(forwardingRuleId)); + } + /** * @param ipAddress 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/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceAdvancedMachineFeaturesArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceAdvancedMachineFeaturesArgs.java index 3afdced48d..8e022b6676 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceAdvancedMachineFeaturesArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceAdvancedMachineFeaturesArgs.java @@ -32,6 +32,36 @@ public Optional> enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * Whether to enable UEFI networking for instance creation. + * + */ + @Import(name="enableUefiNetworking") + private @Nullable Output enableUefiNetworking; + + /** + * @return Whether to enable UEFI networking for instance creation. + * + */ + public Optional> enableUefiNetworking() { + return Optional.ofNullable(this.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`. + * + */ + @Import(name="performanceMonitoringUnit") + private @Nullable Output performanceMonitoringUnit; + + /** + * @return [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 Optional> performanceMonitoringUnit() { + return Optional.ofNullable(this.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. * @@ -81,6 +111,8 @@ private InstanceAdvancedMachineFeaturesArgs() {} private InstanceAdvancedMachineFeaturesArgs(InstanceAdvancedMachineFeaturesArgs $) { this.enableNestedVirtualization = $.enableNestedVirtualization; + this.enableUefiNetworking = $.enableUefiNetworking; + this.performanceMonitoringUnit = $.performanceMonitoringUnit; this.threadsPerCore = $.threadsPerCore; this.turboMode = $.turboMode; this.visibleCoreCount = $.visibleCoreCount; @@ -125,6 +157,48 @@ public Builder enableNestedVirtualization(Boolean enableNestedVirtualization) { return enableNestedVirtualization(Output.of(enableNestedVirtualization)); } + /** + * @param enableUefiNetworking Whether to enable UEFI networking for instance creation. + * + * @return builder + * + */ + public Builder enableUefiNetworking(@Nullable Output enableUefiNetworking) { + $.enableUefiNetworking = enableUefiNetworking; + return this; + } + + /** + * @param enableUefiNetworking Whether to enable UEFI networking for instance creation. + * + * @return builder + * + */ + public Builder enableUefiNetworking(Boolean enableUefiNetworking) { + return enableUefiNetworking(Output.of(enableUefiNetworking)); + } + + /** + * @param performanceMonitoringUnit [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`. + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(@Nullable Output performanceMonitoringUnit) { + $.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + + /** + * @param performanceMonitoringUnit [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`. + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(String performanceMonitoringUnit) { + return performanceMonitoringUnit(Output.of(performanceMonitoringUnit)); + } + /** * @param threadsPerCore 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/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceBootDiskInitializeParamsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceBootDiskInitializeParamsArgs.java index ab74c35eae..75bd472ee9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceBootDiskInitializeParamsArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceBootDiskInitializeParamsArgs.java @@ -185,20 +185,24 @@ public Optional> 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} * */ @Import(name="storagePool") private @Nullable Output storagePool; /** - * @return The URL of the storage pool in which the new disk is created. + * @return 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 Optional> storagePool() { @@ -468,10 +472,12 @@ public Builder size(Integer size) { } /** - * @param storagePool The URL of the storage pool in which the new disk is created. + * @param storagePool 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} * * @return builder * @@ -482,10 +488,12 @@ public Builder storagePool(@Nullable Output storagePool) { } /** - * @param storagePool The URL of the storage pool in which the new disk is created. + * @param storagePool 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} * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageAdvancedMachineFeaturesArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageAdvancedMachineFeaturesArgs.java index 6768ac67d6..ccfe8e105d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageAdvancedMachineFeaturesArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageAdvancedMachineFeaturesArgs.java @@ -32,6 +32,36 @@ public Optional> enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * Whether to enable UEFI networking for the instance. + * + */ + @Import(name="enableUefiNetworking") + private @Nullable Output enableUefiNetworking; + + /** + * @return Whether to enable UEFI networking for the instance. + * + */ + public Optional> enableUefiNetworking() { + return Optional.ofNullable(this.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". + * + */ + @Import(name="performanceMonitoringUnit") + private @Nullable Output performanceMonitoringUnit; + + /** + * @return 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 Optional> performanceMonitoringUnit() { + return Optional.ofNullable(this.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. * @@ -81,6 +111,8 @@ private InstanceFromMachineImageAdvancedMachineFeaturesArgs() {} private InstanceFromMachineImageAdvancedMachineFeaturesArgs(InstanceFromMachineImageAdvancedMachineFeaturesArgs $) { this.enableNestedVirtualization = $.enableNestedVirtualization; + this.enableUefiNetworking = $.enableUefiNetworking; + this.performanceMonitoringUnit = $.performanceMonitoringUnit; this.threadsPerCore = $.threadsPerCore; this.turboMode = $.turboMode; this.visibleCoreCount = $.visibleCoreCount; @@ -125,6 +157,48 @@ public Builder enableNestedVirtualization(Boolean enableNestedVirtualization) { return enableNestedVirtualization(Output.of(enableNestedVirtualization)); } + /** + * @param enableUefiNetworking Whether to enable UEFI networking for the instance. + * + * @return builder + * + */ + public Builder enableUefiNetworking(@Nullable Output enableUefiNetworking) { + $.enableUefiNetworking = enableUefiNetworking; + return this; + } + + /** + * @param enableUefiNetworking Whether to enable UEFI networking for the instance. + * + * @return builder + * + */ + public Builder enableUefiNetworking(Boolean enableUefiNetworking) { + return enableUefiNetworking(Output.of(enableUefiNetworking)); + } + + /** + * @param performanceMonitoringUnit 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". + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(@Nullable Output performanceMonitoringUnit) { + $.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + + /** + * @param performanceMonitoringUnit 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". + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(String performanceMonitoringUnit) { + return performanceMonitoringUnit(Output.of(performanceMonitoringUnit)); + } + /** * @param threadsPerCore 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/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageNetworkInterfaceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageNetworkInterfaceArgs.java index b8d9489625..0644654c99 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageNetworkInterfaceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromMachineImageNetworkInterfaceArgs.java @@ -173,14 +173,14 @@ public Optional> 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 * */ @Import(name="nicType") private @Nullable Output nicType; /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * */ public Optional> nicType() { @@ -544,7 +544,7 @@ public Builder networkIp(String networkIp) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @param nicType The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * * @return builder * @@ -555,7 +555,7 @@ public Builder nicType(@Nullable Output nicType) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @param nicType The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateAdvancedMachineFeaturesArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateAdvancedMachineFeaturesArgs.java index a048c5ee94..e93c25b6a6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateAdvancedMachineFeaturesArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateAdvancedMachineFeaturesArgs.java @@ -32,6 +32,36 @@ public Optional> enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * Whether to enable UEFI networking for the instance. + * + */ + @Import(name="enableUefiNetworking") + private @Nullable Output enableUefiNetworking; + + /** + * @return Whether to enable UEFI networking for the instance. + * + */ + public Optional> enableUefiNetworking() { + return Optional.ofNullable(this.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". + * + */ + @Import(name="performanceMonitoringUnit") + private @Nullable Output performanceMonitoringUnit; + + /** + * @return 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 Optional> performanceMonitoringUnit() { + return Optional.ofNullable(this.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. * @@ -81,6 +111,8 @@ private InstanceFromTemplateAdvancedMachineFeaturesArgs() {} private InstanceFromTemplateAdvancedMachineFeaturesArgs(InstanceFromTemplateAdvancedMachineFeaturesArgs $) { this.enableNestedVirtualization = $.enableNestedVirtualization; + this.enableUefiNetworking = $.enableUefiNetworking; + this.performanceMonitoringUnit = $.performanceMonitoringUnit; this.threadsPerCore = $.threadsPerCore; this.turboMode = $.turboMode; this.visibleCoreCount = $.visibleCoreCount; @@ -125,6 +157,48 @@ public Builder enableNestedVirtualization(Boolean enableNestedVirtualization) { return enableNestedVirtualization(Output.of(enableNestedVirtualization)); } + /** + * @param enableUefiNetworking Whether to enable UEFI networking for the instance. + * + * @return builder + * + */ + public Builder enableUefiNetworking(@Nullable Output enableUefiNetworking) { + $.enableUefiNetworking = enableUefiNetworking; + return this; + } + + /** + * @param enableUefiNetworking Whether to enable UEFI networking for the instance. + * + * @return builder + * + */ + public Builder enableUefiNetworking(Boolean enableUefiNetworking) { + return enableUefiNetworking(Output.of(enableUefiNetworking)); + } + + /** + * @param performanceMonitoringUnit 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". + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(@Nullable Output performanceMonitoringUnit) { + $.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + + /** + * @param performanceMonitoringUnit 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". + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(String performanceMonitoringUnit) { + return performanceMonitoringUnit(Output.of(performanceMonitoringUnit)); + } + /** * @param threadsPerCore 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/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateNetworkInterfaceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateNetworkInterfaceArgs.java index db5e9a2857..8583471abb 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateNetworkInterfaceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateNetworkInterfaceArgs.java @@ -173,14 +173,14 @@ public Optional> 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 * */ @Import(name="nicType") private @Nullable Output nicType; /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * */ public Optional> nicType() { @@ -544,7 +544,7 @@ public Builder networkIp(String networkIp) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @param nicType The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * * @return builder * @@ -555,7 +555,7 @@ public Builder nicType(@Nullable Output nicType) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @param nicType The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerState.java index df89bfa94a..748d1cdbd6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerState.java @@ -153,6 +153,21 @@ public Optional> instanceGroup() { return Optional.ofNullable(this.instanceGroup); } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Import(name="instanceGroupManagerId") + private @Nullable Output instanceGroupManagerId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Optional> instanceGroupManagerId() { + return Optional.ofNullable(this.instanceGroupManagerId); + } + /** * The instance lifecycle policy for this managed instance group. * @@ -535,6 +550,7 @@ private InstanceGroupManagerState(InstanceGroupManagerState $) { this.description = $.description; this.fingerprint = $.fingerprint; this.instanceGroup = $.instanceGroup; + this.instanceGroupManagerId = $.instanceGroupManagerId; this.instanceLifecyclePolicy = $.instanceLifecyclePolicy; this.listManagedInstancesResults = $.listManagedInstancesResults; this.name = $.name; @@ -742,6 +758,27 @@ public Builder instanceGroup(String instanceGroup) { return instanceGroup(Output.of(instanceGroup)); } + /** + * @param instanceGroupManagerId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder instanceGroupManagerId(@Nullable Output instanceGroupManagerId) { + $.instanceGroupManagerId = instanceGroupManagerId; + return this; + } + + /** + * @param instanceGroupManagerId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder instanceGroupManagerId(Integer instanceGroupManagerId) { + return instanceGroupManagerId(Output.of(instanceGroupManagerId)); + } + /** * @param instanceLifecyclePolicy The instance lifecycle policy for this managed instance group. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceNetworkInterfaceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceNetworkInterfaceArgs.java index 9c09877e06..ac372f582d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceNetworkInterfaceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceNetworkInterfaceArgs.java @@ -189,14 +189,14 @@ public Optional> 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. * */ @Import(name="nicType") private @Nullable Output nicType; /** - * @return The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. + * @return 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 Optional> nicType() { @@ -598,7 +598,7 @@ public Builder networkIp(String networkIp) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. + * @param nicType 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. * * @return builder * @@ -609,7 +609,7 @@ public Builder nicType(@Nullable Output nicType) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. + * @param nicType 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateAdvancedMachineFeaturesArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateAdvancedMachineFeaturesArgs.java index 5120b2e550..c97c548ba4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateAdvancedMachineFeaturesArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateAdvancedMachineFeaturesArgs.java @@ -32,6 +32,36 @@ public Optional> enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * Whether to enable UEFI networking for instance creation. + * + */ + @Import(name="enableUefiNetworking") + private @Nullable Output enableUefiNetworking; + + /** + * @return Whether to enable UEFI networking for instance creation. + * + */ + public Optional> enableUefiNetworking() { + return Optional.ofNullable(this.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`. + * + */ + @Import(name="performanceMonitoringUnit") + private @Nullable Output performanceMonitoringUnit; + + /** + * @return [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 Optional> performanceMonitoringUnit() { + return Optional.ofNullable(this.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. * @@ -81,6 +111,8 @@ private InstanceTemplateAdvancedMachineFeaturesArgs() {} private InstanceTemplateAdvancedMachineFeaturesArgs(InstanceTemplateAdvancedMachineFeaturesArgs $) { this.enableNestedVirtualization = $.enableNestedVirtualization; + this.enableUefiNetworking = $.enableUefiNetworking; + this.performanceMonitoringUnit = $.performanceMonitoringUnit; this.threadsPerCore = $.threadsPerCore; this.turboMode = $.turboMode; this.visibleCoreCount = $.visibleCoreCount; @@ -125,6 +157,48 @@ public Builder enableNestedVirtualization(Boolean enableNestedVirtualization) { return enableNestedVirtualization(Output.of(enableNestedVirtualization)); } + /** + * @param enableUefiNetworking Whether to enable UEFI networking for instance creation. + * + * @return builder + * + */ + public Builder enableUefiNetworking(@Nullable Output enableUefiNetworking) { + $.enableUefiNetworking = enableUefiNetworking; + return this; + } + + /** + * @param enableUefiNetworking Whether to enable UEFI networking for instance creation. + * + * @return builder + * + */ + public Builder enableUefiNetworking(Boolean enableUefiNetworking) { + return enableUefiNetworking(Output.of(enableUefiNetworking)); + } + + /** + * @param performanceMonitoringUnit [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`. + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(@Nullable Output performanceMonitoringUnit) { + $.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + + /** + * @param performanceMonitoringUnit [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`. + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(String performanceMonitoringUnit) { + return performanceMonitoringUnit(Output.of(performanceMonitoringUnit)); + } + /** * @param threadsPerCore 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/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateNetworkInterfaceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateNetworkInterfaceArgs.java index 3584707e90..a488e90855 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateNetworkInterfaceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateNetworkInterfaceArgs.java @@ -197,14 +197,14 @@ public Optional> 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. * */ @Import(name="nicType") private @Nullable Output nicType; /** - * @return The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @return 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 Optional> nicType() { @@ -591,7 +591,7 @@ public Builder networkIp(String networkIp) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @param nicType 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. * * @return builder * @@ -602,7 +602,7 @@ public Builder nicType(@Nullable Output nicType) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @param nicType 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NetworkState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NetworkState.java index 3bdea8fefe..2bfb257272 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NetworkState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NetworkState.java @@ -255,6 +255,29 @@ public Optional> networkFirewallPolicyEnforcementOrder() { return Optional.ofNullable(this.networkFirewallPolicyEnforcementOrder); } + /** + * 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} + * + */ + @Import(name="networkProfile") + private @Nullable Output networkProfile; + + /** + * @return 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} + * + */ + public Optional> networkProfile() { + return Optional.ofNullable(this.networkProfile); + } + /** * The unique identifier for the resource. This identifier is defined by the server. * @@ -342,6 +365,7 @@ private NetworkState(NetworkState $) { this.mtu = $.mtu; this.name = $.name; this.networkFirewallPolicyEnforcementOrder = $.networkFirewallPolicyEnforcementOrder; + this.networkProfile = $.networkProfile; this.numericId = $.numericId; this.project = $.project; this.routingMode = $.routingMode; @@ -676,6 +700,35 @@ public Builder networkFirewallPolicyEnforcementOrder(String networkFirewallPolic return networkFirewallPolicyEnforcementOrder(Output.of(networkFirewallPolicyEnforcementOrder)); } + /** + * @param networkProfile 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} + * + * @return builder + * + */ + public Builder networkProfile(@Nullable Output networkProfile) { + $.networkProfile = networkProfile; + return this; + } + + /** + * @param networkProfile 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} + * + * @return builder + * + */ + public Builder networkProfile(String networkProfile) { + return networkProfile(Output.of(networkProfile)); + } + /** * @param numericId The unique identifier for the resource. This identifier is defined by the server. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionHealthCheckState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionHealthCheckState.java index daba1b0b2b..084a7c1587 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionHealthCheckState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionHealthCheckState.java @@ -89,6 +89,21 @@ public Optional> grpcHealthCheck() return Optional.ofNullable(this.grpcHealthCheck); } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Import(name="healthCheckId") + private @Nullable Output healthCheckId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Optional> healthCheckId() { + return Optional.ofNullable(this.healthCheckId); + } + /** * A so-far unhealthy instance will be marked healthy after this many * consecutive successes. The default value is 2. @@ -346,6 +361,7 @@ private RegionHealthCheckState(RegionHealthCheckState $) { this.creationTimestamp = $.creationTimestamp; this.description = $.description; this.grpcHealthCheck = $.grpcHealthCheck; + this.healthCheckId = $.healthCheckId; this.healthyThreshold = $.healthyThreshold; this.http2HealthCheck = $.http2HealthCheck; this.httpHealthCheck = $.httpHealthCheck; @@ -470,6 +486,27 @@ public Builder grpcHealthCheck(RegionHealthCheckGrpcHealthCheckArgs grpcHealthCh return grpcHealthCheck(Output.of(grpcHealthCheck)); } + /** + * @param healthCheckId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder healthCheckId(@Nullable Output healthCheckId) { + $.healthCheckId = healthCheckId; + return this; + } + + /** + * @param healthCheckId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder healthCheckId(Integer healthCheckId) { + return healthCheckId(Output.of(healthCheckId)); + } + /** * @param healthyThreshold A so-far unhealthy instance will be marked healthy after this many * consecutive successes. The default value is 2. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerState.java index 68d7fc53bb..12ecf8536e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerState.java @@ -203,6 +203,21 @@ public Optional> instanceGroup() { return Optional.ofNullable(this.instanceGroup); } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Import(name="instanceGroupManagerId") + private @Nullable Output instanceGroupManagerId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Optional> instanceGroupManagerId() { + return Optional.ofNullable(this.instanceGroupManagerId); + } + /** * The instance lifecycle policy for this managed instance group. * @@ -575,6 +590,7 @@ private RegionInstanceGroupManagerState(RegionInstanceGroupManagerState $) { this.fingerprint = $.fingerprint; this.instanceFlexibilityPolicy = $.instanceFlexibilityPolicy; this.instanceGroup = $.instanceGroup; + this.instanceGroupManagerId = $.instanceGroupManagerId; this.instanceLifecyclePolicy = $.instanceLifecyclePolicy; this.listManagedInstancesResults = $.listManagedInstancesResults; this.name = $.name; @@ -859,6 +875,27 @@ public Builder instanceGroup(String instanceGroup) { return instanceGroup(Output.of(instanceGroup)); } + /** + * @param instanceGroupManagerId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder instanceGroupManagerId(@Nullable Output instanceGroupManagerId) { + $.instanceGroupManagerId = instanceGroupManagerId; + return this; + } + + /** + * @param instanceGroupManagerId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder instanceGroupManagerId(Integer instanceGroupManagerId) { + return instanceGroupManagerId(Output.of(instanceGroupManagerId)); + } + /** * @param instanceLifecyclePolicy The instance lifecycle policy for this managed instance group. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateAdvancedMachineFeaturesArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateAdvancedMachineFeaturesArgs.java index 4bf14d2aff..dcff784420 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateAdvancedMachineFeaturesArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateAdvancedMachineFeaturesArgs.java @@ -32,6 +32,36 @@ public Optional> enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * Whether to enable UEFI networking for instance creation. + * + */ + @Import(name="enableUefiNetworking") + private @Nullable Output enableUefiNetworking; + + /** + * @return Whether to enable UEFI networking for instance creation. + * + */ + public Optional> enableUefiNetworking() { + return Optional.ofNullable(this.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`. + * + */ + @Import(name="performanceMonitoringUnit") + private @Nullable Output performanceMonitoringUnit; + + /** + * @return [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 Optional> performanceMonitoringUnit() { + return Optional.ofNullable(this.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. * @@ -81,6 +111,8 @@ private RegionInstanceTemplateAdvancedMachineFeaturesArgs() {} private RegionInstanceTemplateAdvancedMachineFeaturesArgs(RegionInstanceTemplateAdvancedMachineFeaturesArgs $) { this.enableNestedVirtualization = $.enableNestedVirtualization; + this.enableUefiNetworking = $.enableUefiNetworking; + this.performanceMonitoringUnit = $.performanceMonitoringUnit; this.threadsPerCore = $.threadsPerCore; this.turboMode = $.turboMode; this.visibleCoreCount = $.visibleCoreCount; @@ -125,6 +157,48 @@ public Builder enableNestedVirtualization(Boolean enableNestedVirtualization) { return enableNestedVirtualization(Output.of(enableNestedVirtualization)); } + /** + * @param enableUefiNetworking Whether to enable UEFI networking for instance creation. + * + * @return builder + * + */ + public Builder enableUefiNetworking(@Nullable Output enableUefiNetworking) { + $.enableUefiNetworking = enableUefiNetworking; + return this; + } + + /** + * @param enableUefiNetworking Whether to enable UEFI networking for instance creation. + * + * @return builder + * + */ + public Builder enableUefiNetworking(Boolean enableUefiNetworking) { + return enableUefiNetworking(Output.of(enableUefiNetworking)); + } + + /** + * @param performanceMonitoringUnit [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`. + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(@Nullable Output performanceMonitoringUnit) { + $.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + + /** + * @param performanceMonitoringUnit [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`. + * + * @return builder + * + */ + public Builder performanceMonitoringUnit(String performanceMonitoringUnit) { + return performanceMonitoringUnit(Output.of(performanceMonitoringUnit)); + } + /** * @param threadsPerCore 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/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateNetworkInterfaceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateNetworkInterfaceArgs.java index ddd51c3bfd..98144e57a0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateNetworkInterfaceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceTemplateNetworkInterfaceArgs.java @@ -162,14 +162,14 @@ public Optional> 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. * */ @Import(name="nicType") private @Nullable Output nicType; /** - * @return The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @return 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 Optional> nicType() { @@ -499,7 +499,7 @@ public Builder networkIp(String networkIp) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @param nicType 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. * * @return builder * @@ -510,7 +510,7 @@ public Builder nicType(@Nullable Output nicType) { } /** - * @param nicType The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @param nicType 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointGroupPscDataArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointGroupPscDataArgs.java new file mode 100644 index 0000000000..bb59a39dbd --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointGroupPscDataArgs.java @@ -0,0 +1,95 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RegionNetworkEndpointGroupPscDataArgs extends com.pulumi.resources.ResourceArgs { + + public static final RegionNetworkEndpointGroupPscDataArgs Empty = new RegionNetworkEndpointGroupPscDataArgs(); + + /** + * 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. + * + */ + @Import(name="producerPort") + private @Nullable Output producerPort; + + /** + * @return 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 Optional> producerPort() { + return Optional.ofNullable(this.producerPort); + } + + private RegionNetworkEndpointGroupPscDataArgs() {} + + private RegionNetworkEndpointGroupPscDataArgs(RegionNetworkEndpointGroupPscDataArgs $) { + this.producerPort = $.producerPort; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RegionNetworkEndpointGroupPscDataArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RegionNetworkEndpointGroupPscDataArgs $; + + public Builder() { + $ = new RegionNetworkEndpointGroupPscDataArgs(); + } + + public Builder(RegionNetworkEndpointGroupPscDataArgs defaults) { + $ = new RegionNetworkEndpointGroupPscDataArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param producerPort 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. + * + * @return builder + * + */ + public Builder producerPort(@Nullable Output producerPort) { + $.producerPort = producerPort; + return this; + } + + /** + * @param producerPort 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. + * + * @return builder + * + */ + public Builder producerPort(String producerPort) { + return producerPort(Output.of(producerPort)); + } + + public RegionNetworkEndpointGroupPscDataArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointGroupState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointGroupState.java index dffffbcd39..4c434c67ff 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointGroupState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointGroupState.java @@ -8,6 +8,7 @@ import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupAppEngineArgs; import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudFunctionArgs; import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudRunArgs; +import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupPscDataArgs; import com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupServerlessDeploymentArgs; import java.lang.String; import java.util.Objects; @@ -175,6 +176,23 @@ public Optional> project() { return Optional.ofNullable(this.project); } + /** + * This field is only used for PSC NEGs. + * Structure is documented below. + * + */ + @Import(name="pscData") + private @Nullable Output pscData; + + /** + * @return This field is only used for PSC NEGs. + * Structure is documented below. + * + */ + public Optional> pscData() { + return Optional.ofNullable(this.pscData); + } + /** * This field is only used for PSC and INTERNET NEGs. * The target service url used to set up private service connection to @@ -275,6 +293,7 @@ private RegionNetworkEndpointGroupState(RegionNetworkEndpointGroupState $) { this.network = $.network; this.networkEndpointType = $.networkEndpointType; this.project = $.project; + this.pscData = $.pscData; this.pscTargetService = $.pscTargetService; this.region = $.region; this.selfLink = $.selfLink; @@ -504,6 +523,29 @@ public Builder project(String project) { return project(Output.of(project)); } + /** + * @param pscData This field is only used for PSC NEGs. + * Structure is documented below. + * + * @return builder + * + */ + public Builder pscData(@Nullable Output pscData) { + $.pscData = pscData; + return this; + } + + /** + * @param pscData This field is only used for PSC NEGs. + * Structure is documented below. + * + * @return builder + * + */ + public Builder pscData(RegionNetworkEndpointGroupPscDataArgs pscData) { + return pscData(Output.of(pscData)); + } + /** * @param pscTargetService 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/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointState.java index 22ef878015..40943c2335 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionNetworkEndpointState.java @@ -82,6 +82,21 @@ public Optional> ipAddress() { return Optional.ofNullable(this.ipAddress); } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Import(name="networkEndpointId") + private @Nullable Output networkEndpointId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Optional> networkEndpointId() { + return Optional.ofNullable(this.networkEndpointId); + } + /** * Port number of network endpoint. * @@ -155,6 +170,7 @@ private RegionNetworkEndpointState(RegionNetworkEndpointState $) { this.fqdn = $.fqdn; this.instance = $.instance; this.ipAddress = $.ipAddress; + this.networkEndpointId = $.networkEndpointId; this.port = $.port; this.project = $.project; this.region = $.region; @@ -269,6 +285,27 @@ public Builder ipAddress(String ipAddress) { return ipAddress(Output.of(ipAddress)); } + /** + * @param networkEndpointId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder networkEndpointId(@Nullable Output networkEndpointId) { + $.networkEndpointId = networkEndpointId; + return this; + } + + /** + * @param networkEndpointId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder networkEndpointId(Integer networkEndpointId) { + return networkEndpointId(Output.of(networkEndpointId)); + } + /** * @param port Port number of network endpoint. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs.java index 5585a90040..c27ea085ec 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs.java @@ -5,8 +5,10 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.compute.inputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs; import java.lang.Boolean; import java.lang.String; +import java.util.List; import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; @@ -46,11 +48,27 @@ public Optional> ruleVisibility() { return Optional.ofNullable(this.ruleVisibility); } + /** + * Configuration options for layer7 adaptive protection for various customizable thresholds. + * + */ + @Import(name="thresholdConfigs") + private @Nullable Output> thresholdConfigs; + + /** + * @return Configuration options for layer7 adaptive protection for various customizable thresholds. + * + */ + public Optional>> thresholdConfigs() { + return Optional.ofNullable(this.thresholdConfigs); + } + private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs() {} private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs $) { this.enable = $.enable; this.ruleVisibility = $.ruleVisibility; + this.thresholdConfigs = $.thresholdConfigs; } public static Builder builder() { @@ -113,6 +131,37 @@ public Builder ruleVisibility(String ruleVisibility) { return ruleVisibility(Output.of(ruleVisibility)); } + /** + * @param thresholdConfigs Configuration options for layer7 adaptive protection for various customizable thresholds. + * + * @return builder + * + */ + public Builder thresholdConfigs(@Nullable Output> thresholdConfigs) { + $.thresholdConfigs = thresholdConfigs; + return this; + } + + /** + * @param thresholdConfigs Configuration options for layer7 adaptive protection for various customizable thresholds. + * + * @return builder + * + */ + public Builder thresholdConfigs(List thresholdConfigs) { + return thresholdConfigs(Output.of(thresholdConfigs)); + } + + /** + * @param thresholdConfigs Configuration options for layer7 adaptive protection for various customizable thresholds. + * + * @return builder + * + */ + public Builder thresholdConfigs(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs... thresholdConfigs) { + return thresholdConfigs(List.of(thresholdConfigs)); + } + public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs build() { return $; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs.java new file mode 100644 index 0000000000..eb62874b0b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs.java @@ -0,0 +1,397 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.inputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs; +import java.lang.Double; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs Empty = new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs(); + + /** + * Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + * + */ + @Import(name="autoDeployConfidenceThreshold") + private @Nullable Output autoDeployConfidenceThreshold; + + /** + * @return Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + * + */ + public Optional> autoDeployConfidenceThreshold() { + return Optional.ofNullable(this.autoDeployConfidenceThreshold); + } + + /** + * Duration over which Adaptive Protection's auto-deployed actions last. + * + */ + @Import(name="autoDeployExpirationSec") + private @Nullable Output autoDeployExpirationSec; + + /** + * @return Duration over which Adaptive Protection's auto-deployed actions last. + * + */ + public Optional> autoDeployExpirationSec() { + return Optional.ofNullable(this.autoDeployExpirationSec); + } + + /** + * Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + * + */ + @Import(name="autoDeployImpactedBaselineThreshold") + private @Nullable Output autoDeployImpactedBaselineThreshold; + + /** + * @return Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + * + */ + public Optional> autoDeployImpactedBaselineThreshold() { + return Optional.ofNullable(this.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. + * + */ + @Import(name="autoDeployLoadThreshold") + private @Nullable Output autoDeployLoadThreshold; + + /** + * @return 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 Optional> autoDeployLoadThreshold() { + return Optional.ofNullable(this.autoDeployLoadThreshold); + } + + /** + * Detection threshold based on absolute QPS. + * + */ + @Import(name="detectionAbsoluteQps") + private @Nullable Output detectionAbsoluteQps; + + /** + * @return Detection threshold based on absolute QPS. + * + */ + public Optional> detectionAbsoluteQps() { + return Optional.ofNullable(this.detectionAbsoluteQps); + } + + /** + * Detection threshold based on the backend service's load. + * + */ + @Import(name="detectionLoadThreshold") + private @Nullable Output detectionLoadThreshold; + + /** + * @return Detection threshold based on the backend service's load. + * + */ + public Optional> detectionLoadThreshold() { + return Optional.ofNullable(this.detectionLoadThreshold); + } + + /** + * Detection threshold based on QPS relative to the average of baseline traffic. + * + */ + @Import(name="detectionRelativeToBaselineQps") + private @Nullable Output detectionRelativeToBaselineQps; + + /** + * @return Detection threshold based on QPS relative to the average of baseline traffic. + * + */ + public Optional> detectionRelativeToBaselineQps() { + return Optional.ofNullable(this.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. + * + */ + @Import(name="name", required=true) + private Output name; + + /** + * @return 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 Output name() { + return this.name; + } + + /** + * Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + * + */ + @Import(name="trafficGranularityConfigs") + private @Nullable Output> trafficGranularityConfigs; + + /** + * @return Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + * + */ + public Optional>> trafficGranularityConfigs() { + return Optional.ofNullable(this.trafficGranularityConfigs); + } + + private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs() {} + + private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs $) { + this.autoDeployConfidenceThreshold = $.autoDeployConfidenceThreshold; + this.autoDeployExpirationSec = $.autoDeployExpirationSec; + this.autoDeployImpactedBaselineThreshold = $.autoDeployImpactedBaselineThreshold; + this.autoDeployLoadThreshold = $.autoDeployLoadThreshold; + this.detectionAbsoluteQps = $.detectionAbsoluteQps; + this.detectionLoadThreshold = $.detectionLoadThreshold; + this.detectionRelativeToBaselineQps = $.detectionRelativeToBaselineQps; + this.name = $.name; + this.trafficGranularityConfigs = $.trafficGranularityConfigs; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs $; + + public Builder() { + $ = new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs(); + } + + public Builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs defaults) { + $ = new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param autoDeployConfidenceThreshold Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + * + * @return builder + * + */ + public Builder autoDeployConfidenceThreshold(@Nullable Output autoDeployConfidenceThreshold) { + $.autoDeployConfidenceThreshold = autoDeployConfidenceThreshold; + return this; + } + + /** + * @param autoDeployConfidenceThreshold Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + * + * @return builder + * + */ + public Builder autoDeployConfidenceThreshold(Double autoDeployConfidenceThreshold) { + return autoDeployConfidenceThreshold(Output.of(autoDeployConfidenceThreshold)); + } + + /** + * @param autoDeployExpirationSec Duration over which Adaptive Protection's auto-deployed actions last. + * + * @return builder + * + */ + public Builder autoDeployExpirationSec(@Nullable Output autoDeployExpirationSec) { + $.autoDeployExpirationSec = autoDeployExpirationSec; + return this; + } + + /** + * @param autoDeployExpirationSec Duration over which Adaptive Protection's auto-deployed actions last. + * + * @return builder + * + */ + public Builder autoDeployExpirationSec(Integer autoDeployExpirationSec) { + return autoDeployExpirationSec(Output.of(autoDeployExpirationSec)); + } + + /** + * @param autoDeployImpactedBaselineThreshold Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + * + * @return builder + * + */ + public Builder autoDeployImpactedBaselineThreshold(@Nullable Output autoDeployImpactedBaselineThreshold) { + $.autoDeployImpactedBaselineThreshold = autoDeployImpactedBaselineThreshold; + return this; + } + + /** + * @param autoDeployImpactedBaselineThreshold Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + * + * @return builder + * + */ + public Builder autoDeployImpactedBaselineThreshold(Double autoDeployImpactedBaselineThreshold) { + return autoDeployImpactedBaselineThreshold(Output.of(autoDeployImpactedBaselineThreshold)); + } + + /** + * @param autoDeployLoadThreshold Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + * + * @return builder + * + */ + public Builder autoDeployLoadThreshold(@Nullable Output autoDeployLoadThreshold) { + $.autoDeployLoadThreshold = autoDeployLoadThreshold; + return this; + } + + /** + * @param autoDeployLoadThreshold Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + * + * @return builder + * + */ + public Builder autoDeployLoadThreshold(Double autoDeployLoadThreshold) { + return autoDeployLoadThreshold(Output.of(autoDeployLoadThreshold)); + } + + /** + * @param detectionAbsoluteQps Detection threshold based on absolute QPS. + * + * @return builder + * + */ + public Builder detectionAbsoluteQps(@Nullable Output detectionAbsoluteQps) { + $.detectionAbsoluteQps = detectionAbsoluteQps; + return this; + } + + /** + * @param detectionAbsoluteQps Detection threshold based on absolute QPS. + * + * @return builder + * + */ + public Builder detectionAbsoluteQps(Double detectionAbsoluteQps) { + return detectionAbsoluteQps(Output.of(detectionAbsoluteQps)); + } + + /** + * @param detectionLoadThreshold Detection threshold based on the backend service's load. + * + * @return builder + * + */ + public Builder detectionLoadThreshold(@Nullable Output detectionLoadThreshold) { + $.detectionLoadThreshold = detectionLoadThreshold; + return this; + } + + /** + * @param detectionLoadThreshold Detection threshold based on the backend service's load. + * + * @return builder + * + */ + public Builder detectionLoadThreshold(Double detectionLoadThreshold) { + return detectionLoadThreshold(Output.of(detectionLoadThreshold)); + } + + /** + * @param detectionRelativeToBaselineQps Detection threshold based on QPS relative to the average of baseline traffic. + * + * @return builder + * + */ + public Builder detectionRelativeToBaselineQps(@Nullable Output detectionRelativeToBaselineQps) { + $.detectionRelativeToBaselineQps = detectionRelativeToBaselineQps; + return this; + } + + /** + * @param detectionRelativeToBaselineQps Detection threshold based on QPS relative to the average of baseline traffic. + * + * @return builder + * + */ + public Builder detectionRelativeToBaselineQps(Double detectionRelativeToBaselineQps) { + return detectionRelativeToBaselineQps(Output.of(detectionRelativeToBaselineQps)); + } + + /** + * @param name 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. + * + * @return builder + * + */ + public Builder name(Output name) { + $.name = name; + return this; + } + + /** + * @param name 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. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param trafficGranularityConfigs Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + * + * @return builder + * + */ + public Builder trafficGranularityConfigs(@Nullable Output> trafficGranularityConfigs) { + $.trafficGranularityConfigs = trafficGranularityConfigs; + return this; + } + + /** + * @param trafficGranularityConfigs Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + * + * @return builder + * + */ + public Builder trafficGranularityConfigs(List trafficGranularityConfigs) { + return trafficGranularityConfigs(Output.of(trafficGranularityConfigs)); + } + + /** + * @param trafficGranularityConfigs Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + * + * @return builder + * + */ + public Builder trafficGranularityConfigs(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs... trafficGranularityConfigs) { + return trafficGranularityConfigs(List.of(trafficGranularityConfigs)); + } + + public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs build() { + if ($.name == null) { + throw new MissingRequiredPropertyException("SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs", "name"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs.java new file mode 100644 index 0000000000..e259e1731a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs.java @@ -0,0 +1,170 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs Empty = new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs(); + + /** + * 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. + * + */ + @Import(name="enableEachUniqueValue") + private @Nullable Output enableEachUniqueValue; + + /** + * @return 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 Optional> enableEachUniqueValue() { + return Optional.ofNullable(this.enableEachUniqueValue); + } + + /** + * The type of this configuration, a granular traffic unit can be one of the following: + * * `HTTP_HEADER_HOST` + * * `HTTP_PATH` + * + */ + @Import(name="type", required=true) + private Output type; + + /** + * @return The type of this configuration, a granular traffic unit can be one of the following: + * * `HTTP_HEADER_HOST` + * * `HTTP_PATH` + * + */ + public Output type() { + return this.type; + } + + /** + * Requests that match this value constitute a granular traffic unit. + * + */ + @Import(name="value") + private @Nullable Output value; + + /** + * @return Requests that match this value constitute a granular traffic unit. + * + */ + public Optional> value() { + return Optional.ofNullable(this.value); + } + + private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs() {} + + private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs $) { + this.enableEachUniqueValue = $.enableEachUniqueValue; + this.type = $.type; + this.value = $.value; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs $; + + public Builder() { + $ = new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs(); + } + + public Builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs defaults) { + $ = new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param enableEachUniqueValue 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. + * + * @return builder + * + */ + public Builder enableEachUniqueValue(@Nullable Output enableEachUniqueValue) { + $.enableEachUniqueValue = enableEachUniqueValue; + return this; + } + + /** + * @param enableEachUniqueValue 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. + * + * @return builder + * + */ + public Builder enableEachUniqueValue(Boolean enableEachUniqueValue) { + return enableEachUniqueValue(Output.of(enableEachUniqueValue)); + } + + /** + * @param type The type of this configuration, a granular traffic unit can be one of the following: + * * `HTTP_HEADER_HOST` + * * `HTTP_PATH` + * + * @return builder + * + */ + public Builder type(Output type) { + $.type = type; + return this; + } + + /** + * @param type The type of this configuration, a granular traffic unit can be one of the following: + * * `HTTP_HEADER_HOST` + * * `HTTP_PATH` + * + * @return builder + * + */ + public Builder type(String type) { + return type(Output.of(type)); + } + + /** + * @param value Requests that match this value constitute a granular traffic unit. + * + * @return builder + * + */ + public Builder value(@Nullable Output value) { + $.value = value; + return this; + } + + /** + * @param value Requests that match this value constitute a granular traffic unit. + * + * @return builder + * + */ + public Builder value(String value) { + return value(Output.of(value)); + } + + public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs build() { + if ($.type == null) { + throw new MissingRequiredPropertyException("SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs", "type"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SubnetworkState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SubnetworkState.java index 0ef11ee87c..790cb697a1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SubnetworkState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SubnetworkState.java @@ -8,6 +8,7 @@ import com.pulumi.gcp.compute.inputs.SubnetworkLogConfigArgs; import com.pulumi.gcp.compute.inputs.SubnetworkSecondaryIpRangeArgs; import java.lang.Boolean; +import java.lang.Integer; import java.lang.String; import java.util.List; import java.util.Objects; @@ -489,6 +490,21 @@ public Optional> stackType() { return Optional.ofNullable(this.stackType); } + /** + * The unique identifier number for the resource. This identifier is defined by the server. + * + */ + @Import(name="subnetworkId") + private @Nullable Output subnetworkId; + + /** + * @return The unique identifier number for the resource. This identifier is defined by the server. + * + */ + public Optional> subnetworkId() { + return Optional.ofNullable(this.subnetworkId); + } + private SubnetworkState() {} private SubnetworkState(SubnetworkState $) { @@ -516,6 +532,7 @@ private SubnetworkState(SubnetworkState $) { this.selfLink = $.selfLink; this.sendSecondaryIpRangeIfEmpty = $.sendSecondaryIpRangeIfEmpty; this.stackType = $.stackType; + this.subnetworkId = $.subnetworkId; } public static Builder builder() { @@ -1164,6 +1181,27 @@ public Builder stackType(String stackType) { return stackType(Output.of(stackType)); } + /** + * @param subnetworkId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder subnetworkId(@Nullable Output subnetworkId) { + $.subnetworkId = subnetworkId; + return this; + } + + /** + * @param subnetworkId The unique identifier number for the resource. This identifier is defined by the server. + * + * @return builder + * + */ + public Builder subnetworkId(Integer subnetworkId) { + return subnetworkId(Output.of(subnetworkId)); + } + public SubnetworkState build() { return $; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/URLMapPathMatcherArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/URLMapPathMatcherArgs.java index e4a44c1a7e..18ae702b9d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/URLMapPathMatcherArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/URLMapPathMatcherArgs.java @@ -24,7 +24,7 @@ public final class URLMapPathMatcherArgs extends com.pulumi.resources.ResourceAr public static final URLMapPathMatcherArgs Empty = new URLMapPathMatcherArgs(); /** - * 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 @@ -39,7 +39,7 @@ public final class URLMapPathMatcherArgs extends com.pulumi.resources.ResourceAr private @Nullable Output defaultCustomErrorResponsePolicy; /** - * @return defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @return 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 @@ -255,7 +255,7 @@ public Builder(URLMapPathMatcherArgs defaults) { } /** - * @param defaultCustomErrorResponsePolicy defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @param defaultCustomErrorResponsePolicy 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 @@ -274,7 +274,7 @@ public Builder defaultCustomErrorResponsePolicy(@Nullable Output customErrorResponsePolicy; /** - * @return customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @return 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 @@ -162,7 +162,7 @@ public Builder(URLMapPathMatcherPathRuleArgs defaults) { } /** - * @param customErrorResponsePolicy customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @param customErrorResponsePolicy 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 @@ -180,7 +180,7 @@ public Builder customErrorResponsePolicy(@Nullable Output> creationTimestamp() { } /** - * 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 @@ -55,7 +55,7 @@ public Optional> creationTimestamp() { private @Nullable Output defaultCustomErrorResponsePolicy; /** - * @return defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @return 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 @@ -377,7 +377,7 @@ public Builder creationTimestamp(String creationTimestamp) { } /** - * @param defaultCustomErrorResponsePolicy defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @param defaultCustomErrorResponsePolicy 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 @@ -396,7 +396,7 @@ public Builder defaultCustomErrorResponsePolicy(@Nullable Output effectiveLabels; + private Integer forwardingRuleId; /** * @return The provider-assigned unique ID for this managed resource. * @@ -60,6 +62,9 @@ public String description() { public Map effectiveLabels() { return this.effectiveLabels; } + public Integer forwardingRuleId() { + return this.forwardingRuleId; + } /** * @return The provider-assigned unique ID for this managed resource. * @@ -141,6 +146,7 @@ public static final class Builder { private String baseForwardingRule; private String description; private Map effectiveLabels; + private Integer forwardingRuleId; private String id; private String ipAddress; private String ipProtocol; @@ -169,6 +175,7 @@ public Builder(GetGlobalForwardingRuleResult defaults) { this.baseForwardingRule = defaults.baseForwardingRule; this.description = defaults.description; this.effectiveLabels = defaults.effectiveLabels; + this.forwardingRuleId = defaults.forwardingRuleId; this.id = defaults.id; this.ipAddress = defaults.ipAddress; this.ipProtocol = defaults.ipProtocol; @@ -225,6 +232,14 @@ public Builder effectiveLabels(Map effectiveLabels) { return this; } @CustomType.Setter + public Builder forwardingRuleId(Integer forwardingRuleId) { + if (forwardingRuleId == null) { + throw new MissingRequiredPropertyException("GetGlobalForwardingRuleResult", "forwardingRuleId"); + } + this.forwardingRuleId = forwardingRuleId; + return this; + } + @CustomType.Setter public Builder id(String id) { if (id == null) { throw new MissingRequiredPropertyException("GetGlobalForwardingRuleResult", "id"); @@ -405,6 +420,7 @@ public GetGlobalForwardingRuleResult build() { _resultValue.baseForwardingRule = baseForwardingRule; _resultValue.description = description; _resultValue.effectiveLabels = effectiveLabels; + _resultValue.forwardingRuleId = forwardingRuleId; _resultValue.id = id; _resultValue.ipAddress = ipAddress; _resultValue.ipProtocol = ipProtocol; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceAdvancedMachineFeature.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceAdvancedMachineFeature.java index 00b6e952db..41ba276f0f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceAdvancedMachineFeature.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceAdvancedMachineFeature.java @@ -17,6 +17,16 @@ public final class GetInstanceAdvancedMachineFeature { * */ private Boolean enableNestedVirtualization; + /** + * @return Whether to enable UEFI networking for the instance. + * + */ + private Boolean enableUefiNetworking; + /** + * @return 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". + * + */ + private String performanceMonitoringUnit; /** * @return 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. * @@ -41,6 +51,20 @@ private GetInstanceAdvancedMachineFeature() {} public Boolean enableNestedVirtualization() { return this.enableNestedVirtualization; } + /** + * @return Whether to enable UEFI networking for the instance. + * + */ + public Boolean enableUefiNetworking() { + return this.enableUefiNetworking; + } + /** + * @return 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 String performanceMonitoringUnit() { + return this.performanceMonitoringUnit; + } /** * @return 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. * @@ -73,6 +97,8 @@ public static Builder builder(GetInstanceAdvancedMachineFeature defaults) { @CustomType.Builder public static final class Builder { private Boolean enableNestedVirtualization; + private Boolean enableUefiNetworking; + private String performanceMonitoringUnit; private Integer threadsPerCore; private String turboMode; private Integer visibleCoreCount; @@ -80,6 +106,8 @@ public Builder() {} public Builder(GetInstanceAdvancedMachineFeature defaults) { Objects.requireNonNull(defaults); this.enableNestedVirtualization = defaults.enableNestedVirtualization; + this.enableUefiNetworking = defaults.enableUefiNetworking; + this.performanceMonitoringUnit = defaults.performanceMonitoringUnit; this.threadsPerCore = defaults.threadsPerCore; this.turboMode = defaults.turboMode; this.visibleCoreCount = defaults.visibleCoreCount; @@ -94,6 +122,22 @@ public Builder enableNestedVirtualization(Boolean enableNestedVirtualization) { return this; } @CustomType.Setter + public Builder enableUefiNetworking(Boolean enableUefiNetworking) { + if (enableUefiNetworking == null) { + throw new MissingRequiredPropertyException("GetInstanceAdvancedMachineFeature", "enableUefiNetworking"); + } + this.enableUefiNetworking = enableUefiNetworking; + return this; + } + @CustomType.Setter + public Builder performanceMonitoringUnit(String performanceMonitoringUnit) { + if (performanceMonitoringUnit == null) { + throw new MissingRequiredPropertyException("GetInstanceAdvancedMachineFeature", "performanceMonitoringUnit"); + } + this.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + @CustomType.Setter public Builder threadsPerCore(Integer threadsPerCore) { if (threadsPerCore == null) { throw new MissingRequiredPropertyException("GetInstanceAdvancedMachineFeature", "threadsPerCore"); @@ -120,6 +164,8 @@ public Builder visibleCoreCount(Integer visibleCoreCount) { public GetInstanceAdvancedMachineFeature build() { final var _resultValue = new GetInstanceAdvancedMachineFeature(); _resultValue.enableNestedVirtualization = enableNestedVirtualization; + _resultValue.enableUefiNetworking = enableUefiNetworking; + _resultValue.performanceMonitoringUnit = performanceMonitoringUnit; _resultValue.threadsPerCore = threadsPerCore; _resultValue.turboMode = turboMode; _resultValue.visibleCoreCount = visibleCoreCount; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerResult.java index 7176ce3d21..41acdb5977 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceGroupManagerResult.java @@ -39,6 +39,7 @@ public final class GetInstanceGroupManagerResult { */ private String id; private String instanceGroup; + private Integer instanceGroupManagerId; private List instanceLifecyclePolicies; private String listManagedInstancesResults; private @Nullable String name; @@ -91,6 +92,9 @@ public String id() { public String instanceGroup() { return this.instanceGroup; } + public Integer instanceGroupManagerId() { + return this.instanceGroupManagerId; + } public List instanceLifecyclePolicies() { return this.instanceLifecyclePolicies; } @@ -175,6 +179,7 @@ public static final class Builder { private String fingerprint; private String id; private String instanceGroup; + private Integer instanceGroupManagerId; private List instanceLifecyclePolicies; private String listManagedInstancesResults; private @Nullable String name; @@ -208,6 +213,7 @@ public Builder(GetInstanceGroupManagerResult defaults) { this.fingerprint = defaults.fingerprint; this.id = defaults.id; this.instanceGroup = defaults.instanceGroup; + this.instanceGroupManagerId = defaults.instanceGroupManagerId; this.instanceLifecyclePolicies = defaults.instanceLifecyclePolicies; this.listManagedInstancesResults = defaults.listManagedInstancesResults; this.name = defaults.name; @@ -303,6 +309,14 @@ public Builder instanceGroup(String instanceGroup) { return this; } @CustomType.Setter + public Builder instanceGroupManagerId(Integer instanceGroupManagerId) { + if (instanceGroupManagerId == null) { + throw new MissingRequiredPropertyException("GetInstanceGroupManagerResult", "instanceGroupManagerId"); + } + this.instanceGroupManagerId = instanceGroupManagerId; + return this; + } + @CustomType.Setter public Builder instanceLifecyclePolicies(List instanceLifecyclePolicies) { if (instanceLifecyclePolicies == null) { throw new MissingRequiredPropertyException("GetInstanceGroupManagerResult", "instanceLifecyclePolicies"); @@ -513,6 +527,7 @@ public GetInstanceGroupManagerResult build() { _resultValue.fingerprint = fingerprint; _resultValue.id = id; _resultValue.instanceGroup = instanceGroup; + _resultValue.instanceGroupManagerId = instanceGroupManagerId; _resultValue.instanceLifecyclePolicies = instanceLifecyclePolicies; _resultValue.listManagedInstancesResults = listManagedInstancesResults; _resultValue.name = name; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceNetworkInterface.java index 0a722d98e6..60d24664e9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceNetworkInterface.java @@ -67,7 +67,7 @@ public final class GetInstanceNetworkInterface { */ private String networkIp; /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * */ private String nicType; @@ -170,7 +170,7 @@ public String networkIp() { return this.networkIp; } /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * */ public String nicType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateAdvancedMachineFeature.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateAdvancedMachineFeature.java index 32056b86dc..54711ac412 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateAdvancedMachineFeature.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateAdvancedMachineFeature.java @@ -17,6 +17,16 @@ public final class GetInstanceTemplateAdvancedMachineFeature { * */ private Boolean enableNestedVirtualization; + /** + * @return Whether to enable UEFI networking or not. + * + */ + private Boolean enableUefiNetworking; + /** + * @return 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". + * + */ + private String performanceMonitoringUnit; /** * @return 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. * @@ -41,6 +51,20 @@ private GetInstanceTemplateAdvancedMachineFeature() {} public Boolean enableNestedVirtualization() { return this.enableNestedVirtualization; } + /** + * @return Whether to enable UEFI networking or not. + * + */ + public Boolean enableUefiNetworking() { + return this.enableUefiNetworking; + } + /** + * @return 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 String performanceMonitoringUnit() { + return this.performanceMonitoringUnit; + } /** * @return 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. * @@ -73,6 +97,8 @@ public static Builder builder(GetInstanceTemplateAdvancedMachineFeature defaults @CustomType.Builder public static final class Builder { private Boolean enableNestedVirtualization; + private Boolean enableUefiNetworking; + private String performanceMonitoringUnit; private Integer threadsPerCore; private String turboMode; private Integer visibleCoreCount; @@ -80,6 +106,8 @@ public Builder() {} public Builder(GetInstanceTemplateAdvancedMachineFeature defaults) { Objects.requireNonNull(defaults); this.enableNestedVirtualization = defaults.enableNestedVirtualization; + this.enableUefiNetworking = defaults.enableUefiNetworking; + this.performanceMonitoringUnit = defaults.performanceMonitoringUnit; this.threadsPerCore = defaults.threadsPerCore; this.turboMode = defaults.turboMode; this.visibleCoreCount = defaults.visibleCoreCount; @@ -94,6 +122,22 @@ public Builder enableNestedVirtualization(Boolean enableNestedVirtualization) { return this; } @CustomType.Setter + public Builder enableUefiNetworking(Boolean enableUefiNetworking) { + if (enableUefiNetworking == null) { + throw new MissingRequiredPropertyException("GetInstanceTemplateAdvancedMachineFeature", "enableUefiNetworking"); + } + this.enableUefiNetworking = enableUefiNetworking; + return this; + } + @CustomType.Setter + public Builder performanceMonitoringUnit(String performanceMonitoringUnit) { + if (performanceMonitoringUnit == null) { + throw new MissingRequiredPropertyException("GetInstanceTemplateAdvancedMachineFeature", "performanceMonitoringUnit"); + } + this.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + @CustomType.Setter public Builder threadsPerCore(Integer threadsPerCore) { if (threadsPerCore == null) { throw new MissingRequiredPropertyException("GetInstanceTemplateAdvancedMachineFeature", "threadsPerCore"); @@ -120,6 +164,8 @@ public Builder visibleCoreCount(Integer visibleCoreCount) { public GetInstanceTemplateAdvancedMachineFeature build() { final var _resultValue = new GetInstanceTemplateAdvancedMachineFeature(); _resultValue.enableNestedVirtualization = enableNestedVirtualization; + _resultValue.enableUefiNetworking = enableUefiNetworking; + _resultValue.performanceMonitoringUnit = performanceMonitoringUnit; _resultValue.threadsPerCore = threadsPerCore; _resultValue.turboMode = turboMode; _resultValue.visibleCoreCount = visibleCoreCount; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateNetworkInterface.java index 8da78826b0..9415f19562 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateNetworkInterface.java @@ -76,7 +76,7 @@ public final class GetInstanceTemplateNetworkInterface { */ private String networkIp; /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA * */ private String nicType; @@ -186,7 +186,7 @@ public String networkIp() { return this.networkIp; } /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA * */ public String nicType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetNetworkResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetNetworkResult.java index 0ed32bfdc8..5450302d33 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetNetworkResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetNetworkResult.java @@ -34,6 +34,16 @@ public final class GetNetworkResult { */ private String internalIpv6Range; private String name; + /** + * @return Beta A full or partial URL of the network profile to apply to this network. + * + */ + private @Nullable String networkProfile; + /** + * @return The numeric unique identifier for the resource. + * + */ + private String numericId; private @Nullable String project; /** * @return The URI of the resource. @@ -78,6 +88,20 @@ public String internalIpv6Range() { public String name() { return this.name; } + /** + * @return Beta A full or partial URL of the network profile to apply to this network. + * + */ + public Optional networkProfile() { + return Optional.ofNullable(this.networkProfile); + } + /** + * @return The numeric unique identifier for the resource. + * + */ + public String numericId() { + return this.numericId; + } public Optional project() { return Optional.ofNullable(this.project); } @@ -110,6 +134,8 @@ public static final class Builder { private String id; private String internalIpv6Range; private String name; + private @Nullable String networkProfile; + private String numericId; private @Nullable String project; private String selfLink; private List subnetworksSelfLinks; @@ -121,6 +147,8 @@ public Builder(GetNetworkResult defaults) { this.id = defaults.id; this.internalIpv6Range = defaults.internalIpv6Range; this.name = defaults.name; + this.networkProfile = defaults.networkProfile; + this.numericId = defaults.numericId; this.project = defaults.project; this.selfLink = defaults.selfLink; this.subnetworksSelfLinks = defaults.subnetworksSelfLinks; @@ -167,6 +195,20 @@ public Builder name(String name) { return this; } @CustomType.Setter + public Builder networkProfile(@Nullable String networkProfile) { + + this.networkProfile = networkProfile; + return this; + } + @CustomType.Setter + public Builder numericId(String numericId) { + if (numericId == null) { + throw new MissingRequiredPropertyException("GetNetworkResult", "numericId"); + } + this.numericId = numericId; + return this; + } + @CustomType.Setter public Builder project(@Nullable String project) { this.project = project; @@ -198,6 +240,8 @@ public GetNetworkResult build() { _resultValue.id = id; _resultValue.internalIpv6Range = internalIpv6Range; _resultValue.name = name; + _resultValue.networkProfile = networkProfile; + _resultValue.numericId = numericId; _resultValue.project = project; _resultValue.selfLink = selfLink; _resultValue.subnetworksSelfLinks = subnetworksSelfLinks; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceGroupManagerResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceGroupManagerResult.java index f542534b96..1f79c972ad 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceGroupManagerResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceGroupManagerResult.java @@ -43,6 +43,7 @@ public final class GetRegionInstanceGroupManagerResult { private String id; private List instanceFlexibilityPolicies; private String instanceGroup; + private Integer instanceGroupManagerId; private List instanceLifecyclePolicies; private String listManagedInstancesResults; private @Nullable String name; @@ -103,6 +104,9 @@ public List instanceFlex public String instanceGroup() { return this.instanceGroup; } + public Integer instanceGroupManagerId() { + return this.instanceGroupManagerId; + } public List instanceLifecyclePolicies() { return this.instanceLifecyclePolicies; } @@ -187,6 +191,7 @@ public static final class Builder { private String id; private List instanceFlexibilityPolicies; private String instanceGroup; + private Integer instanceGroupManagerId; private List instanceLifecyclePolicies; private String listManagedInstancesResults; private @Nullable String name; @@ -222,6 +227,7 @@ public Builder(GetRegionInstanceGroupManagerResult defaults) { this.id = defaults.id; this.instanceFlexibilityPolicies = defaults.instanceFlexibilityPolicies; this.instanceGroup = defaults.instanceGroup; + this.instanceGroupManagerId = defaults.instanceGroupManagerId; this.instanceLifecyclePolicies = defaults.instanceLifecyclePolicies; this.listManagedInstancesResults = defaults.listManagedInstancesResults; this.name = defaults.name; @@ -346,6 +352,14 @@ public Builder instanceGroup(String instanceGroup) { return this; } @CustomType.Setter + public Builder instanceGroupManagerId(Integer instanceGroupManagerId) { + if (instanceGroupManagerId == null) { + throw new MissingRequiredPropertyException("GetRegionInstanceGroupManagerResult", "instanceGroupManagerId"); + } + this.instanceGroupManagerId = instanceGroupManagerId; + return this; + } + @CustomType.Setter public Builder instanceLifecyclePolicies(List instanceLifecyclePolicies) { if (instanceLifecyclePolicies == null) { throw new MissingRequiredPropertyException("GetRegionInstanceGroupManagerResult", "instanceLifecyclePolicies"); @@ -551,6 +565,7 @@ public GetRegionInstanceGroupManagerResult build() { _resultValue.id = id; _resultValue.instanceFlexibilityPolicies = instanceFlexibilityPolicies; _resultValue.instanceGroup = instanceGroup; + _resultValue.instanceGroupManagerId = instanceGroupManagerId; _resultValue.instanceLifecyclePolicies = instanceLifecyclePolicies; _resultValue.listManagedInstancesResults = listManagedInstancesResults; _resultValue.name = name; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateAdvancedMachineFeature.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateAdvancedMachineFeature.java index abdce0557a..f81835e60b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateAdvancedMachineFeature.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateAdvancedMachineFeature.java @@ -17,6 +17,16 @@ public final class GetRegionInstanceTemplateAdvancedMachineFeature { * */ private Boolean enableNestedVirtualization; + /** + * @return Whether to enable UEFI networking or not. + * + */ + private Boolean enableUefiNetworking; + /** + * @return 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". + * + */ + private String performanceMonitoringUnit; /** * @return 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. * @@ -41,6 +51,20 @@ private GetRegionInstanceTemplateAdvancedMachineFeature() {} public Boolean enableNestedVirtualization() { return this.enableNestedVirtualization; } + /** + * @return Whether to enable UEFI networking or not. + * + */ + public Boolean enableUefiNetworking() { + return this.enableUefiNetworking; + } + /** + * @return 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 String performanceMonitoringUnit() { + return this.performanceMonitoringUnit; + } /** * @return 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. * @@ -73,6 +97,8 @@ public static Builder builder(GetRegionInstanceTemplateAdvancedMachineFeature de @CustomType.Builder public static final class Builder { private Boolean enableNestedVirtualization; + private Boolean enableUefiNetworking; + private String performanceMonitoringUnit; private Integer threadsPerCore; private String turboMode; private Integer visibleCoreCount; @@ -80,6 +106,8 @@ public Builder() {} public Builder(GetRegionInstanceTemplateAdvancedMachineFeature defaults) { Objects.requireNonNull(defaults); this.enableNestedVirtualization = defaults.enableNestedVirtualization; + this.enableUefiNetworking = defaults.enableUefiNetworking; + this.performanceMonitoringUnit = defaults.performanceMonitoringUnit; this.threadsPerCore = defaults.threadsPerCore; this.turboMode = defaults.turboMode; this.visibleCoreCount = defaults.visibleCoreCount; @@ -94,6 +122,22 @@ public Builder enableNestedVirtualization(Boolean enableNestedVirtualization) { return this; } @CustomType.Setter + public Builder enableUefiNetworking(Boolean enableUefiNetworking) { + if (enableUefiNetworking == null) { + throw new MissingRequiredPropertyException("GetRegionInstanceTemplateAdvancedMachineFeature", "enableUefiNetworking"); + } + this.enableUefiNetworking = enableUefiNetworking; + return this; + } + @CustomType.Setter + public Builder performanceMonitoringUnit(String performanceMonitoringUnit) { + if (performanceMonitoringUnit == null) { + throw new MissingRequiredPropertyException("GetRegionInstanceTemplateAdvancedMachineFeature", "performanceMonitoringUnit"); + } + this.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + @CustomType.Setter public Builder threadsPerCore(Integer threadsPerCore) { if (threadsPerCore == null) { throw new MissingRequiredPropertyException("GetRegionInstanceTemplateAdvancedMachineFeature", "threadsPerCore"); @@ -120,6 +164,8 @@ public Builder visibleCoreCount(Integer visibleCoreCount) { public GetRegionInstanceTemplateAdvancedMachineFeature build() { final var _resultValue = new GetRegionInstanceTemplateAdvancedMachineFeature(); _resultValue.enableNestedVirtualization = enableNestedVirtualization; + _resultValue.enableUefiNetworking = enableUefiNetworking; + _resultValue.performanceMonitoringUnit = performanceMonitoringUnit; _resultValue.threadsPerCore = threadsPerCore; _resultValue.turboMode = turboMode; _resultValue.visibleCoreCount = visibleCoreCount; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateNetworkInterface.java index 8e8709cdc5..ddb57a21fa 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionInstanceTemplateNetworkInterface.java @@ -62,7 +62,7 @@ public final class GetRegionInstanceTemplateNetworkInterface { */ private String networkIp; /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA * */ private String nicType; @@ -156,7 +156,7 @@ public String networkIp() { return this.networkIp; } /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA * */ public String nicType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionNetworkEndpointGroupPscData.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionNetworkEndpointGroupPscData.java new file mode 100644 index 0000000000..a0ee7259b3 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionNetworkEndpointGroupPscData.java @@ -0,0 +1,64 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetRegionNetworkEndpointGroupPscData { + /** + * @return 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. + * + */ + private String producerPort; + + private GetRegionNetworkEndpointGroupPscData() {} + /** + * @return 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 String producerPort() { + return this.producerPort; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetRegionNetworkEndpointGroupPscData defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String producerPort; + public Builder() {} + public Builder(GetRegionNetworkEndpointGroupPscData defaults) { + Objects.requireNonNull(defaults); + this.producerPort = defaults.producerPort; + } + + @CustomType.Setter + public Builder producerPort(String producerPort) { + if (producerPort == null) { + throw new MissingRequiredPropertyException("GetRegionNetworkEndpointGroupPscData", "producerPort"); + } + this.producerPort = producerPort; + return this; + } + public GetRegionNetworkEndpointGroupPscData build() { + final var _resultValue = new GetRegionNetworkEndpointGroupPscData(); + _resultValue.producerPort = producerPort; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionNetworkEndpointGroupResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionNetworkEndpointGroupResult.java index 2ea009e377..226a741998 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionNetworkEndpointGroupResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRegionNetworkEndpointGroupResult.java @@ -8,6 +8,7 @@ import com.pulumi.gcp.compute.outputs.GetRegionNetworkEndpointGroupAppEngine; import com.pulumi.gcp.compute.outputs.GetRegionNetworkEndpointGroupCloudFunction; import com.pulumi.gcp.compute.outputs.GetRegionNetworkEndpointGroupCloudRun; +import com.pulumi.gcp.compute.outputs.GetRegionNetworkEndpointGroupPscData; import com.pulumi.gcp.compute.outputs.GetRegionNetworkEndpointGroupServerlessDeployment; import java.lang.String; import java.util.List; @@ -42,6 +43,7 @@ public final class GetRegionNetworkEndpointGroupResult { */ private String networkEndpointType; private @Nullable String project; + private List pscDatas; /** * @return The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. * @@ -100,6 +102,9 @@ public String networkEndpointType() { public Optional project() { return Optional.ofNullable(this.project); } + public List pscDatas() { + return this.pscDatas; + } /** * @return The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. * @@ -142,6 +147,7 @@ public static final class Builder { private String network; private String networkEndpointType; private @Nullable String project; + private List pscDatas; private String pscTargetService; private @Nullable String region; private @Nullable String selfLink; @@ -159,6 +165,7 @@ public Builder(GetRegionNetworkEndpointGroupResult defaults) { this.network = defaults.network; this.networkEndpointType = defaults.networkEndpointType; this.project = defaults.project; + this.pscDatas = defaults.pscDatas; this.pscTargetService = defaults.pscTargetService; this.region = defaults.region; this.selfLink = defaults.selfLink; @@ -244,6 +251,17 @@ public Builder project(@Nullable String project) { return this; } @CustomType.Setter + public Builder pscDatas(List pscDatas) { + if (pscDatas == null) { + throw new MissingRequiredPropertyException("GetRegionNetworkEndpointGroupResult", "pscDatas"); + } + this.pscDatas = pscDatas; + return this; + } + public Builder pscDatas(GetRegionNetworkEndpointGroupPscData... pscDatas) { + return pscDatas(List.of(pscDatas)); + } + @CustomType.Setter public Builder pscTargetService(String pscTargetService) { if (pscTargetService == null) { throw new MissingRequiredPropertyException("GetRegionNetworkEndpointGroupResult", "pscTargetService"); @@ -293,6 +311,7 @@ public GetRegionNetworkEndpointGroupResult build() { _resultValue.network = network; _resultValue.networkEndpointType = networkEndpointType; _resultValue.project = project; + _resultValue.pscDatas = pscDatas; _resultValue.pscTargetService = pscTargetService; _resultValue.region = region; _resultValue.selfLink = selfLink; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java index 2f5641edde..d753f1bbd7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java @@ -5,8 +5,10 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig; import java.lang.Boolean; import java.lang.String; +import java.util.List; import java.util.Objects; @CustomType @@ -21,6 +23,11 @@ public final class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseCon * */ private String ruleVisibility; + /** + * @return Configuration options for layer7 adaptive protection for various customizable thresholds. + * + */ + private List thresholdConfigs; private GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig() {} /** @@ -37,6 +44,13 @@ public Boolean enable() { public String ruleVisibility() { return this.ruleVisibility; } + /** + * @return Configuration options for layer7 adaptive protection for various customizable thresholds. + * + */ + public List thresholdConfigs() { + return this.thresholdConfigs; + } public static Builder builder() { return new Builder(); @@ -49,11 +63,13 @@ public static Builder builder(GetSecurityPolicyAdaptiveProtectionConfigLayer7Ddo public static final class Builder { private Boolean enable; private String ruleVisibility; + private List thresholdConfigs; public Builder() {} public Builder(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig defaults) { Objects.requireNonNull(defaults); this.enable = defaults.enable; this.ruleVisibility = defaults.ruleVisibility; + this.thresholdConfigs = defaults.thresholdConfigs; } @CustomType.Setter @@ -72,10 +88,22 @@ public Builder ruleVisibility(String ruleVisibility) { this.ruleVisibility = ruleVisibility; return this; } + @CustomType.Setter + public Builder thresholdConfigs(List thresholdConfigs) { + if (thresholdConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig", "thresholdConfigs"); + } + this.thresholdConfigs = thresholdConfigs; + return this; + } + public Builder thresholdConfigs(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig... thresholdConfigs) { + return thresholdConfigs(List.of(thresholdConfigs)); + } public GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig build() { final var _resultValue = new GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig(); _resultValue.enable = enable; _resultValue.ruleVisibility = ruleVisibility; + _resultValue.thresholdConfigs = thresholdConfigs; return _resultValue; } } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.java new file mode 100644 index 0000000000..5180b7558b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.java @@ -0,0 +1,185 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig; +import java.lang.Double; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + private Double autoDeployConfidenceThreshold; + private Integer autoDeployExpirationSec; + private Double autoDeployImpactedBaselineThreshold; + private Double autoDeployLoadThreshold; + private Double detectionAbsoluteQps; + private Double detectionLoadThreshold; + private Double detectionRelativeToBaselineQps; + /** + * @return The name of the security policy. Provide either this or a `self_link`. + * + */ + private String name; + private List trafficGranularityConfigs; + + private GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig() {} + public Double autoDeployConfidenceThreshold() { + return this.autoDeployConfidenceThreshold; + } + public Integer autoDeployExpirationSec() { + return this.autoDeployExpirationSec; + } + public Double autoDeployImpactedBaselineThreshold() { + return this.autoDeployImpactedBaselineThreshold; + } + public Double autoDeployLoadThreshold() { + return this.autoDeployLoadThreshold; + } + public Double detectionAbsoluteQps() { + return this.detectionAbsoluteQps; + } + public Double detectionLoadThreshold() { + return this.detectionLoadThreshold; + } + public Double detectionRelativeToBaselineQps() { + return this.detectionRelativeToBaselineQps; + } + /** + * @return The name of the security policy. Provide either this or a `self_link`. + * + */ + public String name() { + return this.name; + } + public List trafficGranularityConfigs() { + return this.trafficGranularityConfigs; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Double autoDeployConfidenceThreshold; + private Integer autoDeployExpirationSec; + private Double autoDeployImpactedBaselineThreshold; + private Double autoDeployLoadThreshold; + private Double detectionAbsoluteQps; + private Double detectionLoadThreshold; + private Double detectionRelativeToBaselineQps; + private String name; + private List trafficGranularityConfigs; + public Builder() {} + public Builder(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig defaults) { + Objects.requireNonNull(defaults); + this.autoDeployConfidenceThreshold = defaults.autoDeployConfidenceThreshold; + this.autoDeployExpirationSec = defaults.autoDeployExpirationSec; + this.autoDeployImpactedBaselineThreshold = defaults.autoDeployImpactedBaselineThreshold; + this.autoDeployLoadThreshold = defaults.autoDeployLoadThreshold; + this.detectionAbsoluteQps = defaults.detectionAbsoluteQps; + this.detectionLoadThreshold = defaults.detectionLoadThreshold; + this.detectionRelativeToBaselineQps = defaults.detectionRelativeToBaselineQps; + this.name = defaults.name; + this.trafficGranularityConfigs = defaults.trafficGranularityConfigs; + } + + @CustomType.Setter + public Builder autoDeployConfidenceThreshold(Double autoDeployConfidenceThreshold) { + if (autoDeployConfidenceThreshold == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "autoDeployConfidenceThreshold"); + } + this.autoDeployConfidenceThreshold = autoDeployConfidenceThreshold; + return this; + } + @CustomType.Setter + public Builder autoDeployExpirationSec(Integer autoDeployExpirationSec) { + if (autoDeployExpirationSec == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "autoDeployExpirationSec"); + } + this.autoDeployExpirationSec = autoDeployExpirationSec; + return this; + } + @CustomType.Setter + public Builder autoDeployImpactedBaselineThreshold(Double autoDeployImpactedBaselineThreshold) { + if (autoDeployImpactedBaselineThreshold == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "autoDeployImpactedBaselineThreshold"); + } + this.autoDeployImpactedBaselineThreshold = autoDeployImpactedBaselineThreshold; + return this; + } + @CustomType.Setter + public Builder autoDeployLoadThreshold(Double autoDeployLoadThreshold) { + if (autoDeployLoadThreshold == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "autoDeployLoadThreshold"); + } + this.autoDeployLoadThreshold = autoDeployLoadThreshold; + return this; + } + @CustomType.Setter + public Builder detectionAbsoluteQps(Double detectionAbsoluteQps) { + if (detectionAbsoluteQps == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "detectionAbsoluteQps"); + } + this.detectionAbsoluteQps = detectionAbsoluteQps; + return this; + } + @CustomType.Setter + public Builder detectionLoadThreshold(Double detectionLoadThreshold) { + if (detectionLoadThreshold == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "detectionLoadThreshold"); + } + this.detectionLoadThreshold = detectionLoadThreshold; + return this; + } + @CustomType.Setter + public Builder detectionRelativeToBaselineQps(Double detectionRelativeToBaselineQps) { + if (detectionRelativeToBaselineQps == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "detectionRelativeToBaselineQps"); + } + this.detectionRelativeToBaselineQps = detectionRelativeToBaselineQps; + return this; + } + @CustomType.Setter + public Builder name(String name) { + if (name == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "name"); + } + this.name = name; + return this; + } + @CustomType.Setter + public Builder trafficGranularityConfigs(List trafficGranularityConfigs) { + if (trafficGranularityConfigs == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "trafficGranularityConfigs"); + } + this.trafficGranularityConfigs = trafficGranularityConfigs; + return this; + } + public Builder trafficGranularityConfigs(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig... trafficGranularityConfigs) { + return trafficGranularityConfigs(List.of(trafficGranularityConfigs)); + } + public GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig build() { + final var _resultValue = new GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig(); + _resultValue.autoDeployConfidenceThreshold = autoDeployConfidenceThreshold; + _resultValue.autoDeployExpirationSec = autoDeployExpirationSec; + _resultValue.autoDeployImpactedBaselineThreshold = autoDeployImpactedBaselineThreshold; + _resultValue.autoDeployLoadThreshold = autoDeployLoadThreshold; + _resultValue.detectionAbsoluteQps = detectionAbsoluteQps; + _resultValue.detectionLoadThreshold = detectionLoadThreshold; + _resultValue.detectionRelativeToBaselineQps = detectionRelativeToBaselineQps; + _resultValue.name = name; + _resultValue.trafficGranularityConfigs = trafficGranularityConfigs; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.java new file mode 100644 index 0000000000..ede2c2bda3 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.java @@ -0,0 +1,105 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig { + /** + * @return 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. + * + */ + private Boolean enableEachUniqueValue; + /** + * @return Type of this configuration. + * + */ + private String type; + /** + * @return Requests that match this value constitute a granular traffic unit. + * + */ + private String value; + + private GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig() {} + /** + * @return 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 Boolean enableEachUniqueValue() { + return this.enableEachUniqueValue; + } + /** + * @return Type of this configuration. + * + */ + public String type() { + return this.type; + } + /** + * @return Requests that match this value constitute a granular traffic unit. + * + */ + public String value() { + return this.value; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Boolean enableEachUniqueValue; + private String type; + private String value; + public Builder() {} + public Builder(GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig defaults) { + Objects.requireNonNull(defaults); + this.enableEachUniqueValue = defaults.enableEachUniqueValue; + this.type = defaults.type; + this.value = defaults.value; + } + + @CustomType.Setter + public Builder enableEachUniqueValue(Boolean enableEachUniqueValue) { + if (enableEachUniqueValue == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig", "enableEachUniqueValue"); + } + this.enableEachUniqueValue = enableEachUniqueValue; + return this; + } + @CustomType.Setter + public Builder type(String type) { + if (type == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig", "type"); + } + this.type = type; + return this; + } + @CustomType.Setter + public Builder value(String value) { + if (value == null) { + throw new MissingRequiredPropertyException("GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig", "value"); + } + this.value = value; + return this; + } + public GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig build() { + final var _resultValue = new GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig(); + _resultValue.enableEachUniqueValue = enableEachUniqueValue; + _resultValue.type = type; + _resultValue.value = value; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceAdvancedMachineFeatures.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceAdvancedMachineFeatures.java index 287ac0f5ce..b3ea219f9a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceAdvancedMachineFeatures.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceAdvancedMachineFeatures.java @@ -18,6 +18,16 @@ public final class InstanceAdvancedMachineFeatures { * */ private @Nullable Boolean enableNestedVirtualization; + /** + * @return Whether to enable UEFI networking for instance creation. + * + */ + private @Nullable Boolean enableUefiNetworking; + /** + * @return [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`. + * + */ + private @Nullable String performanceMonitoringUnit; /** * @return 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. * @@ -42,6 +52,20 @@ private InstanceAdvancedMachineFeatures() {} public Optional enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * @return Whether to enable UEFI networking for instance creation. + * + */ + public Optional enableUefiNetworking() { + return Optional.ofNullable(this.enableUefiNetworking); + } + /** + * @return [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 Optional performanceMonitoringUnit() { + return Optional.ofNullable(this.performanceMonitoringUnit); + } /** * @return 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. * @@ -74,6 +98,8 @@ public static Builder builder(InstanceAdvancedMachineFeatures defaults) { @CustomType.Builder public static final class Builder { private @Nullable Boolean enableNestedVirtualization; + private @Nullable Boolean enableUefiNetworking; + private @Nullable String performanceMonitoringUnit; private @Nullable Integer threadsPerCore; private @Nullable String turboMode; private @Nullable Integer visibleCoreCount; @@ -81,6 +107,8 @@ public Builder() {} public Builder(InstanceAdvancedMachineFeatures defaults) { Objects.requireNonNull(defaults); this.enableNestedVirtualization = defaults.enableNestedVirtualization; + this.enableUefiNetworking = defaults.enableUefiNetworking; + this.performanceMonitoringUnit = defaults.performanceMonitoringUnit; this.threadsPerCore = defaults.threadsPerCore; this.turboMode = defaults.turboMode; this.visibleCoreCount = defaults.visibleCoreCount; @@ -93,6 +121,18 @@ public Builder enableNestedVirtualization(@Nullable Boolean enableNestedVirtuali return this; } @CustomType.Setter + public Builder enableUefiNetworking(@Nullable Boolean enableUefiNetworking) { + + this.enableUefiNetworking = enableUefiNetworking; + return this; + } + @CustomType.Setter + public Builder performanceMonitoringUnit(@Nullable String performanceMonitoringUnit) { + + this.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + @CustomType.Setter public Builder threadsPerCore(@Nullable Integer threadsPerCore) { this.threadsPerCore = threadsPerCore; @@ -113,6 +153,8 @@ public Builder visibleCoreCount(@Nullable Integer visibleCoreCount) { public InstanceAdvancedMachineFeatures build() { final var _resultValue = new InstanceAdvancedMachineFeatures(); _resultValue.enableNestedVirtualization = enableNestedVirtualization; + _resultValue.enableUefiNetworking = enableUefiNetworking; + _resultValue.performanceMonitoringUnit = performanceMonitoringUnit; _resultValue.threadsPerCore = threadsPerCore; _resultValue.turboMode = turboMode; _resultValue.visibleCoreCount = visibleCoreCount; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceBootDiskInitializeParams.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceBootDiskInitializeParams.java index 691f7a0705..e5876cef04 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceBootDiskInitializeParams.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceBootDiskInitializeParams.java @@ -78,10 +78,12 @@ public final class InstanceBootDiskInitializeParams { */ private @Nullable Integer size; /** - * @return The URL of the storage pool in which the new disk is created. + * @return 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} * */ private @Nullable String storagePool; @@ -172,10 +174,12 @@ public Optional size() { return Optional.ofNullable(this.size); } /** - * @return The URL of the storage pool in which the new disk is created. + * @return 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 Optional storagePool() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromMachineImageAdvancedMachineFeatures.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromMachineImageAdvancedMachineFeatures.java index 2020d9fdf3..3d68e06bb9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromMachineImageAdvancedMachineFeatures.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromMachineImageAdvancedMachineFeatures.java @@ -18,6 +18,16 @@ public final class InstanceFromMachineImageAdvancedMachineFeatures { * */ private @Nullable Boolean enableNestedVirtualization; + /** + * @return Whether to enable UEFI networking for the instance. + * + */ + private @Nullable Boolean enableUefiNetworking; + /** + * @return 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". + * + */ + private @Nullable String performanceMonitoringUnit; /** * @return 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. * @@ -42,6 +52,20 @@ private InstanceFromMachineImageAdvancedMachineFeatures() {} public Optional enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * @return Whether to enable UEFI networking for the instance. + * + */ + public Optional enableUefiNetworking() { + return Optional.ofNullable(this.enableUefiNetworking); + } + /** + * @return 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 Optional performanceMonitoringUnit() { + return Optional.ofNullable(this.performanceMonitoringUnit); + } /** * @return 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. * @@ -74,6 +98,8 @@ public static Builder builder(InstanceFromMachineImageAdvancedMachineFeatures de @CustomType.Builder public static final class Builder { private @Nullable Boolean enableNestedVirtualization; + private @Nullable Boolean enableUefiNetworking; + private @Nullable String performanceMonitoringUnit; private @Nullable Integer threadsPerCore; private @Nullable String turboMode; private @Nullable Integer visibleCoreCount; @@ -81,6 +107,8 @@ public Builder() {} public Builder(InstanceFromMachineImageAdvancedMachineFeatures defaults) { Objects.requireNonNull(defaults); this.enableNestedVirtualization = defaults.enableNestedVirtualization; + this.enableUefiNetworking = defaults.enableUefiNetworking; + this.performanceMonitoringUnit = defaults.performanceMonitoringUnit; this.threadsPerCore = defaults.threadsPerCore; this.turboMode = defaults.turboMode; this.visibleCoreCount = defaults.visibleCoreCount; @@ -93,6 +121,18 @@ public Builder enableNestedVirtualization(@Nullable Boolean enableNestedVirtuali return this; } @CustomType.Setter + public Builder enableUefiNetworking(@Nullable Boolean enableUefiNetworking) { + + this.enableUefiNetworking = enableUefiNetworking; + return this; + } + @CustomType.Setter + public Builder performanceMonitoringUnit(@Nullable String performanceMonitoringUnit) { + + this.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + @CustomType.Setter public Builder threadsPerCore(@Nullable Integer threadsPerCore) { this.threadsPerCore = threadsPerCore; @@ -113,6 +153,8 @@ public Builder visibleCoreCount(@Nullable Integer visibleCoreCount) { public InstanceFromMachineImageAdvancedMachineFeatures build() { final var _resultValue = new InstanceFromMachineImageAdvancedMachineFeatures(); _resultValue.enableNestedVirtualization = enableNestedVirtualization; + _resultValue.enableUefiNetworking = enableUefiNetworking; + _resultValue.performanceMonitoringUnit = performanceMonitoringUnit; _resultValue.threadsPerCore = threadsPerCore; _resultValue.turboMode = turboMode; _resultValue.visibleCoreCount = visibleCoreCount; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromMachineImageNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromMachineImageNetworkInterface.java index b4e582a6a8..05011cfe85 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromMachineImageNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromMachineImageNetworkInterface.java @@ -68,7 +68,7 @@ public final class InstanceFromMachineImageNetworkInterface { */ private @Nullable String networkIp; /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * */ private @Nullable String nicType; @@ -171,7 +171,7 @@ public Optional networkIp() { return Optional.ofNullable(this.networkIp); } /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * */ public Optional nicType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromTemplateAdvancedMachineFeatures.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromTemplateAdvancedMachineFeatures.java index 99db215899..d9aab42000 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromTemplateAdvancedMachineFeatures.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromTemplateAdvancedMachineFeatures.java @@ -18,6 +18,16 @@ public final class InstanceFromTemplateAdvancedMachineFeatures { * */ private @Nullable Boolean enableNestedVirtualization; + /** + * @return Whether to enable UEFI networking for the instance. + * + */ + private @Nullable Boolean enableUefiNetworking; + /** + * @return 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". + * + */ + private @Nullable String performanceMonitoringUnit; /** * @return 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. * @@ -42,6 +52,20 @@ private InstanceFromTemplateAdvancedMachineFeatures() {} public Optional enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * @return Whether to enable UEFI networking for the instance. + * + */ + public Optional enableUefiNetworking() { + return Optional.ofNullable(this.enableUefiNetworking); + } + /** + * @return 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 Optional performanceMonitoringUnit() { + return Optional.ofNullable(this.performanceMonitoringUnit); + } /** * @return 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. * @@ -74,6 +98,8 @@ public static Builder builder(InstanceFromTemplateAdvancedMachineFeatures defaul @CustomType.Builder public static final class Builder { private @Nullable Boolean enableNestedVirtualization; + private @Nullable Boolean enableUefiNetworking; + private @Nullable String performanceMonitoringUnit; private @Nullable Integer threadsPerCore; private @Nullable String turboMode; private @Nullable Integer visibleCoreCount; @@ -81,6 +107,8 @@ public Builder() {} public Builder(InstanceFromTemplateAdvancedMachineFeatures defaults) { Objects.requireNonNull(defaults); this.enableNestedVirtualization = defaults.enableNestedVirtualization; + this.enableUefiNetworking = defaults.enableUefiNetworking; + this.performanceMonitoringUnit = defaults.performanceMonitoringUnit; this.threadsPerCore = defaults.threadsPerCore; this.turboMode = defaults.turboMode; this.visibleCoreCount = defaults.visibleCoreCount; @@ -93,6 +121,18 @@ public Builder enableNestedVirtualization(@Nullable Boolean enableNestedVirtuali return this; } @CustomType.Setter + public Builder enableUefiNetworking(@Nullable Boolean enableUefiNetworking) { + + this.enableUefiNetworking = enableUefiNetworking; + return this; + } + @CustomType.Setter + public Builder performanceMonitoringUnit(@Nullable String performanceMonitoringUnit) { + + this.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + @CustomType.Setter public Builder threadsPerCore(@Nullable Integer threadsPerCore) { this.threadsPerCore = threadsPerCore; @@ -113,6 +153,8 @@ public Builder visibleCoreCount(@Nullable Integer visibleCoreCount) { public InstanceFromTemplateAdvancedMachineFeatures build() { final var _resultValue = new InstanceFromTemplateAdvancedMachineFeatures(); _resultValue.enableNestedVirtualization = enableNestedVirtualization; + _resultValue.enableUefiNetworking = enableUefiNetworking; + _resultValue.performanceMonitoringUnit = performanceMonitoringUnit; _resultValue.threadsPerCore = threadsPerCore; _resultValue.turboMode = turboMode; _resultValue.visibleCoreCount = visibleCoreCount; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromTemplateNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromTemplateNetworkInterface.java index a24ccbeb56..9b1f680124 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromTemplateNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceFromTemplateNetworkInterface.java @@ -68,7 +68,7 @@ public final class InstanceFromTemplateNetworkInterface { */ private @Nullable String networkIp; /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * */ private @Nullable String nicType; @@ -171,7 +171,7 @@ public Optional networkIp() { return Optional.ofNullable(this.networkIp); } /** - * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + * @return The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA * */ public Optional nicType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceNetworkInterface.java index b8a2066ef4..3d8a6b9d54 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceNetworkInterface.java @@ -76,7 +76,7 @@ public final class InstanceNetworkInterface { */ private @Nullable String networkIp; /** - * @return The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. + * @return 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. * */ private @Nullable String nicType; @@ -196,7 +196,7 @@ public Optional networkIp() { return Optional.ofNullable(this.networkIp); } /** - * @return The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. + * @return 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 Optional nicType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateAdvancedMachineFeatures.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateAdvancedMachineFeatures.java index 2c53e92e1e..1af83d0fbc 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateAdvancedMachineFeatures.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateAdvancedMachineFeatures.java @@ -18,6 +18,16 @@ public final class InstanceTemplateAdvancedMachineFeatures { * */ private @Nullable Boolean enableNestedVirtualization; + /** + * @return Whether to enable UEFI networking for instance creation. + * + */ + private @Nullable Boolean enableUefiNetworking; + /** + * @return [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`. + * + */ + private @Nullable String performanceMonitoringUnit; /** * @return 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. * @@ -42,6 +52,20 @@ private InstanceTemplateAdvancedMachineFeatures() {} public Optional enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * @return Whether to enable UEFI networking for instance creation. + * + */ + public Optional enableUefiNetworking() { + return Optional.ofNullable(this.enableUefiNetworking); + } + /** + * @return [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 Optional performanceMonitoringUnit() { + return Optional.ofNullable(this.performanceMonitoringUnit); + } /** * @return 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. * @@ -74,6 +98,8 @@ public static Builder builder(InstanceTemplateAdvancedMachineFeatures defaults) @CustomType.Builder public static final class Builder { private @Nullable Boolean enableNestedVirtualization; + private @Nullable Boolean enableUefiNetworking; + private @Nullable String performanceMonitoringUnit; private @Nullable Integer threadsPerCore; private @Nullable String turboMode; private @Nullable Integer visibleCoreCount; @@ -81,6 +107,8 @@ public Builder() {} public Builder(InstanceTemplateAdvancedMachineFeatures defaults) { Objects.requireNonNull(defaults); this.enableNestedVirtualization = defaults.enableNestedVirtualization; + this.enableUefiNetworking = defaults.enableUefiNetworking; + this.performanceMonitoringUnit = defaults.performanceMonitoringUnit; this.threadsPerCore = defaults.threadsPerCore; this.turboMode = defaults.turboMode; this.visibleCoreCount = defaults.visibleCoreCount; @@ -93,6 +121,18 @@ public Builder enableNestedVirtualization(@Nullable Boolean enableNestedVirtuali return this; } @CustomType.Setter + public Builder enableUefiNetworking(@Nullable Boolean enableUefiNetworking) { + + this.enableUefiNetworking = enableUefiNetworking; + return this; + } + @CustomType.Setter + public Builder performanceMonitoringUnit(@Nullable String performanceMonitoringUnit) { + + this.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + @CustomType.Setter public Builder threadsPerCore(@Nullable Integer threadsPerCore) { this.threadsPerCore = threadsPerCore; @@ -113,6 +153,8 @@ public Builder visibleCoreCount(@Nullable Integer visibleCoreCount) { public InstanceTemplateAdvancedMachineFeatures build() { final var _resultValue = new InstanceTemplateAdvancedMachineFeatures(); _resultValue.enableNestedVirtualization = enableNestedVirtualization; + _resultValue.enableUefiNetworking = enableUefiNetworking; + _resultValue.performanceMonitoringUnit = performanceMonitoringUnit; _resultValue.threadsPerCore = threadsPerCore; _resultValue.turboMode = turboMode; _resultValue.visibleCoreCount = visibleCoreCount; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateNetworkInterface.java index 0a332d9de0..f103d4d573 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateNetworkInterface.java @@ -80,7 +80,7 @@ public final class InstanceTemplateNetworkInterface { */ private @Nullable String networkIp; /** - * @return The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @return 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. * */ private @Nullable String nicType; @@ -193,7 +193,7 @@ public Optional networkIp() { return Optional.ofNullable(this.networkIp); } /** - * @return The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @return 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 Optional nicType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateAdvancedMachineFeatures.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateAdvancedMachineFeatures.java index 111dec8b2c..2cce46fcd2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateAdvancedMachineFeatures.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateAdvancedMachineFeatures.java @@ -18,6 +18,16 @@ public final class RegionInstanceTemplateAdvancedMachineFeatures { * */ private @Nullable Boolean enableNestedVirtualization; + /** + * @return Whether to enable UEFI networking for instance creation. + * + */ + private @Nullable Boolean enableUefiNetworking; + /** + * @return [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`. + * + */ + private @Nullable String performanceMonitoringUnit; /** * @return 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. * @@ -42,6 +52,20 @@ private RegionInstanceTemplateAdvancedMachineFeatures() {} public Optional enableNestedVirtualization() { return Optional.ofNullable(this.enableNestedVirtualization); } + /** + * @return Whether to enable UEFI networking for instance creation. + * + */ + public Optional enableUefiNetworking() { + return Optional.ofNullable(this.enableUefiNetworking); + } + /** + * @return [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 Optional performanceMonitoringUnit() { + return Optional.ofNullable(this.performanceMonitoringUnit); + } /** * @return 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. * @@ -74,6 +98,8 @@ public static Builder builder(RegionInstanceTemplateAdvancedMachineFeatures defa @CustomType.Builder public static final class Builder { private @Nullable Boolean enableNestedVirtualization; + private @Nullable Boolean enableUefiNetworking; + private @Nullable String performanceMonitoringUnit; private @Nullable Integer threadsPerCore; private @Nullable String turboMode; private @Nullable Integer visibleCoreCount; @@ -81,6 +107,8 @@ public Builder() {} public Builder(RegionInstanceTemplateAdvancedMachineFeatures defaults) { Objects.requireNonNull(defaults); this.enableNestedVirtualization = defaults.enableNestedVirtualization; + this.enableUefiNetworking = defaults.enableUefiNetworking; + this.performanceMonitoringUnit = defaults.performanceMonitoringUnit; this.threadsPerCore = defaults.threadsPerCore; this.turboMode = defaults.turboMode; this.visibleCoreCount = defaults.visibleCoreCount; @@ -93,6 +121,18 @@ public Builder enableNestedVirtualization(@Nullable Boolean enableNestedVirtuali return this; } @CustomType.Setter + public Builder enableUefiNetworking(@Nullable Boolean enableUefiNetworking) { + + this.enableUefiNetworking = enableUefiNetworking; + return this; + } + @CustomType.Setter + public Builder performanceMonitoringUnit(@Nullable String performanceMonitoringUnit) { + + this.performanceMonitoringUnit = performanceMonitoringUnit; + return this; + } + @CustomType.Setter public Builder threadsPerCore(@Nullable Integer threadsPerCore) { this.threadsPerCore = threadsPerCore; @@ -113,6 +153,8 @@ public Builder visibleCoreCount(@Nullable Integer visibleCoreCount) { public RegionInstanceTemplateAdvancedMachineFeatures build() { final var _resultValue = new RegionInstanceTemplateAdvancedMachineFeatures(); _resultValue.enableNestedVirtualization = enableNestedVirtualization; + _resultValue.enableUefiNetworking = enableUefiNetworking; + _resultValue.performanceMonitoringUnit = performanceMonitoringUnit; _resultValue.threadsPerCore = threadsPerCore; _resultValue.turboMode = turboMode; _resultValue.visibleCoreCount = visibleCoreCount; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateNetworkInterface.java index f7b1a9a225..33149008d4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionInstanceTemplateNetworkInterface.java @@ -65,7 +65,7 @@ public final class RegionInstanceTemplateNetworkInterface { */ private @Nullable String networkIp; /** - * @return The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @return 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. * */ private @Nullable String nicType; @@ -161,7 +161,7 @@ public Optional networkIp() { return Optional.ofNullable(this.networkIp); } /** - * @return The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + * @return 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 Optional nicType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionNetworkEndpointGroupPscData.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionNetworkEndpointGroupPscData.java new file mode 100644 index 0000000000..75f7f4fe31 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionNetworkEndpointGroupPscData.java @@ -0,0 +1,63 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RegionNetworkEndpointGroupPscData { + /** + * @return 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. + * + */ + private @Nullable String producerPort; + + private RegionNetworkEndpointGroupPscData() {} + /** + * @return 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 Optional producerPort() { + return Optional.ofNullable(this.producerPort); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RegionNetworkEndpointGroupPscData defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String producerPort; + public Builder() {} + public Builder(RegionNetworkEndpointGroupPscData defaults) { + Objects.requireNonNull(defaults); + this.producerPort = defaults.producerPort; + } + + @CustomType.Setter + public Builder producerPort(@Nullable String producerPort) { + + this.producerPort = producerPort; + return this; + } + public RegionNetworkEndpointGroupPscData build() { + final var _resultValue = new RegionNetworkEndpointGroupPscData(); + _resultValue.producerPort = producerPort; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java index c7ee0e49df..2a07fb6c9f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig.java @@ -4,8 +4,10 @@ package com.pulumi.gcp.compute.outputs; import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.compute.outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig; import java.lang.Boolean; import java.lang.String; +import java.util.List; import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; @@ -22,6 +24,11 @@ public final class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig * */ private @Nullable String ruleVisibility; + /** + * @return Configuration options for layer7 adaptive protection for various customizable thresholds. + * + */ + private @Nullable List thresholdConfigs; private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig() {} /** @@ -38,6 +45,13 @@ public Optional enable() { public Optional ruleVisibility() { return Optional.ofNullable(this.ruleVisibility); } + /** + * @return Configuration options for layer7 adaptive protection for various customizable thresholds. + * + */ + public List thresholdConfigs() { + return this.thresholdConfigs == null ? List.of() : this.thresholdConfigs; + } public static Builder builder() { return new Builder(); @@ -50,11 +64,13 @@ public static Builder builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDe public static final class Builder { private @Nullable Boolean enable; private @Nullable String ruleVisibility; + private @Nullable List thresholdConfigs; public Builder() {} public Builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig defaults) { Objects.requireNonNull(defaults); this.enable = defaults.enable; this.ruleVisibility = defaults.ruleVisibility; + this.thresholdConfigs = defaults.thresholdConfigs; } @CustomType.Setter @@ -69,10 +85,20 @@ public Builder ruleVisibility(@Nullable String ruleVisibility) { this.ruleVisibility = ruleVisibility; return this; } + @CustomType.Setter + public Builder thresholdConfigs(@Nullable List thresholdConfigs) { + + this.thresholdConfigs = thresholdConfigs; + return this; + } + public Builder thresholdConfigs(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig... thresholdConfigs) { + return thresholdConfigs(List.of(thresholdConfigs)); + } public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig build() { final var _resultValue = new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig(); _resultValue.enable = enable; _resultValue.ruleVisibility = ruleVisibility; + _resultValue.thresholdConfigs = thresholdConfigs; return _resultValue; } } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.java new file mode 100644 index 0000000000..8f7e8528e5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.java @@ -0,0 +1,235 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.compute.outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig; +import java.lang.Double; +import java.lang.Integer; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + /** + * @return Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + * + */ + private @Nullable Double autoDeployConfidenceThreshold; + /** + * @return Duration over which Adaptive Protection's auto-deployed actions last. + * + */ + private @Nullable Integer autoDeployExpirationSec; + /** + * @return Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + * + */ + private @Nullable Double autoDeployImpactedBaselineThreshold; + /** + * @return Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + * + */ + private @Nullable Double autoDeployLoadThreshold; + /** + * @return Detection threshold based on absolute QPS. + * + */ + private @Nullable Double detectionAbsoluteQps; + /** + * @return Detection threshold based on the backend service's load. + * + */ + private @Nullable Double detectionLoadThreshold; + /** + * @return Detection threshold based on QPS relative to the average of baseline traffic. + * + */ + private @Nullable Double detectionRelativeToBaselineQps; + /** + * @return 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. + * + */ + private String name; + /** + * @return Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + * + */ + private @Nullable List trafficGranularityConfigs; + + private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig() {} + /** + * @return Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + * + */ + public Optional autoDeployConfidenceThreshold() { + return Optional.ofNullable(this.autoDeployConfidenceThreshold); + } + /** + * @return Duration over which Adaptive Protection's auto-deployed actions last. + * + */ + public Optional autoDeployExpirationSec() { + return Optional.ofNullable(this.autoDeployExpirationSec); + } + /** + * @return Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + * + */ + public Optional autoDeployImpactedBaselineThreshold() { + return Optional.ofNullable(this.autoDeployImpactedBaselineThreshold); + } + /** + * @return 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 Optional autoDeployLoadThreshold() { + return Optional.ofNullable(this.autoDeployLoadThreshold); + } + /** + * @return Detection threshold based on absolute QPS. + * + */ + public Optional detectionAbsoluteQps() { + return Optional.ofNullable(this.detectionAbsoluteQps); + } + /** + * @return Detection threshold based on the backend service's load. + * + */ + public Optional detectionLoadThreshold() { + return Optional.ofNullable(this.detectionLoadThreshold); + } + /** + * @return Detection threshold based on QPS relative to the average of baseline traffic. + * + */ + public Optional detectionRelativeToBaselineQps() { + return Optional.ofNullable(this.detectionRelativeToBaselineQps); + } + /** + * @return 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 String name() { + return this.name; + } + /** + * @return Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + * + */ + public List trafficGranularityConfigs() { + return this.trafficGranularityConfigs == null ? List.of() : this.trafficGranularityConfigs; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Double autoDeployConfidenceThreshold; + private @Nullable Integer autoDeployExpirationSec; + private @Nullable Double autoDeployImpactedBaselineThreshold; + private @Nullable Double autoDeployLoadThreshold; + private @Nullable Double detectionAbsoluteQps; + private @Nullable Double detectionLoadThreshold; + private @Nullable Double detectionRelativeToBaselineQps; + private String name; + private @Nullable List trafficGranularityConfigs; + public Builder() {} + public Builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig defaults) { + Objects.requireNonNull(defaults); + this.autoDeployConfidenceThreshold = defaults.autoDeployConfidenceThreshold; + this.autoDeployExpirationSec = defaults.autoDeployExpirationSec; + this.autoDeployImpactedBaselineThreshold = defaults.autoDeployImpactedBaselineThreshold; + this.autoDeployLoadThreshold = defaults.autoDeployLoadThreshold; + this.detectionAbsoluteQps = defaults.detectionAbsoluteQps; + this.detectionLoadThreshold = defaults.detectionLoadThreshold; + this.detectionRelativeToBaselineQps = defaults.detectionRelativeToBaselineQps; + this.name = defaults.name; + this.trafficGranularityConfigs = defaults.trafficGranularityConfigs; + } + + @CustomType.Setter + public Builder autoDeployConfidenceThreshold(@Nullable Double autoDeployConfidenceThreshold) { + + this.autoDeployConfidenceThreshold = autoDeployConfidenceThreshold; + return this; + } + @CustomType.Setter + public Builder autoDeployExpirationSec(@Nullable Integer autoDeployExpirationSec) { + + this.autoDeployExpirationSec = autoDeployExpirationSec; + return this; + } + @CustomType.Setter + public Builder autoDeployImpactedBaselineThreshold(@Nullable Double autoDeployImpactedBaselineThreshold) { + + this.autoDeployImpactedBaselineThreshold = autoDeployImpactedBaselineThreshold; + return this; + } + @CustomType.Setter + public Builder autoDeployLoadThreshold(@Nullable Double autoDeployLoadThreshold) { + + this.autoDeployLoadThreshold = autoDeployLoadThreshold; + return this; + } + @CustomType.Setter + public Builder detectionAbsoluteQps(@Nullable Double detectionAbsoluteQps) { + + this.detectionAbsoluteQps = detectionAbsoluteQps; + return this; + } + @CustomType.Setter + public Builder detectionLoadThreshold(@Nullable Double detectionLoadThreshold) { + + this.detectionLoadThreshold = detectionLoadThreshold; + return this; + } + @CustomType.Setter + public Builder detectionRelativeToBaselineQps(@Nullable Double detectionRelativeToBaselineQps) { + + this.detectionRelativeToBaselineQps = detectionRelativeToBaselineQps; + return this; + } + @CustomType.Setter + public Builder name(String name) { + if (name == null) { + throw new MissingRequiredPropertyException("SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig", "name"); + } + this.name = name; + return this; + } + @CustomType.Setter + public Builder trafficGranularityConfigs(@Nullable List trafficGranularityConfigs) { + + this.trafficGranularityConfigs = trafficGranularityConfigs; + return this; + } + public Builder trafficGranularityConfigs(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig... trafficGranularityConfigs) { + return trafficGranularityConfigs(List.of(trafficGranularityConfigs)); + } + public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig build() { + final var _resultValue = new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig(); + _resultValue.autoDeployConfidenceThreshold = autoDeployConfidenceThreshold; + _resultValue.autoDeployExpirationSec = autoDeployExpirationSec; + _resultValue.autoDeployImpactedBaselineThreshold = autoDeployImpactedBaselineThreshold; + _resultValue.autoDeployLoadThreshold = autoDeployLoadThreshold; + _resultValue.detectionAbsoluteQps = detectionAbsoluteQps; + _resultValue.detectionLoadThreshold = detectionLoadThreshold; + _resultValue.detectionRelativeToBaselineQps = detectionRelativeToBaselineQps; + _resultValue.name = name; + _resultValue.trafficGranularityConfigs = trafficGranularityConfigs; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.java new file mode 100644 index 0000000000..8b98fb3138 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.java @@ -0,0 +1,107 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig { + /** + * @return 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. + * + */ + private @Nullable Boolean enableEachUniqueValue; + /** + * @return The type of this configuration, a granular traffic unit can be one of the following: + * * `HTTP_HEADER_HOST` + * * `HTTP_PATH` + * + */ + private String type; + /** + * @return Requests that match this value constitute a granular traffic unit. + * + */ + private @Nullable String value; + + private SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig() {} + /** + * @return 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 Optional enableEachUniqueValue() { + return Optional.ofNullable(this.enableEachUniqueValue); + } + /** + * @return The type of this configuration, a granular traffic unit can be one of the following: + * * `HTTP_HEADER_HOST` + * * `HTTP_PATH` + * + */ + public String type() { + return this.type; + } + /** + * @return Requests that match this value constitute a granular traffic unit. + * + */ + public Optional value() { + return Optional.ofNullable(this.value); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean enableEachUniqueValue; + private String type; + private @Nullable String value; + public Builder() {} + public Builder(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig defaults) { + Objects.requireNonNull(defaults); + this.enableEachUniqueValue = defaults.enableEachUniqueValue; + this.type = defaults.type; + this.value = defaults.value; + } + + @CustomType.Setter + public Builder enableEachUniqueValue(@Nullable Boolean enableEachUniqueValue) { + + this.enableEachUniqueValue = enableEachUniqueValue; + return this; + } + @CustomType.Setter + public Builder type(String type) { + if (type == null) { + throw new MissingRequiredPropertyException("SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig", "type"); + } + this.type = type; + return this; + } + @CustomType.Setter + public Builder value(@Nullable String value) { + + this.value = value; + return this; + } + public SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig build() { + final var _resultValue = new SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig(); + _resultValue.enableEachUniqueValue = enableEachUniqueValue; + _resultValue.type = type; + _resultValue.value = value; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/URLMapPathMatcher.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/URLMapPathMatcher.java index 12bd18e9a1..0d59975b37 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/URLMapPathMatcher.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/URLMapPathMatcher.java @@ -20,7 +20,7 @@ @CustomType public final class URLMapPathMatcher { /** - * @return defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @return 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 @@ -99,7 +99,7 @@ public final class URLMapPathMatcher { private URLMapPathMatcher() {} /** - * @return defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @return 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/java/src/main/java/com/pulumi/gcp/compute/outputs/URLMapPathMatcherPathRule.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/URLMapPathMatcherPathRule.java index 5ffb9bb38c..581085dbf5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/URLMapPathMatcherPathRule.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/URLMapPathMatcherPathRule.java @@ -17,7 +17,7 @@ @CustomType public final class URLMapPathMatcherPathRule { /** - * @return customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @return 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 @@ -63,7 +63,7 @@ public final class URLMapPathMatcherPathRule { private URLMapPathMatcherPathRule() {} /** - * @return customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + * @return 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/java/src/main/java/com/pulumi/gcp/container/Cluster.java b/sdk/java/src/main/java/com/pulumi/gcp/container/Cluster.java index 9b8681eaba..76cfb87829 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/Cluster.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/Cluster.java @@ -22,6 +22,7 @@ import com.pulumi.gcp.container.outputs.ClusterDefaultSnatStatus; import com.pulumi.gcp.container.outputs.ClusterDnsConfig; import com.pulumi.gcp.container.outputs.ClusterEnableK8sBetaApis; +import com.pulumi.gcp.container.outputs.ClusterEnterpriseConfig; import com.pulumi.gcp.container.outputs.ClusterFleet; import com.pulumi.gcp.container.outputs.ClusterGatewayApiConfig; import com.pulumi.gcp.container.outputs.ClusterIdentityServiceConfig; @@ -747,6 +748,24 @@ public Output enableTpu() { public Output endpoint() { return this.endpoint; } + /** + * 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 + * + */ + @Export(name="enterpriseConfig", refs={ClusterEnterpriseConfig.class}, tree="[0]") + private Output enterpriseConfig; + + /** + * @return 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 + * + */ + public Output enterpriseConfig() { + return this.enterpriseConfig; + } /** * Fleet configuration for the cluster. Structure is documented below. * @@ -1650,8 +1669,6 @@ public Output verticalPodAutoscaling() { /** * 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 - * */ @Export(name="workloadAltsConfig", refs={ClusterWorkloadAltsConfig.class}, tree="[0]") private Output workloadAltsConfig; @@ -1659,8 +1676,6 @@ public Output verticalPodAutoscaling() { /** * @return 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 - * */ public Output workloadAltsConfig() { return this.workloadAltsConfig; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/ClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/ClusterArgs.java index 719e585136..850b45cc62 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/ClusterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/ClusterArgs.java @@ -17,6 +17,7 @@ import com.pulumi.gcp.container.inputs.ClusterDefaultSnatStatusArgs; import com.pulumi.gcp.container.inputs.ClusterDnsConfigArgs; import com.pulumi.gcp.container.inputs.ClusterEnableK8sBetaApisArgs; +import com.pulumi.gcp.container.inputs.ClusterEnterpriseConfigArgs; import com.pulumi.gcp.container.inputs.ClusterFleetArgs; import com.pulumi.gcp.container.inputs.ClusterGatewayApiConfigArgs; import com.pulumi.gcp.container.inputs.ClusterIdentityServiceConfigArgs; @@ -534,6 +535,25 @@ public Optional> enableTpu() { return Optional.ofNullable(this.enableTpu); } + /** + * 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 + * + */ + @Import(name="enterpriseConfig") + private @Nullable Output enterpriseConfig; + + /** + * @return 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 + * + */ + public Optional> enterpriseConfig() { + return Optional.ofNullable(this.enterpriseConfig); + } + /** * Fleet configuration for the cluster. Structure is documented below. * @@ -1375,8 +1395,6 @@ public Optional> verticalPodAutoscalin /** * 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 - * */ @Import(name="workloadAltsConfig") private @Nullable Output workloadAltsConfig; @@ -1384,8 +1402,6 @@ public Optional> verticalPodAutoscalin /** * @return 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 - * */ public Optional> workloadAltsConfig() { return Optional.ofNullable(this.workloadAltsConfig); @@ -1441,6 +1457,7 @@ private ClusterArgs(ClusterArgs $) { this.enableMultiNetworking = $.enableMultiNetworking; this.enableShieldedNodes = $.enableShieldedNodes; this.enableTpu = $.enableTpu; + this.enterpriseConfig = $.enterpriseConfig; this.fleet = $.fleet; this.gatewayApiConfig = $.gatewayApiConfig; this.identityServiceConfig = $.identityServiceConfig; @@ -2143,6 +2160,31 @@ public Builder enableTpu(Boolean enableTpu) { return enableTpu(Output.of(enableTpu)); } + /** + * @param enterpriseConfig 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 + * + * @return builder + * + */ + public Builder enterpriseConfig(@Nullable Output enterpriseConfig) { + $.enterpriseConfig = enterpriseConfig; + return this; + } + + /** + * @param enterpriseConfig 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 + * + * @return builder + * + */ + public Builder enterpriseConfig(ClusterEnterpriseConfigArgs enterpriseConfig) { + return enterpriseConfig(Output.of(enterpriseConfig)); + } + /** * @param fleet Fleet configuration for the cluster. Structure is documented below. * @@ -3271,8 +3313,6 @@ public Builder verticalPodAutoscaling(ClusterVerticalPodAutoscalingArgs vertical /** * @param workloadAltsConfig 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 - * * @return builder * */ @@ -3284,8 +3324,6 @@ public Builder workloadAltsConfig(@Nullable Output> 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`. * */ @Import(name="diskType") private @Nullable Output diskType; /** - * @return Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard` + * @return 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 Optional> diskType() { @@ -254,7 +254,7 @@ public Builder diskSize(Integer diskSize) { } /** - * @param diskType Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard` + * @param diskType 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`. * * @return builder * @@ -265,7 +265,7 @@ public Builder diskType(@Nullable Output diskType) { } /** - * @param diskType Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard` + * @param diskType 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`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterEnterpriseConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterEnterpriseConfigArgs.java new file mode 100644 index 0000000000..ac69997727 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterEnterpriseConfigArgs.java @@ -0,0 +1,120 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterEnterpriseConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterEnterpriseConfigArgs Empty = new ClusterEnterpriseConfigArgs(); + + /** + * The effective tier of the cluster. + * + */ + @Import(name="clusterTier") + private @Nullable Output clusterTier; + + /** + * @return The effective tier of the cluster. + * + */ + public Optional> clusterTier() { + return Optional.ofNullable(this.clusterTier); + } + + /** + * Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + * + */ + @Import(name="desiredTier") + private @Nullable Output desiredTier; + + /** + * @return Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + * + */ + public Optional> desiredTier() { + return Optional.ofNullable(this.desiredTier); + } + + private ClusterEnterpriseConfigArgs() {} + + private ClusterEnterpriseConfigArgs(ClusterEnterpriseConfigArgs $) { + this.clusterTier = $.clusterTier; + this.desiredTier = $.desiredTier; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterEnterpriseConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterEnterpriseConfigArgs $; + + public Builder() { + $ = new ClusterEnterpriseConfigArgs(); + } + + public Builder(ClusterEnterpriseConfigArgs defaults) { + $ = new ClusterEnterpriseConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param clusterTier The effective tier of the cluster. + * + * @return builder + * + */ + public Builder clusterTier(@Nullable Output clusterTier) { + $.clusterTier = clusterTier; + return this; + } + + /** + * @param clusterTier The effective tier of the cluster. + * + * @return builder + * + */ + public Builder clusterTier(String clusterTier) { + return clusterTier(Output.of(clusterTier)); + } + + /** + * @param desiredTier Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + * + * @return builder + * + */ + public Builder desiredTier(@Nullable Output desiredTier) { + $.desiredTier = desiredTier; + return this; + } + + /** + * @param desiredTier Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + * + * @return builder + * + */ + public Builder desiredTier(String desiredTier) { + return desiredTier(Output.of(desiredTier)); + } + + public ClusterEnterpriseConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java index 3e1b915993..d28c3ff5ba 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java @@ -395,6 +395,27 @@ public Optional> localSsdCount() { return Optional.ofNullable(this.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. + * + */ + @Import(name="localSsdEncryptionMode") + private @Nullable Output localSsdEncryptionMode; + + /** + * @return 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 Optional> localSsdEncryptionMode() { + return Optional.ofNullable(this.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. * @@ -777,6 +798,7 @@ private ClusterNodeConfigArgs(ClusterNodeConfigArgs $) { this.linuxNodeConfig = $.linuxNodeConfig; this.localNvmeSsdBlockConfig = $.localNvmeSsdBlockConfig; this.localSsdCount = $.localSsdCount; + this.localSsdEncryptionMode = $.localSsdEncryptionMode; this.loggingVariant = $.loggingVariant; this.machineType = $.machineType; this.metadata = $.metadata; @@ -1319,6 +1341,33 @@ public Builder localSsdCount(Integer localSsdCount) { return localSsdCount(Output.of(localSsdCount)); } + /** + * @param localSsdEncryptionMode 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. + * + * @return builder + * + */ + public Builder localSsdEncryptionMode(@Nullable Output localSsdEncryptionMode) { + $.localSsdEncryptionMode = localSsdEncryptionMode; + return this; + } + + /** + * @param localSsdEncryptionMode 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. + * + * @return builder + * + */ + public Builder localSsdEncryptionMode(String localSsdEncryptionMode) { + return localSsdEncryptionMode(Output.of(localSsdEncryptionMode)); + } + /** * @param loggingVariant 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/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolAutoConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolAutoConfigArgs.java index c0c2dffdb1..d4e6e29585 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolAutoConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolAutoConfigArgs.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.container.inputs.ClusterNodePoolAutoConfigLinuxNodeConfigArgs; import com.pulumi.gcp.container.inputs.ClusterNodePoolAutoConfigNetworkTagsArgs; import com.pulumi.gcp.container.inputs.ClusterNodePoolAutoConfigNodeKubeletConfigArgs; import java.lang.String; @@ -18,6 +19,21 @@ public final class ClusterNodePoolAutoConfigArgs extends com.pulumi.resources.Re public static final ClusterNodePoolAutoConfigArgs Empty = new ClusterNodePoolAutoConfigArgs(); + /** + * 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. + * + */ + @Import(name="linuxNodeConfig") + private @Nullable Output linuxNodeConfig; + + /** + * @return 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 Optional> linuxNodeConfig() { + return Optional.ofNullable(this.linuxNodeConfig); + } + /** * The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. * @@ -68,6 +84,7 @@ public Optional>> resourceManagerTags() { private ClusterNodePoolAutoConfigArgs() {} private ClusterNodePoolAutoConfigArgs(ClusterNodePoolAutoConfigArgs $) { + this.linuxNodeConfig = $.linuxNodeConfig; this.networkTags = $.networkTags; this.nodeKubeletConfig = $.nodeKubeletConfig; this.resourceManagerTags = $.resourceManagerTags; @@ -91,6 +108,27 @@ public Builder(ClusterNodePoolAutoConfigArgs defaults) { $ = new ClusterNodePoolAutoConfigArgs(Objects.requireNonNull(defaults)); } + /** + * @param linuxNodeConfig 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. + * + * @return builder + * + */ + public Builder linuxNodeConfig(@Nullable Output linuxNodeConfig) { + $.linuxNodeConfig = linuxNodeConfig; + return this; + } + + /** + * @param linuxNodeConfig 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. + * + * @return builder + * + */ + public Builder linuxNodeConfig(ClusterNodePoolAutoConfigLinuxNodeConfigArgs linuxNodeConfig) { + return linuxNodeConfig(Output.of(linuxNodeConfig)); + } + /** * @param networkTags The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolAutoConfigLinuxNodeConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolAutoConfigLinuxNodeConfigArgs.java new file mode 100644 index 0000000000..5327dcb34e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolAutoConfigLinuxNodeConfigArgs.java @@ -0,0 +1,99 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterNodePoolAutoConfigLinuxNodeConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterNodePoolAutoConfigLinuxNodeConfigArgs Empty = new ClusterNodePoolAutoConfigLinuxNodeConfigArgs(); + + /** + * 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. + * + */ + @Import(name="cgroupMode") + private @Nullable Output cgroupMode; + + /** + * @return 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 Optional> cgroupMode() { + return Optional.ofNullable(this.cgroupMode); + } + + private ClusterNodePoolAutoConfigLinuxNodeConfigArgs() {} + + private ClusterNodePoolAutoConfigLinuxNodeConfigArgs(ClusterNodePoolAutoConfigLinuxNodeConfigArgs $) { + this.cgroupMode = $.cgroupMode; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterNodePoolAutoConfigLinuxNodeConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterNodePoolAutoConfigLinuxNodeConfigArgs $; + + public Builder() { + $ = new ClusterNodePoolAutoConfigLinuxNodeConfigArgs(); + } + + public Builder(ClusterNodePoolAutoConfigLinuxNodeConfigArgs defaults) { + $ = new ClusterNodePoolAutoConfigLinuxNodeConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param cgroupMode 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. + * + * @return builder + * + */ + public Builder cgroupMode(@Nullable Output cgroupMode) { + $.cgroupMode = cgroupMode; + return this; + } + + /** + * @param cgroupMode 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. + * + * @return builder + * + */ + public Builder cgroupMode(String cgroupMode) { + return cgroupMode(Output.of(cgroupMode)); + } + + public ClusterNodePoolAutoConfigLinuxNodeConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java index f215424fb5..da6cee9762 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java @@ -395,6 +395,27 @@ public Optional> localSsdCount() { return Optional.ofNullable(this.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. + * + */ + @Import(name="localSsdEncryptionMode") + private @Nullable Output localSsdEncryptionMode; + + /** + * @return 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 Optional> localSsdEncryptionMode() { + return Optional.ofNullable(this.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. * @@ -777,6 +798,7 @@ private ClusterNodePoolNodeConfigArgs(ClusterNodePoolNodeConfigArgs $) { this.linuxNodeConfig = $.linuxNodeConfig; this.localNvmeSsdBlockConfig = $.localNvmeSsdBlockConfig; this.localSsdCount = $.localSsdCount; + this.localSsdEncryptionMode = $.localSsdEncryptionMode; this.loggingVariant = $.loggingVariant; this.machineType = $.machineType; this.metadata = $.metadata; @@ -1319,6 +1341,33 @@ public Builder localSsdCount(Integer localSsdCount) { return localSsdCount(Output.of(localSsdCount)); } + /** + * @param localSsdEncryptionMode 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. + * + * @return builder + * + */ + public Builder localSsdEncryptionMode(@Nullable Output localSsdEncryptionMode) { + $.localSsdEncryptionMode = localSsdEncryptionMode; + return this; + } + + /** + * @param localSsdEncryptionMode 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. + * + * @return builder + * + */ + public Builder localSsdEncryptionMode(String localSsdEncryptionMode) { + return localSsdEncryptionMode(Output.of(localSsdEncryptionMode)); + } + /** * @param loggingVariant 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/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterState.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterState.java index 08f6a3f24f..078350e549 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterState.java @@ -17,6 +17,7 @@ import com.pulumi.gcp.container.inputs.ClusterDefaultSnatStatusArgs; import com.pulumi.gcp.container.inputs.ClusterDnsConfigArgs; import com.pulumi.gcp.container.inputs.ClusterEnableK8sBetaApisArgs; +import com.pulumi.gcp.container.inputs.ClusterEnterpriseConfigArgs; import com.pulumi.gcp.container.inputs.ClusterFleetArgs; import com.pulumi.gcp.container.inputs.ClusterGatewayApiConfigArgs; import com.pulumi.gcp.container.inputs.ClusterIdentityServiceConfigArgs; @@ -564,6 +565,25 @@ public Optional> endpoint() { return Optional.ofNullable(this.endpoint); } + /** + * 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 + * + */ + @Import(name="enterpriseConfig") + private @Nullable Output enterpriseConfig; + + /** + * @return 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 + * + */ + public Optional> enterpriseConfig() { + return Optional.ofNullable(this.enterpriseConfig); + } + /** * Fleet configuration for the cluster. Structure is documented below. * @@ -1516,8 +1536,6 @@ public Optional> verticalPodAutoscalin /** * 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 - * */ @Import(name="workloadAltsConfig") private @Nullable Output workloadAltsConfig; @@ -1525,8 +1543,6 @@ public Optional> verticalPodAutoscalin /** * @return 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 - * */ public Optional> workloadAltsConfig() { return Optional.ofNullable(this.workloadAltsConfig); @@ -1584,6 +1600,7 @@ private ClusterState(ClusterState $) { this.enableShieldedNodes = $.enableShieldedNodes; this.enableTpu = $.enableTpu; this.endpoint = $.endpoint; + this.enterpriseConfig = $.enterpriseConfig; this.fleet = $.fleet; this.gatewayApiConfig = $.gatewayApiConfig; this.identityServiceConfig = $.identityServiceConfig; @@ -2335,6 +2352,31 @@ public Builder endpoint(String endpoint) { return endpoint(Output.of(endpoint)); } + /** + * @param enterpriseConfig 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 + * + * @return builder + * + */ + public Builder enterpriseConfig(@Nullable Output enterpriseConfig) { + $.enterpriseConfig = enterpriseConfig; + return this; + } + + /** + * @param enterpriseConfig 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 + * + * @return builder + * + */ + public Builder enterpriseConfig(ClusterEnterpriseConfigArgs enterpriseConfig) { + return enterpriseConfig(Output.of(enterpriseConfig)); + } + /** * @param fleet Fleet configuration for the cluster. Structure is documented below. * @@ -3612,8 +3654,6 @@ public Builder verticalPodAutoscaling(ClusterVerticalPodAutoscalingArgs vertical /** * @param workloadAltsConfig 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 - * * @return builder * */ @@ -3625,8 +3665,6 @@ public Builder workloadAltsConfig(@Nullable Output> localSsdCount() { return Optional.ofNullable(this.localSsdCount); } + /** + * LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + */ + @Import(name="localSsdEncryptionMode") + private @Nullable Output localSsdEncryptionMode; + + /** + * @return LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + */ + public Optional> localSsdEncryptionMode() { + return Optional.ofNullable(this.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. * @@ -685,6 +700,7 @@ private NodePoolNodeConfigArgs(NodePoolNodeConfigArgs $) { this.linuxNodeConfig = $.linuxNodeConfig; this.localNvmeSsdBlockConfig = $.localNvmeSsdBlockConfig; this.localSsdCount = $.localSsdCount; + this.localSsdEncryptionMode = $.localSsdEncryptionMode; this.loggingVariant = $.loggingVariant; this.machineType = $.machineType; this.metadata = $.metadata; @@ -1186,6 +1202,27 @@ public Builder localSsdCount(Integer localSsdCount) { return localSsdCount(Output.of(localSsdCount)); } + /** + * @param localSsdEncryptionMode LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + * @return builder + * + */ + public Builder localSsdEncryptionMode(@Nullable Output localSsdEncryptionMode) { + $.localSsdEncryptionMode = localSsdEncryptionMode; + return this; + } + + /** + * @param localSsdEncryptionMode LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + * @return builder + * + */ + public Builder localSsdEncryptionMode(String localSsdEncryptionMode) { + return localSsdEncryptionMode(Output.of(localSsdEncryptionMode)); + } + /** * @param loggingVariant 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/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.java index e6debb9e67..4efd773d29 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.java @@ -27,7 +27,7 @@ public final class ClusterClusterAutoscalingAutoProvisioningDefaults { */ private @Nullable Integer diskSize; /** - * @return Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard` + * @return 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`. * */ private @Nullable String diskType; @@ -87,7 +87,7 @@ public Optional diskSize() { return Optional.ofNullable(this.diskSize); } /** - * @return Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard` + * @return 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 Optional diskType() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterEnterpriseConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterEnterpriseConfig.java new file mode 100644 index 0000000000..cebc17c54a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterEnterpriseConfig.java @@ -0,0 +1,78 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterEnterpriseConfig { + /** + * @return The effective tier of the cluster. + * + */ + private @Nullable String clusterTier; + /** + * @return Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + * + */ + private @Nullable String desiredTier; + + private ClusterEnterpriseConfig() {} + /** + * @return The effective tier of the cluster. + * + */ + public Optional clusterTier() { + return Optional.ofNullable(this.clusterTier); + } + /** + * @return Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + * + */ + public Optional desiredTier() { + return Optional.ofNullable(this.desiredTier); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterEnterpriseConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String clusterTier; + private @Nullable String desiredTier; + public Builder() {} + public Builder(ClusterEnterpriseConfig defaults) { + Objects.requireNonNull(defaults); + this.clusterTier = defaults.clusterTier; + this.desiredTier = defaults.desiredTier; + } + + @CustomType.Setter + public Builder clusterTier(@Nullable String clusterTier) { + + this.clusterTier = clusterTier; + return this; + } + @CustomType.Setter + public Builder desiredTier(@Nullable String desiredTier) { + + this.desiredTier = desiredTier; + return this; + } + public ClusterEnterpriseConfig build() { + final var _resultValue = new ClusterEnterpriseConfig(); + _resultValue.clusterTier = clusterTier; + _resultValue.desiredTier = desiredTier; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java index 7f90934c0f..fd34365b3e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java @@ -161,6 +161,14 @@ public final class ClusterNodeConfig { * */ private @Nullable Integer localSsdCount; + /** + * @return 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. + * + */ + private @Nullable String localSsdEncryptionMode; /** * @return 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. * @@ -459,6 +467,16 @@ public Optional localNvmeSsdBlockConfi public Optional localSsdCount() { return Optional.ofNullable(this.localSsdCount); } + /** + * @return 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 Optional localSsdEncryptionMode() { + return Optional.ofNullable(this.localSsdEncryptionMode); + } /** * @return 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. * @@ -659,6 +677,7 @@ public static final class Builder { private @Nullable ClusterNodeConfigLinuxNodeConfig linuxNodeConfig; private @Nullable ClusterNodeConfigLocalNvmeSsdBlockConfig localNvmeSsdBlockConfig; private @Nullable Integer localSsdCount; + private @Nullable String localSsdEncryptionMode; private @Nullable String loggingVariant; private @Nullable String machineType; private @Nullable Map metadata; @@ -703,6 +722,7 @@ public Builder(ClusterNodeConfig defaults) { this.linuxNodeConfig = defaults.linuxNodeConfig; this.localNvmeSsdBlockConfig = defaults.localNvmeSsdBlockConfig; this.localSsdCount = defaults.localSsdCount; + this.localSsdEncryptionMode = defaults.localSsdEncryptionMode; this.loggingVariant = defaults.loggingVariant; this.machineType = defaults.machineType; this.metadata = defaults.metadata; @@ -858,6 +878,12 @@ public Builder localSsdCount(@Nullable Integer localSsdCount) { return this; } @CustomType.Setter + public Builder localSsdEncryptionMode(@Nullable String localSsdEncryptionMode) { + + this.localSsdEncryptionMode = localSsdEncryptionMode; + return this; + } + @CustomType.Setter public Builder loggingVariant(@Nullable String loggingVariant) { this.loggingVariant = loggingVariant; @@ -1015,6 +1041,7 @@ public ClusterNodeConfig build() { _resultValue.linuxNodeConfig = linuxNodeConfig; _resultValue.localNvmeSsdBlockConfig = localNvmeSsdBlockConfig; _resultValue.localSsdCount = localSsdCount; + _resultValue.localSsdEncryptionMode = localSsdEncryptionMode; _resultValue.loggingVariant = loggingVariant; _resultValue.machineType = machineType; _resultValue.metadata = metadata; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolAutoConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolAutoConfig.java index cd80fdedc5..9823f59181 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolAutoConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolAutoConfig.java @@ -4,6 +4,7 @@ package com.pulumi.gcp.container.outputs; import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.container.outputs.ClusterNodePoolAutoConfigLinuxNodeConfig; import com.pulumi.gcp.container.outputs.ClusterNodePoolAutoConfigNetworkTags; import com.pulumi.gcp.container.outputs.ClusterNodePoolAutoConfigNodeKubeletConfig; import java.lang.String; @@ -14,6 +15,11 @@ @CustomType public final class ClusterNodePoolAutoConfig { + /** + * @return 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. + * + */ + private @Nullable ClusterNodePoolAutoConfigLinuxNodeConfig linuxNodeConfig; /** * @return The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. * @@ -32,6 +38,13 @@ public final class ClusterNodePoolAutoConfig { private @Nullable Map resourceManagerTags; private ClusterNodePoolAutoConfig() {} + /** + * @return 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 Optional linuxNodeConfig() { + return Optional.ofNullable(this.linuxNodeConfig); + } /** * @return The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. * @@ -64,17 +77,25 @@ public static Builder builder(ClusterNodePoolAutoConfig defaults) { } @CustomType.Builder public static final class Builder { + private @Nullable ClusterNodePoolAutoConfigLinuxNodeConfig linuxNodeConfig; private @Nullable ClusterNodePoolAutoConfigNetworkTags networkTags; private @Nullable ClusterNodePoolAutoConfigNodeKubeletConfig nodeKubeletConfig; private @Nullable Map resourceManagerTags; public Builder() {} public Builder(ClusterNodePoolAutoConfig defaults) { Objects.requireNonNull(defaults); + this.linuxNodeConfig = defaults.linuxNodeConfig; this.networkTags = defaults.networkTags; this.nodeKubeletConfig = defaults.nodeKubeletConfig; this.resourceManagerTags = defaults.resourceManagerTags; } + @CustomType.Setter + public Builder linuxNodeConfig(@Nullable ClusterNodePoolAutoConfigLinuxNodeConfig linuxNodeConfig) { + + this.linuxNodeConfig = linuxNodeConfig; + return this; + } @CustomType.Setter public Builder networkTags(@Nullable ClusterNodePoolAutoConfigNetworkTags networkTags) { @@ -95,6 +116,7 @@ public Builder resourceManagerTags(@Nullable Map resourceManagerT } public ClusterNodePoolAutoConfig build() { final var _resultValue = new ClusterNodePoolAutoConfig(); + _resultValue.linuxNodeConfig = linuxNodeConfig; _resultValue.networkTags = networkTags; _resultValue.nodeKubeletConfig = nodeKubeletConfig; _resultValue.resourceManagerTags = resourceManagerTags; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolAutoConfigLinuxNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolAutoConfigLinuxNodeConfig.java new file mode 100644 index 0000000000..f361f16201 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolAutoConfigLinuxNodeConfig.java @@ -0,0 +1,65 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterNodePoolAutoConfigLinuxNodeConfig { + /** + * @return 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. + * + */ + private @Nullable String cgroupMode; + + private ClusterNodePoolAutoConfigLinuxNodeConfig() {} + /** + * @return 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 Optional cgroupMode() { + return Optional.ofNullable(this.cgroupMode); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterNodePoolAutoConfigLinuxNodeConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String cgroupMode; + public Builder() {} + public Builder(ClusterNodePoolAutoConfigLinuxNodeConfig defaults) { + Objects.requireNonNull(defaults); + this.cgroupMode = defaults.cgroupMode; + } + + @CustomType.Setter + public Builder cgroupMode(@Nullable String cgroupMode) { + + this.cgroupMode = cgroupMode; + return this; + } + public ClusterNodePoolAutoConfigLinuxNodeConfig build() { + final var _resultValue = new ClusterNodePoolAutoConfigLinuxNodeConfig(); + _resultValue.cgroupMode = cgroupMode; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java index be4ffb5548..aebae32a17 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java @@ -161,6 +161,14 @@ public final class ClusterNodePoolNodeConfig { * */ private @Nullable Integer localSsdCount; + /** + * @return 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. + * + */ + private @Nullable String localSsdEncryptionMode; /** * @return 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. * @@ -459,6 +467,16 @@ public Optional localNvmeSsdBl public Optional localSsdCount() { return Optional.ofNullable(this.localSsdCount); } + /** + * @return 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 Optional localSsdEncryptionMode() { + return Optional.ofNullable(this.localSsdEncryptionMode); + } /** * @return 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. * @@ -659,6 +677,7 @@ public static final class Builder { private @Nullable ClusterNodePoolNodeConfigLinuxNodeConfig linuxNodeConfig; private @Nullable ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfig localNvmeSsdBlockConfig; private @Nullable Integer localSsdCount; + private @Nullable String localSsdEncryptionMode; private @Nullable String loggingVariant; private @Nullable String machineType; private @Nullable Map metadata; @@ -703,6 +722,7 @@ public Builder(ClusterNodePoolNodeConfig defaults) { this.linuxNodeConfig = defaults.linuxNodeConfig; this.localNvmeSsdBlockConfig = defaults.localNvmeSsdBlockConfig; this.localSsdCount = defaults.localSsdCount; + this.localSsdEncryptionMode = defaults.localSsdEncryptionMode; this.loggingVariant = defaults.loggingVariant; this.machineType = defaults.machineType; this.metadata = defaults.metadata; @@ -858,6 +878,12 @@ public Builder localSsdCount(@Nullable Integer localSsdCount) { return this; } @CustomType.Setter + public Builder localSsdEncryptionMode(@Nullable String localSsdEncryptionMode) { + + this.localSsdEncryptionMode = localSsdEncryptionMode; + return this; + } + @CustomType.Setter public Builder loggingVariant(@Nullable String loggingVariant) { this.loggingVariant = loggingVariant; @@ -1015,6 +1041,7 @@ public ClusterNodePoolNodeConfig build() { _resultValue.linuxNodeConfig = linuxNodeConfig; _resultValue.localNvmeSsdBlockConfig = localNvmeSsdBlockConfig; _resultValue.localSsdCount = localSsdCount; + _resultValue.localSsdEncryptionMode = localSsdEncryptionMode; _resultValue.loggingVariant = loggingVariant; _resultValue.machineType = machineType; _resultValue.metadata = metadata; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterEnterpriseConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterEnterpriseConfig.java new file mode 100644 index 0000000000..a04077b5c5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterEnterpriseConfig.java @@ -0,0 +1,81 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetClusterEnterpriseConfig { + /** + * @return Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE. + * + */ + private String clusterTier; + /** + * @return Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE. + * + */ + private String desiredTier; + + private GetClusterEnterpriseConfig() {} + /** + * @return Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE. + * + */ + public String clusterTier() { + return this.clusterTier; + } + /** + * @return Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE. + * + */ + public String desiredTier() { + return this.desiredTier; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetClusterEnterpriseConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String clusterTier; + private String desiredTier; + public Builder() {} + public Builder(GetClusterEnterpriseConfig defaults) { + Objects.requireNonNull(defaults); + this.clusterTier = defaults.clusterTier; + this.desiredTier = defaults.desiredTier; + } + + @CustomType.Setter + public Builder clusterTier(String clusterTier) { + if (clusterTier == null) { + throw new MissingRequiredPropertyException("GetClusterEnterpriseConfig", "clusterTier"); + } + this.clusterTier = clusterTier; + return this; + } + @CustomType.Setter + public Builder desiredTier(String desiredTier) { + if (desiredTier == null) { + throw new MissingRequiredPropertyException("GetClusterEnterpriseConfig", "desiredTier"); + } + this.desiredTier = desiredTier; + return this; + } + public GetClusterEnterpriseConfig build() { + final var _resultValue = new GetClusterEnterpriseConfig(); + _resultValue.clusterTier = clusterTier; + _resultValue.desiredTier = desiredTier; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfig.java index 1492730fbb..1652590512 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodeConfig.java @@ -140,6 +140,11 @@ public final class GetClusterNodeConfig { * */ private Integer localSsdCount; + /** + * @return LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + */ + private String localSsdEncryptionMode; /** * @return Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. * @@ -389,6 +394,13 @@ public List localNvmeSsdBlockConfig public Integer localSsdCount() { return this.localSsdCount; } + /** + * @return LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + */ + public String localSsdEncryptionMode() { + return this.localSsdEncryptionMode; + } /** * @return Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. * @@ -560,6 +572,7 @@ public static final class Builder { private List linuxNodeConfigs; private List localNvmeSsdBlockConfigs; private Integer localSsdCount; + private String localSsdEncryptionMode; private String loggingVariant; private String machineType; private Map metadata; @@ -604,6 +617,7 @@ public Builder(GetClusterNodeConfig defaults) { this.linuxNodeConfigs = defaults.linuxNodeConfigs; this.localNvmeSsdBlockConfigs = defaults.localNvmeSsdBlockConfigs; this.localSsdCount = defaults.localSsdCount; + this.localSsdEncryptionMode = defaults.localSsdEncryptionMode; this.loggingVariant = defaults.loggingVariant; this.machineType = defaults.machineType; this.metadata = defaults.metadata; @@ -837,6 +851,14 @@ public Builder localSsdCount(Integer localSsdCount) { return this; } @CustomType.Setter + public Builder localSsdEncryptionMode(String localSsdEncryptionMode) { + if (localSsdEncryptionMode == null) { + throw new MissingRequiredPropertyException("GetClusterNodeConfig", "localSsdEncryptionMode"); + } + this.localSsdEncryptionMode = localSsdEncryptionMode; + return this; + } + @CustomType.Setter public Builder loggingVariant(String loggingVariant) { if (loggingVariant == null) { throw new MissingRequiredPropertyException("GetClusterNodeConfig", "loggingVariant"); @@ -1049,6 +1071,7 @@ public GetClusterNodeConfig build() { _resultValue.linuxNodeConfigs = linuxNodeConfigs; _resultValue.localNvmeSsdBlockConfigs = localNvmeSsdBlockConfigs; _resultValue.localSsdCount = localSsdCount; + _resultValue.localSsdEncryptionMode = localSsdEncryptionMode; _resultValue.loggingVariant = loggingVariant; _resultValue.machineType = machineType; _resultValue.metadata = metadata; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolAutoConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolAutoConfig.java index c6b25d6fb1..b805d52dd4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolAutoConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolAutoConfig.java @@ -5,6 +5,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.container.outputs.GetClusterNodePoolAutoConfigLinuxNodeConfig; import com.pulumi.gcp.container.outputs.GetClusterNodePoolAutoConfigNetworkTag; import com.pulumi.gcp.container.outputs.GetClusterNodePoolAutoConfigNodeKubeletConfig; import java.lang.String; @@ -14,6 +15,11 @@ @CustomType public final class GetClusterNodePoolAutoConfig { + /** + * @return Linux node configuration options. + * + */ + private List linuxNodeConfigs; /** * @return Collection of Compute Engine network tags that can be applied to a node's underlying VM instance. * @@ -31,6 +37,13 @@ public final class GetClusterNodePoolAutoConfig { private Map resourceManagerTags; private GetClusterNodePoolAutoConfig() {} + /** + * @return Linux node configuration options. + * + */ + public List linuxNodeConfigs() { + return this.linuxNodeConfigs; + } /** * @return Collection of Compute Engine network tags that can be applied to a node's underlying VM instance. * @@ -62,17 +75,30 @@ public static Builder builder(GetClusterNodePoolAutoConfig defaults) { } @CustomType.Builder public static final class Builder { + private List linuxNodeConfigs; private List networkTags; private List nodeKubeletConfigs; private Map resourceManagerTags; public Builder() {} public Builder(GetClusterNodePoolAutoConfig defaults) { Objects.requireNonNull(defaults); + this.linuxNodeConfigs = defaults.linuxNodeConfigs; this.networkTags = defaults.networkTags; this.nodeKubeletConfigs = defaults.nodeKubeletConfigs; this.resourceManagerTags = defaults.resourceManagerTags; } + @CustomType.Setter + public Builder linuxNodeConfigs(List linuxNodeConfigs) { + if (linuxNodeConfigs == null) { + throw new MissingRequiredPropertyException("GetClusterNodePoolAutoConfig", "linuxNodeConfigs"); + } + this.linuxNodeConfigs = linuxNodeConfigs; + return this; + } + public Builder linuxNodeConfigs(GetClusterNodePoolAutoConfigLinuxNodeConfig... linuxNodeConfigs) { + return linuxNodeConfigs(List.of(linuxNodeConfigs)); + } @CustomType.Setter public Builder networkTags(List networkTags) { if (networkTags == null) { @@ -105,6 +131,7 @@ public Builder resourceManagerTags(Map resourceManagerTags) { } public GetClusterNodePoolAutoConfig build() { final var _resultValue = new GetClusterNodePoolAutoConfig(); + _resultValue.linuxNodeConfigs = linuxNodeConfigs; _resultValue.networkTags = networkTags; _resultValue.nodeKubeletConfigs = nodeKubeletConfigs; _resultValue.resourceManagerTags = resourceManagerTags; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolAutoConfigLinuxNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolAutoConfigLinuxNodeConfig.java new file mode 100644 index 0000000000..0860299af5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolAutoConfigLinuxNodeConfig.java @@ -0,0 +1,58 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.container.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetClusterNodePoolAutoConfigLinuxNodeConfig { + /** + * @return cgroupMode specifies the cgroup mode to be used on the node. + * + */ + private String cgroupMode; + + private GetClusterNodePoolAutoConfigLinuxNodeConfig() {} + /** + * @return cgroupMode specifies the cgroup mode to be used on the node. + * + */ + public String cgroupMode() { + return this.cgroupMode; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetClusterNodePoolAutoConfigLinuxNodeConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String cgroupMode; + public Builder() {} + public Builder(GetClusterNodePoolAutoConfigLinuxNodeConfig defaults) { + Objects.requireNonNull(defaults); + this.cgroupMode = defaults.cgroupMode; + } + + @CustomType.Setter + public Builder cgroupMode(String cgroupMode) { + if (cgroupMode == null) { + throw new MissingRequiredPropertyException("GetClusterNodePoolAutoConfigLinuxNodeConfig", "cgroupMode"); + } + this.cgroupMode = cgroupMode; + return this; + } + public GetClusterNodePoolAutoConfigLinuxNodeConfig build() { + final var _resultValue = new GetClusterNodePoolAutoConfigLinuxNodeConfig(); + _resultValue.cgroupMode = cgroupMode; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfig.java index 883ae939cd..27248d54d3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterNodePoolNodeConfig.java @@ -140,6 +140,11 @@ public final class GetClusterNodePoolNodeConfig { * */ private Integer localSsdCount; + /** + * @return LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + */ + private String localSsdEncryptionMode; /** * @return Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. * @@ -389,6 +394,13 @@ public List localNvmeSsdBlo public Integer localSsdCount() { return this.localSsdCount; } + /** + * @return LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + */ + public String localSsdEncryptionMode() { + return this.localSsdEncryptionMode; + } /** * @return Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. * @@ -560,6 +572,7 @@ public static final class Builder { private List linuxNodeConfigs; private List localNvmeSsdBlockConfigs; private Integer localSsdCount; + private String localSsdEncryptionMode; private String loggingVariant; private String machineType; private Map metadata; @@ -604,6 +617,7 @@ public Builder(GetClusterNodePoolNodeConfig defaults) { this.linuxNodeConfigs = defaults.linuxNodeConfigs; this.localNvmeSsdBlockConfigs = defaults.localNvmeSsdBlockConfigs; this.localSsdCount = defaults.localSsdCount; + this.localSsdEncryptionMode = defaults.localSsdEncryptionMode; this.loggingVariant = defaults.loggingVariant; this.machineType = defaults.machineType; this.metadata = defaults.metadata; @@ -837,6 +851,14 @@ public Builder localSsdCount(Integer localSsdCount) { return this; } @CustomType.Setter + public Builder localSsdEncryptionMode(String localSsdEncryptionMode) { + if (localSsdEncryptionMode == null) { + throw new MissingRequiredPropertyException("GetClusterNodePoolNodeConfig", "localSsdEncryptionMode"); + } + this.localSsdEncryptionMode = localSsdEncryptionMode; + return this; + } + @CustomType.Setter public Builder loggingVariant(String loggingVariant) { if (loggingVariant == null) { throw new MissingRequiredPropertyException("GetClusterNodePoolNodeConfig", "loggingVariant"); @@ -1049,6 +1071,7 @@ public GetClusterNodePoolNodeConfig build() { _resultValue.linuxNodeConfigs = linuxNodeConfigs; _resultValue.localNvmeSsdBlockConfigs = localNvmeSsdBlockConfigs; _resultValue.localSsdCount = localSsdCount; + _resultValue.localSsdEncryptionMode = localSsdEncryptionMode; _resultValue.loggingVariant = loggingVariant; _resultValue.machineType = machineType; _resultValue.metadata = metadata; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterResult.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterResult.java index 5a4d8feea7..79449d461d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/GetClusterResult.java @@ -17,6 +17,7 @@ import com.pulumi.gcp.container.outputs.GetClusterDefaultSnatStatus; import com.pulumi.gcp.container.outputs.GetClusterDnsConfig; import com.pulumi.gcp.container.outputs.GetClusterEnableK8sBetaApi; +import com.pulumi.gcp.container.outputs.GetClusterEnterpriseConfig; import com.pulumi.gcp.container.outputs.GetClusterFleet; import com.pulumi.gcp.container.outputs.GetClusterGatewayApiConfig; import com.pulumi.gcp.container.outputs.GetClusterIdentityServiceConfig; @@ -87,6 +88,7 @@ public final class GetClusterResult { private Boolean enableShieldedNodes; private Boolean enableTpu; private String endpoint; + private List enterpriseConfigs; private List fleets; private List gatewayApiConfigs; /** @@ -235,6 +237,9 @@ public Boolean enableTpu() { public String endpoint() { return this.endpoint; } + public List enterpriseConfigs() { + return this.enterpriseConfigs; + } public List fleets() { return this.fleets; } @@ -435,6 +440,7 @@ public static final class Builder { private Boolean enableShieldedNodes; private Boolean enableTpu; private String endpoint; + private List enterpriseConfigs; private List fleets; private List gatewayApiConfigs; private String id; @@ -520,6 +526,7 @@ public Builder(GetClusterResult defaults) { this.enableShieldedNodes = defaults.enableShieldedNodes; this.enableTpu = defaults.enableTpu; this.endpoint = defaults.endpoint; + this.enterpriseConfigs = defaults.enterpriseConfigs; this.fleets = defaults.fleets; this.gatewayApiConfigs = defaults.gatewayApiConfigs; this.id = defaults.id; @@ -851,6 +858,17 @@ public Builder endpoint(String endpoint) { return this; } @CustomType.Setter + public Builder enterpriseConfigs(List enterpriseConfigs) { + if (enterpriseConfigs == null) { + throw new MissingRequiredPropertyException("GetClusterResult", "enterpriseConfigs"); + } + this.enterpriseConfigs = enterpriseConfigs; + return this; + } + public Builder enterpriseConfigs(GetClusterEnterpriseConfig... enterpriseConfigs) { + return enterpriseConfigs(List.of(enterpriseConfigs)); + } + @CustomType.Setter public Builder fleets(List fleets) { if (fleets == null) { throw new MissingRequiredPropertyException("GetClusterResult", "fleets"); @@ -1384,6 +1402,7 @@ public GetClusterResult build() { _resultValue.enableShieldedNodes = enableShieldedNodes; _resultValue.enableTpu = enableTpu; _resultValue.endpoint = endpoint; + _resultValue.enterpriseConfigs = enterpriseConfigs; _resultValue.fleets = fleets; _resultValue.gatewayApiConfigs = gatewayApiConfigs; _resultValue.id = id; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfig.java index 94fe760f20..39df40d72a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/NodePoolNodeConfig.java @@ -141,6 +141,11 @@ public final class NodePoolNodeConfig { * */ private @Nullable Integer localSsdCount; + /** + * @return LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + */ + private @Nullable String localSsdEncryptionMode; /** * @return Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. * @@ -393,6 +398,13 @@ public Optional localNvmeSsdBlockConf public Optional localSsdCount() { return Optional.ofNullable(this.localSsdCount); } + /** + * @return LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + * + */ + public Optional localSsdEncryptionMode() { + return Optional.ofNullable(this.localSsdEncryptionMode); + } /** * @return Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. * @@ -567,6 +579,7 @@ public static final class Builder { private @Nullable NodePoolNodeConfigLinuxNodeConfig linuxNodeConfig; private @Nullable NodePoolNodeConfigLocalNvmeSsdBlockConfig localNvmeSsdBlockConfig; private @Nullable Integer localSsdCount; + private @Nullable String localSsdEncryptionMode; private @Nullable String loggingVariant; private @Nullable String machineType; private @Nullable Map metadata; @@ -611,6 +624,7 @@ public Builder(NodePoolNodeConfig defaults) { this.linuxNodeConfig = defaults.linuxNodeConfig; this.localNvmeSsdBlockConfig = defaults.localNvmeSsdBlockConfig; this.localSsdCount = defaults.localSsdCount; + this.localSsdEncryptionMode = defaults.localSsdEncryptionMode; this.loggingVariant = defaults.loggingVariant; this.machineType = defaults.machineType; this.metadata = defaults.metadata; @@ -766,6 +780,12 @@ public Builder localSsdCount(@Nullable Integer localSsdCount) { return this; } @CustomType.Setter + public Builder localSsdEncryptionMode(@Nullable String localSsdEncryptionMode) { + + this.localSsdEncryptionMode = localSsdEncryptionMode; + return this; + } + @CustomType.Setter public Builder loggingVariant(@Nullable String loggingVariant) { this.loggingVariant = loggingVariant; @@ -923,6 +943,7 @@ public NodePoolNodeConfig build() { _resultValue.linuxNodeConfig = linuxNodeConfig; _resultValue.localNvmeSsdBlockConfig = localNvmeSsdBlockConfig; _resultValue.localSsdCount = localSsdCount; + _resultValue.localSsdEncryptionMode = localSsdEncryptionMode; _resultValue.loggingVariant = loggingVariant; _resultValue.machineType = machineType; _resultValue.metadata = metadata; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/Batch.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/Batch.java index 1e14f7c5d5..032ab4799b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/Batch.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/Batch.java @@ -432,6 +432,71 @@ * } * * <!--End PulumiCodeChooser --> + * ### Dataproc Batch Autotuning + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.dataproc.Batch;
+ * import com.pulumi.gcp.dataproc.BatchArgs;
+ * import com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigArgs;
+ * import com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigAutotuningConfigArgs;
+ * import com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigArgs;
+ * import com.pulumi.gcp.dataproc.inputs.BatchEnvironmentConfigExecutionConfigArgs;
+ * import com.pulumi.gcp.dataproc.inputs.BatchSparkBatchArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var exampleBatchAutotuning = new Batch("exampleBatchAutotuning", BatchArgs.builder()
+ *             .batchId("tf-test-batch_16511")
+ *             .location("us-central1")
+ *             .labels(Map.of("batch_test", "terraform"))
+ *             .runtimeConfig(BatchRuntimeConfigArgs.builder()
+ *                 .version("2.2")
+ *                 .properties(Map.ofEntries(
+ *                     Map.entry("spark.dynamicAllocation.enabled", "false"),
+ *                     Map.entry("spark.executor.instances", "2")
+ *                 ))
+ *                 .cohort("tf-dataproc-batch-example")
+ *                 .autotuningConfig(BatchRuntimeConfigAutotuningConfigArgs.builder()
+ *                     .scenarios(                    
+ *                         "SCALING",
+ *                         "MEMORY")
+ *                     .build())
+ *                 .build())
+ *             .environmentConfig(BatchEnvironmentConfigArgs.builder()
+ *                 .executionConfig(BatchEnvironmentConfigExecutionConfigArgs.builder()
+ *                     .subnetworkUri("default")
+ *                     .ttl("3600s")
+ *                     .build())
+ *                 .build())
+ *             .sparkBatch(BatchSparkBatchArgs.builder()
+ *                 .mainClass("org.apache.spark.examples.SparkPi")
+ *                 .args("10")
+ *                 .jarFileUris("file:///usr/lib/spark/examples/jars/spark-examples.jar")
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/BatchRuntimeConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/BatchRuntimeConfigArgs.java index 3e3e55fe05..9f2e4c4ac0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/BatchRuntimeConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/BatchRuntimeConfigArgs.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.dataproc.inputs.BatchRuntimeConfigAutotuningConfigArgs; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -16,6 +17,38 @@ public final class BatchRuntimeConfigArgs extends com.pulumi.resources.ResourceA public static final BatchRuntimeConfigArgs Empty = new BatchRuntimeConfigArgs(); + /** + * Optional. Autotuning configuration of the workload. + * Structure is documented below. + * + */ + @Import(name="autotuningConfig") + private @Nullable Output autotuningConfig; + + /** + * @return Optional. Autotuning configuration of the workload. + * Structure is documented below. + * + */ + public Optional> autotuningConfig() { + return Optional.ofNullable(this.autotuningConfig); + } + + /** + * Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + * + */ + @Import(name="cohort") + private @Nullable Output cohort; + + /** + * @return Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + * + */ + public Optional> cohort() { + return Optional.ofNullable(this.cohort); + } + /** * Optional custom container image for the job runtime environment. If not specified, a default container image will be used. * @@ -81,6 +114,8 @@ public Optional> version() { private BatchRuntimeConfigArgs() {} private BatchRuntimeConfigArgs(BatchRuntimeConfigArgs $) { + this.autotuningConfig = $.autotuningConfig; + this.cohort = $.cohort; this.containerImage = $.containerImage; this.effectiveProperties = $.effectiveProperties; this.properties = $.properties; @@ -105,6 +140,50 @@ public Builder(BatchRuntimeConfigArgs defaults) { $ = new BatchRuntimeConfigArgs(Objects.requireNonNull(defaults)); } + /** + * @param autotuningConfig Optional. Autotuning configuration of the workload. + * Structure is documented below. + * + * @return builder + * + */ + public Builder autotuningConfig(@Nullable Output autotuningConfig) { + $.autotuningConfig = autotuningConfig; + return this; + } + + /** + * @param autotuningConfig Optional. Autotuning configuration of the workload. + * Structure is documented below. + * + * @return builder + * + */ + public Builder autotuningConfig(BatchRuntimeConfigAutotuningConfigArgs autotuningConfig) { + return autotuningConfig(Output.of(autotuningConfig)); + } + + /** + * @param cohort Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + * + * @return builder + * + */ + public Builder cohort(@Nullable Output cohort) { + $.cohort = cohort; + return this; + } + + /** + * @param cohort Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + * + * @return builder + * + */ + public Builder cohort(String cohort) { + return cohort(Output.of(cohort)); + } + /** * @param containerImage Optional custom container image for the job runtime environment. If not specified, a default container image will be used. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/BatchRuntimeConfigAutotuningConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/BatchRuntimeConfigAutotuningConfigArgs.java new file mode 100644 index 0000000000..5f9c251c53 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/BatchRuntimeConfigAutotuningConfigArgs.java @@ -0,0 +1,99 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.dataproc.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class BatchRuntimeConfigAutotuningConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final BatchRuntimeConfigAutotuningConfigArgs Empty = new BatchRuntimeConfigAutotuningConfigArgs(); + + /** + * Optional. Scenarios for which tunings are applied. + * Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + * + */ + @Import(name="scenarios") + private @Nullable Output> scenarios; + + /** + * @return Optional. Scenarios for which tunings are applied. + * Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + * + */ + public Optional>> scenarios() { + return Optional.ofNullable(this.scenarios); + } + + private BatchRuntimeConfigAutotuningConfigArgs() {} + + private BatchRuntimeConfigAutotuningConfigArgs(BatchRuntimeConfigAutotuningConfigArgs $) { + this.scenarios = $.scenarios; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(BatchRuntimeConfigAutotuningConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private BatchRuntimeConfigAutotuningConfigArgs $; + + public Builder() { + $ = new BatchRuntimeConfigAutotuningConfigArgs(); + } + + public Builder(BatchRuntimeConfigAutotuningConfigArgs defaults) { + $ = new BatchRuntimeConfigAutotuningConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param scenarios Optional. Scenarios for which tunings are applied. + * Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + * + * @return builder + * + */ + public Builder scenarios(@Nullable Output> scenarios) { + $.scenarios = scenarios; + return this; + } + + /** + * @param scenarios Optional. Scenarios for which tunings are applied. + * Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + * + * @return builder + * + */ + public Builder scenarios(List scenarios) { + return scenarios(Output.of(scenarios)); + } + + /** + * @param scenarios Optional. Scenarios for which tunings are applied. + * Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + * + * @return builder + * + */ + public Builder scenarios(String... scenarios) { + return scenarios(List.of(scenarios)); + } + + public BatchRuntimeConfigAutotuningConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigArgs.java index 2034bb7178..20e73d56eb 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigArgs.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs; import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs; import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigGceClusterConfigReservationAffinityArgs; import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigGceClusterConfigShieldedInstanceConfigArgs; @@ -21,6 +22,21 @@ public final class ClusterClusterConfigGceClusterConfigArgs extends com.pulumi.r public static final ClusterClusterConfigGceClusterConfigArgs Empty = new ClusterClusterConfigGceClusterConfigArgs(); + /** + * Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + * + */ + @Import(name="confidentialInstanceConfig") + private @Nullable Output confidentialInstanceConfig; + + /** + * @return Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + * + */ + public Optional> confidentialInstanceConfig() { + return Optional.ofNullable(this.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 @@ -233,6 +249,7 @@ public Optional> zone() { private ClusterClusterConfigGceClusterConfigArgs() {} private ClusterClusterConfigGceClusterConfigArgs(ClusterClusterConfigGceClusterConfigArgs $) { + this.confidentialInstanceConfig = $.confidentialInstanceConfig; this.internalIpOnly = $.internalIpOnly; this.metadata = $.metadata; this.network = $.network; @@ -264,6 +281,27 @@ public Builder(ClusterClusterConfigGceClusterConfigArgs defaults) { $ = new ClusterClusterConfigGceClusterConfigArgs(Objects.requireNonNull(defaults)); } + /** + * @param confidentialInstanceConfig Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + * + * @return builder + * + */ + public Builder confidentialInstanceConfig(@Nullable Output confidentialInstanceConfig) { + $.confidentialInstanceConfig = confidentialInstanceConfig; + return this; + } + + /** + * @param confidentialInstanceConfig Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + * + * @return builder + * + */ + public Builder confidentialInstanceConfig(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs confidentialInstanceConfig) { + return confidentialInstanceConfig(Output.of(confidentialInstanceConfig)); + } + /** * @param internalIpOnly 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/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs.java new file mode 100644 index 0000000000..8815634818 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs.java @@ -0,0 +1,83 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.dataproc.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs Empty = new ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs(); + + /** + * Defines whether the instance should have confidential compute enabled. + * + */ + @Import(name="enableConfidentialCompute") + private @Nullable Output enableConfidentialCompute; + + /** + * @return Defines whether the instance should have confidential compute enabled. + * + */ + public Optional> enableConfidentialCompute() { + return Optional.ofNullable(this.enableConfidentialCompute); + } + + private ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs() {} + + private ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs $) { + this.enableConfidentialCompute = $.enableConfidentialCompute; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs $; + + public Builder() { + $ = new ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs(); + } + + public Builder(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs defaults) { + $ = new ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param enableConfidentialCompute Defines whether the instance should have confidential compute enabled. + * + * @return builder + * + */ + public Builder enableConfidentialCompute(@Nullable Output enableConfidentialCompute) { + $.enableConfidentialCompute = enableConfidentialCompute; + return this; + } + + /** + * @param enableConfidentialCompute Defines whether the instance should have confidential compute enabled. + * + * @return builder + * + */ + public Builder enableConfidentialCompute(Boolean enableConfidentialCompute) { + return enableConfidentialCompute(Output.of(enableConfidentialCompute)); + } + + public ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs.java index f4f35cc327..38f6d4960f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs.java @@ -7,6 +7,7 @@ import com.pulumi.core.annotations.Import; import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArgs; import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArgs; +import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -47,11 +48,27 @@ public Optional provisioningModelMix; + + /** + * @return Defines how Dataproc should create VMs with a mixture of provisioning models. + * + */ + public Optional> provisioningModelMix() { + return Optional.ofNullable(this.provisioningModelMix); + } + private ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs() {} private ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs $) { this.instanceSelectionLists = $.instanceSelectionLists; this.instanceSelectionResults = $.instanceSelectionResults; + this.provisioningModelMix = $.provisioningModelMix; } public static Builder builder() { @@ -134,6 +151,27 @@ public Builder instanceSelectionResults(ClusterClusterConfigPreemptibleWorkerCon return instanceSelectionResults(List.of(instanceSelectionResults)); } + /** + * @param provisioningModelMix Defines how Dataproc should create VMs with a mixture of provisioning models. + * + * @return builder + * + */ + public Builder provisioningModelMix(@Nullable Output provisioningModelMix) { + $.provisioningModelMix = provisioningModelMix; + return this; + } + + /** + * @param provisioningModelMix Defines how Dataproc should create VMs with a mixture of provisioning models. + * + * @return builder + * + */ + public Builder provisioningModelMix(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs provisioningModelMix) { + return provisioningModelMix(Output.of(provisioningModelMix)); + } + public ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs build() { return $; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs.java new file mode 100644 index 0000000000..75c6bdb8f6 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs.java @@ -0,0 +1,120 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.dataproc.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs Empty = new ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs(); + + /** + * The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + * + */ + @Import(name="standardCapacityBase") + private @Nullable Output standardCapacityBase; + + /** + * @return The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + * + */ + public Optional> standardCapacityBase() { + return Optional.ofNullable(this.standardCapacityBase); + } + + /** + * The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + * + */ + @Import(name="standardCapacityPercentAboveBase") + private @Nullable Output standardCapacityPercentAboveBase; + + /** + * @return The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + * + */ + public Optional> standardCapacityPercentAboveBase() { + return Optional.ofNullable(this.standardCapacityPercentAboveBase); + } + + private ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs() {} + + private ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs $) { + this.standardCapacityBase = $.standardCapacityBase; + this.standardCapacityPercentAboveBase = $.standardCapacityPercentAboveBase; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs $; + + public Builder() { + $ = new ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs(); + } + + public Builder(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs defaults) { + $ = new ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param standardCapacityBase The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + * + * @return builder + * + */ + public Builder standardCapacityBase(@Nullable Output standardCapacityBase) { + $.standardCapacityBase = standardCapacityBase; + return this; + } + + /** + * @param standardCapacityBase The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + * + * @return builder + * + */ + public Builder standardCapacityBase(Integer standardCapacityBase) { + return standardCapacityBase(Output.of(standardCapacityBase)); + } + + /** + * @param standardCapacityPercentAboveBase The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + * + * @return builder + * + */ + public Builder standardCapacityPercentAboveBase(@Nullable Output standardCapacityPercentAboveBase) { + $.standardCapacityPercentAboveBase = standardCapacityPercentAboveBase; + return this; + } + + /** + * @param standardCapacityPercentAboveBase The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + * + * @return builder + * + */ + public Builder standardCapacityPercentAboveBase(Integer standardCapacityPercentAboveBase) { + return standardCapacityPercentAboveBase(Output.of(standardCapacityPercentAboveBase)); + } + + public ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/BatchRuntimeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/BatchRuntimeConfig.java index eb79331700..75c78d7b2a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/BatchRuntimeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/BatchRuntimeConfig.java @@ -4,6 +4,7 @@ package com.pulumi.gcp.dataproc.outputs; import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.dataproc.outputs.BatchRuntimeConfigAutotuningConfig; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -12,6 +13,17 @@ @CustomType public final class BatchRuntimeConfig { + /** + * @return Optional. Autotuning configuration of the workload. + * Structure is documented below. + * + */ + private @Nullable BatchRuntimeConfigAutotuningConfig autotuningConfig; + /** + * @return Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + * + */ + private @Nullable String cohort; /** * @return Optional custom container image for the job runtime environment. If not specified, a default container image will be used. * @@ -35,6 +47,21 @@ public final class BatchRuntimeConfig { private @Nullable String version; private BatchRuntimeConfig() {} + /** + * @return Optional. Autotuning configuration of the workload. + * Structure is documented below. + * + */ + public Optional autotuningConfig() { + return Optional.ofNullable(this.autotuningConfig); + } + /** + * @return Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + * + */ + public Optional cohort() { + return Optional.ofNullable(this.cohort); + } /** * @return Optional custom container image for the job runtime environment. If not specified, a default container image will be used. * @@ -74,6 +101,8 @@ public static Builder builder(BatchRuntimeConfig defaults) { } @CustomType.Builder public static final class Builder { + private @Nullable BatchRuntimeConfigAutotuningConfig autotuningConfig; + private @Nullable String cohort; private @Nullable String containerImage; private @Nullable Map effectiveProperties; private @Nullable Map properties; @@ -81,12 +110,26 @@ public static final class Builder { public Builder() {} public Builder(BatchRuntimeConfig defaults) { Objects.requireNonNull(defaults); + this.autotuningConfig = defaults.autotuningConfig; + this.cohort = defaults.cohort; this.containerImage = defaults.containerImage; this.effectiveProperties = defaults.effectiveProperties; this.properties = defaults.properties; this.version = defaults.version; } + @CustomType.Setter + public Builder autotuningConfig(@Nullable BatchRuntimeConfigAutotuningConfig autotuningConfig) { + + this.autotuningConfig = autotuningConfig; + return this; + } + @CustomType.Setter + public Builder cohort(@Nullable String cohort) { + + this.cohort = cohort; + return this; + } @CustomType.Setter public Builder containerImage(@Nullable String containerImage) { @@ -113,6 +156,8 @@ public Builder version(@Nullable String version) { } public BatchRuntimeConfig build() { final var _resultValue = new BatchRuntimeConfig(); + _resultValue.autotuningConfig = autotuningConfig; + _resultValue.cohort = cohort; _resultValue.containerImage = containerImage; _resultValue.effectiveProperties = effectiveProperties; _resultValue.properties = properties; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/BatchRuntimeConfigAutotuningConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/BatchRuntimeConfigAutotuningConfig.java new file mode 100644 index 0000000000..8fefc7fafd --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/BatchRuntimeConfigAutotuningConfig.java @@ -0,0 +1,62 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.dataproc.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; + +@CustomType +public final class BatchRuntimeConfigAutotuningConfig { + /** + * @return Optional. Scenarios for which tunings are applied. + * Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + * + */ + private @Nullable List scenarios; + + private BatchRuntimeConfigAutotuningConfig() {} + /** + * @return Optional. Scenarios for which tunings are applied. + * Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + * + */ + public List scenarios() { + return this.scenarios == null ? List.of() : this.scenarios; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(BatchRuntimeConfigAutotuningConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List scenarios; + public Builder() {} + public Builder(BatchRuntimeConfigAutotuningConfig defaults) { + Objects.requireNonNull(defaults); + this.scenarios = defaults.scenarios; + } + + @CustomType.Setter + public Builder scenarios(@Nullable List scenarios) { + + this.scenarios = scenarios; + return this; + } + public Builder scenarios(String... scenarios) { + return scenarios(List.of(scenarios)); + } + public BatchRuntimeConfigAutotuningConfig build() { + final var _resultValue = new BatchRuntimeConfigAutotuningConfig(); + _resultValue.scenarios = scenarios; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfig.java index 70b57419ef..30ed97d66e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfig.java @@ -4,6 +4,7 @@ package com.pulumi.gcp.dataproc.outputs; import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig; import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigGceClusterConfigNodeGroupAffinity; import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigGceClusterConfigReservationAffinity; import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigGceClusterConfigShieldedInstanceConfig; @@ -17,6 +18,11 @@ @CustomType public final class ClusterClusterConfigGceClusterConfig { + /** + * @return Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + * + */ + private @Nullable ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig confidentialInstanceConfig; /** * @return 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 @@ -96,6 +102,13 @@ public final class ClusterClusterConfigGceClusterConfig { private @Nullable String zone; private ClusterClusterConfigGceClusterConfig() {} + /** + * @return Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + * + */ + public Optional confidentialInstanceConfig() { + return Optional.ofNullable(this.confidentialInstanceConfig); + } /** * @return 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 @@ -205,6 +218,7 @@ public static Builder builder(ClusterClusterConfigGceClusterConfig defaults) { } @CustomType.Builder public static final class Builder { + private @Nullable ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig confidentialInstanceConfig; private @Nullable Boolean internalIpOnly; private @Nullable Map metadata; private @Nullable String network; @@ -219,6 +233,7 @@ public static final class Builder { public Builder() {} public Builder(ClusterClusterConfigGceClusterConfig defaults) { Objects.requireNonNull(defaults); + this.confidentialInstanceConfig = defaults.confidentialInstanceConfig; this.internalIpOnly = defaults.internalIpOnly; this.metadata = defaults.metadata; this.network = defaults.network; @@ -232,6 +247,12 @@ public Builder(ClusterClusterConfigGceClusterConfig defaults) { this.zone = defaults.zone; } + @CustomType.Setter + public Builder confidentialInstanceConfig(@Nullable ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig confidentialInstanceConfig) { + + this.confidentialInstanceConfig = confidentialInstanceConfig; + return this; + } @CustomType.Setter public Builder internalIpOnly(@Nullable Boolean internalIpOnly) { @@ -306,6 +327,7 @@ public Builder zone(@Nullable String zone) { } public ClusterClusterConfigGceClusterConfig build() { final var _resultValue = new ClusterClusterConfigGceClusterConfig(); + _resultValue.confidentialInstanceConfig = confidentialInstanceConfig; _resultValue.internalIpOnly = internalIpOnly; _resultValue.metadata = metadata; _resultValue.network = network; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig.java new file mode 100644 index 0000000000..bdd64539ac --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig.java @@ -0,0 +1,57 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.dataproc.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig { + /** + * @return Defines whether the instance should have confidential compute enabled. + * + */ + private @Nullable Boolean enableConfidentialCompute; + + private ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig() {} + /** + * @return Defines whether the instance should have confidential compute enabled. + * + */ + public Optional enableConfidentialCompute() { + return Optional.ofNullable(this.enableConfidentialCompute); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Boolean enableConfidentialCompute; + public Builder() {} + public Builder(ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig defaults) { + Objects.requireNonNull(defaults); + this.enableConfidentialCompute = defaults.enableConfidentialCompute; + } + + @CustomType.Setter + public Builder enableConfidentialCompute(@Nullable Boolean enableConfidentialCompute) { + + this.enableConfidentialCompute = enableConfidentialCompute; + return this; + } + public ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig build() { + final var _resultValue = new ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig(); + _resultValue.enableConfidentialCompute = enableConfidentialCompute; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy.java index ca3df5d2ca..0d77329448 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy.java @@ -6,8 +6,10 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList; import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResult; +import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix; import java.util.List; import java.util.Objects; +import java.util.Optional; import javax.annotation.Nullable; @CustomType @@ -22,6 +24,11 @@ public final class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilit * */ private @Nullable List instanceSelectionResults; + /** + * @return Defines how Dataproc should create VMs with a mixture of provisioning models. + * + */ + private @Nullable ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix provisioningModelMix; private ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy() {} /** @@ -38,6 +45,13 @@ public List instanceSelectionResults() { return this.instanceSelectionResults == null ? List.of() : this.instanceSelectionResults; } + /** + * @return Defines how Dataproc should create VMs with a mixture of provisioning models. + * + */ + public Optional provisioningModelMix() { + return Optional.ofNullable(this.provisioningModelMix); + } public static Builder builder() { return new Builder(); @@ -50,11 +64,13 @@ public static Builder builder(ClusterClusterConfigPreemptibleWorkerConfigInstanc public static final class Builder { private @Nullable List instanceSelectionLists; private @Nullable List instanceSelectionResults; + private @Nullable ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix provisioningModelMix; public Builder() {} public Builder(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy defaults) { Objects.requireNonNull(defaults); this.instanceSelectionLists = defaults.instanceSelectionLists; this.instanceSelectionResults = defaults.instanceSelectionResults; + this.provisioningModelMix = defaults.provisioningModelMix; } @CustomType.Setter @@ -75,10 +91,17 @@ public Builder instanceSelectionResults(@Nullable List standardCapacityBase() { + return Optional.ofNullable(this.standardCapacityBase); + } + /** + * @return The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + * + */ + public Optional standardCapacityPercentAboveBase() { + return Optional.ofNullable(this.standardCapacityPercentAboveBase); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer standardCapacityBase; + private @Nullable Integer standardCapacityPercentAboveBase; + public Builder() {} + public Builder(ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix defaults) { + Objects.requireNonNull(defaults); + this.standardCapacityBase = defaults.standardCapacityBase; + this.standardCapacityPercentAboveBase = defaults.standardCapacityPercentAboveBase; + } + + @CustomType.Setter + public Builder standardCapacityBase(@Nullable Integer standardCapacityBase) { + + this.standardCapacityBase = standardCapacityBase; + return this; + } + @CustomType.Setter + public Builder standardCapacityPercentAboveBase(@Nullable Integer standardCapacityPercentAboveBase) { + + this.standardCapacityPercentAboveBase = standardCapacityPercentAboveBase; + return this; + } + public ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix build() { + final var _resultValue = new ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix(); + _resultValue.standardCapacityBase = standardCapacityBase; + _resultValue.standardCapacityPercentAboveBase = standardCapacityPercentAboveBase; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/inputs/CxFlowAdvancedSettingsSpeechSettingsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/inputs/CxFlowAdvancedSettingsSpeechSettingsArgs.java index 3581d1dfa7..d6896f6a45 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/inputs/CxFlowAdvancedSettingsSpeechSettingsArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/inputs/CxFlowAdvancedSettingsSpeechSettingsArgs.java @@ -68,14 +68,14 @@ public Optional> 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. * */ @Import(name="useTimeoutBasedEndpointing") private @Nullable Output useTimeoutBasedEndpointing; /** - * @return Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + * @return Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. * */ public Optional> useTimeoutBasedEndpointing() { @@ -177,7 +177,7 @@ public Builder noSpeechTimeout(String noSpeechTimeout) { } /** - * @param useTimeoutBasedEndpointing Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + * @param useTimeoutBasedEndpointing Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. * * @return builder * @@ -188,7 +188,7 @@ public Builder useTimeoutBasedEndpointing(@Nullable Output useTimeoutBa } /** - * @param useTimeoutBasedEndpointing Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + * @param useTimeoutBasedEndpointing Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/outputs/CxFlowAdvancedSettingsSpeechSettings.java b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/outputs/CxFlowAdvancedSettingsSpeechSettings.java index fb2c22b7ef..9a772c0bc5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/outputs/CxFlowAdvancedSettingsSpeechSettings.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/outputs/CxFlowAdvancedSettingsSpeechSettings.java @@ -32,7 +32,7 @@ public final class CxFlowAdvancedSettingsSpeechSettings { */ private @Nullable String noSpeechTimeout; /** - * @return Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + * @return Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. * */ private @Nullable Boolean useTimeoutBasedEndpointing; @@ -62,7 +62,7 @@ public Optional noSpeechTimeout() { return Optional.ofNullable(this.noSpeechTimeout); } /** - * @return Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + * @return Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. * */ public Optional useTimeoutBasedEndpointing() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/SearchEngine.java b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/SearchEngine.java index 2b5041f07c..feec900609 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/SearchEngine.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/SearchEngine.java @@ -195,7 +195,7 @@ public Output engineId() { /** * 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"] * */ @Export(name="industryVertical", refs={String.class}, tree="[0]") @@ -204,7 +204,7 @@ public Output engineId() { /** * @return 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"] * */ public Output> industryVertical() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/SearchEngineArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/SearchEngineArgs.java index 42112efb96..d27b922b0c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/SearchEngineArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/SearchEngineArgs.java @@ -97,7 +97,7 @@ public Output engineId() { /** * 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"] * */ @Import(name="industryVertical") @@ -106,7 +106,7 @@ public Output engineId() { /** * @return 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"] * */ public Optional> industryVertical() { @@ -302,7 +302,7 @@ public Builder engineId(String engineId) { /** * @param industryVertical 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"] * * @return builder * @@ -315,7 +315,7 @@ public Builder industryVertical(@Nullable Output industryVertical) { /** * @param industryVertical 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"] * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/SearchEngineState.java b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/SearchEngineState.java index 6e4ff49af5..2b20877f3c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/SearchEngineState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/discoveryengine/inputs/SearchEngineState.java @@ -111,7 +111,7 @@ public Optional> engineId() { /** * 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"] * */ @Import(name="industryVertical") @@ -120,7 +120,7 @@ public Optional> engineId() { /** * @return 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"] * */ public Optional> industryVertical() { @@ -376,7 +376,7 @@ public Builder engineId(String engineId) { /** * @param industryVertical 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"] * * @return builder * @@ -389,7 +389,7 @@ public Builder industryVertical(@Nullable Output industryVertical) { /** * @param industryVertical 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"] * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/firebaserules/Release.java b/sdk/java/src/main/java/com/pulumi/gcp/firebaserules/Release.java index 9daa89f5a6..93e983b299 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/firebaserules/Release.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/firebaserules/Release.java @@ -19,6 +19,104 @@ * * [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 + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.firebaserules.Ruleset;
+ * import com.pulumi.gcp.firebaserules.RulesetArgs;
+ * import com.pulumi.gcp.firebaserules.inputs.RulesetSourceArgs;
+ * import com.pulumi.gcp.firebaserules.Release;
+ * import com.pulumi.gcp.firebaserules.ReleaseArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var firestore = new Ruleset("firestore", RulesetArgs.builder()
+ *             .project("my-project-name")
+ *             .source(RulesetSourceArgs.builder()
+ *                 .files(RulesetSourceFileArgs.builder()
+ *                     .content("service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }")
+ *                     .name("firestore.rules")
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *         var primary = new Release("primary", ReleaseArgs.builder()
+ *             .name("cloud.firestore")
+ *             .project("my-project-name")
+ *             .rulesetName(firestore.name().applyValue(name -> String.format("projects/my-project-name/rulesets/%s", name)))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * ### Firestore_release_additional + * Creates a Firebase Rules Release to an additional Cloud Firestore instance + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.firebaserules.Ruleset;
+ * import com.pulumi.gcp.firebaserules.RulesetArgs;
+ * import com.pulumi.gcp.firebaserules.inputs.RulesetSourceArgs;
+ * import com.pulumi.gcp.firebaserules.Release;
+ * import com.pulumi.gcp.firebaserules.ReleaseArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var firestore = new Ruleset("firestore", RulesetArgs.builder()
+ *             .project("my-project-name")
+ *             .source(RulesetSourceArgs.builder()
+ *                 .files(RulesetSourceFileArgs.builder()
+ *                     .content("service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }")
+ *                     .name("firestore.rules")
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *         var primary = new Release("primary", ReleaseArgs.builder()
+ *             .name("cloud.firestore/database")
+ *             .project("my-project-name")
+ *             .rulesetName(firestore.name().applyValue(name -> String.format("projects/my-project-name/rulesets/%s", name)))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ## Import * * Release can be imported using any of these accepted formats: diff --git a/sdk/java/src/main/java/com/pulumi/gcp/firestore/Field.java b/sdk/java/src/main/java/com/pulumi/gcp/firestore/Field.java index 94a5d54c98..a8c5b8052d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/firestore/Field.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/firestore/Field.java @@ -74,7 +74,7 @@ * var basic = new Field("basic", FieldArgs.builder() * .project("my-project-name") * .database(database.name()) - * .collection("chatrooms__16511") + * .collection("chatrooms__8493") * .field("basic") * .indexConfig(FieldIndexConfigArgs.builder() * .indexes( @@ -185,7 +185,7 @@ * var matchOverride = new Field("matchOverride", FieldArgs.builder() * .project("my-project-name") * .database(database.name()) - * .collection("chatrooms__8493") + * .collection("chatrooms__9106") * .field("field_with_same_configuration_as_ancestor") * .indexConfig(FieldIndexConfigArgs.builder() * .indexes( diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndex.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndex.java new file mode 100644 index 0000000000..24cbbf494f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndex.java @@ -0,0 +1,326 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.gemini.CodeRepositoryIndexArgs; +import com.pulumi.gcp.gemini.inputs.CodeRepositoryIndexState; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Gemini Code Repository Index Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.gemini.CodeRepositoryIndex;
+ * import com.pulumi.gcp.gemini.CodeRepositoryIndexArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var example = new CodeRepositoryIndex("example", CodeRepositoryIndexArgs.builder()
+ *             .location("us-central1")
+ *             .codeRepositoryIndexId("")
+ *             .kmsKey("projects/projectExample/locations/locationExample/keyRings/keyRingExample/cryptoKeys/cryptoKeyExample")
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## 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}} + * ``` + * + */ +@ResourceType(type="gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex") +public class CodeRepositoryIndex extends com.pulumi.resources.CustomResource { + /** + * Required. Id of the Code Repository Index. + * + * *** + * + */ + @Export(name="codeRepositoryIndexId", refs={String.class}, tree="[0]") + private Output codeRepositoryIndexId; + + /** + * @return Required. Id of the Code Repository Index. + * + * *** + * + */ + public Output codeRepositoryIndexId() { + return this.codeRepositoryIndexId; + } + /** + * Output only. Create time stamp. + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Output only. Create time stamp. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + */ + @Export(name="kmsKey", refs={String.class}, tree="[0]") + private Output kmsKey; + + /** + * @return Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + */ + public Output> kmsKey() { + return Codegen.optional(this.kmsKey); + } + /** + * 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. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return 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 Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * The location of the Code Repository Index, for example `us-central1`. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The location of the Code Repository Index, for example `us-central1`. + * + */ + public Output location() { + return this.location; + } + /** + * Immutable. Identifier. Name of Code Repository Index. + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Immutable. Identifier. Name of Code Repository Index. + * + */ + public Output name() { + return this.name; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * Output only. Code Repository Index instance State. + * Possible values: + * STATE_UNSPECIFIED + * CREATING + * ACTIVE + * DELETING + * SUSPENDED + * + */ + @Export(name="state", refs={String.class}, tree="[0]") + private Output state; + + /** + * @return Output only. Code Repository Index instance State. + * Possible values: + * STATE_UNSPECIFIED + * CREATING + * ACTIVE + * DELETING + * SUSPENDED + * + */ + public Output state() { + return this.state; + } + /** + * Output only. Update time stamp. + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return Output only. Update time stamp. + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public CodeRepositoryIndex(java.lang.String name) { + this(name, CodeRepositoryIndexArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public CodeRepositoryIndex(java.lang.String name, CodeRepositoryIndexArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public CodeRepositoryIndex(java.lang.String name, CodeRepositoryIndexArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private CodeRepositoryIndex(java.lang.String name, Output id, @Nullable CodeRepositoryIndexState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex", name, state, makeResourceOptions(options, id), false); + } + + private static CodeRepositoryIndexArgs makeArgs(CodeRepositoryIndexArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? CodeRepositoryIndexArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static CodeRepositoryIndex get(java.lang.String name, Output id, @Nullable CodeRepositoryIndexState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new CodeRepositoryIndex(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndexArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndexArgs.java new file mode 100644 index 0000000000..c76e2fd135 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/CodeRepositoryIndexArgs.java @@ -0,0 +1,263 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class CodeRepositoryIndexArgs extends com.pulumi.resources.ResourceArgs { + + public static final CodeRepositoryIndexArgs Empty = new CodeRepositoryIndexArgs(); + + /** + * Required. Id of the Code Repository Index. + * + * *** + * + */ + @Import(name="codeRepositoryIndexId", required=true) + private Output codeRepositoryIndexId; + + /** + * @return Required. Id of the Code Repository Index. + * + * *** + * + */ + public Output codeRepositoryIndexId() { + return this.codeRepositoryIndexId; + } + + /** + * Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + */ + @Import(name="kmsKey") + private @Nullable Output kmsKey; + + /** + * @return Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + */ + public Optional> kmsKey() { + return Optional.ofNullable(this.kmsKey); + } + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location of the Code Repository Index, for example `us-central1`. + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location of the Code Repository Index, for example `us-central1`. + * + */ + public Output location() { + return this.location; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private CodeRepositoryIndexArgs() {} + + private CodeRepositoryIndexArgs(CodeRepositoryIndexArgs $) { + this.codeRepositoryIndexId = $.codeRepositoryIndexId; + this.kmsKey = $.kmsKey; + this.labels = $.labels; + this.location = $.location; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(CodeRepositoryIndexArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private CodeRepositoryIndexArgs $; + + public Builder() { + $ = new CodeRepositoryIndexArgs(); + } + + public Builder(CodeRepositoryIndexArgs defaults) { + $ = new CodeRepositoryIndexArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param codeRepositoryIndexId Required. Id of the Code Repository Index. + * + * *** + * + * @return builder + * + */ + public Builder codeRepositoryIndexId(Output codeRepositoryIndexId) { + $.codeRepositoryIndexId = codeRepositoryIndexId; + return this; + } + + /** + * @param codeRepositoryIndexId Required. Id of the Code Repository Index. + * + * *** + * + * @return builder + * + */ + public Builder codeRepositoryIndexId(String codeRepositoryIndexId) { + return codeRepositoryIndexId(Output.of(codeRepositoryIndexId)); + } + + /** + * @param kmsKey Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + * @return builder + * + */ + public Builder kmsKey(@Nullable Output kmsKey) { + $.kmsKey = kmsKey; + return this; + } + + /** + * @param kmsKey Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + * @return builder + * + */ + public Builder kmsKey(String kmsKey) { + return kmsKey(Output.of(kmsKey)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location of the Code Repository Index, for example `us-central1`. + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the Code Repository Index, for example `us-central1`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public CodeRepositoryIndexArgs build() { + if ($.codeRepositoryIndexId == null) { + throw new MissingRequiredPropertyException("CodeRepositoryIndexArgs", "codeRepositoryIndexId"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("CodeRepositoryIndexArgs", "location"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/GeminiFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/GeminiFunctions.java new file mode 100644 index 0000000000..2713c4234c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/GeminiFunctions.java @@ -0,0 +1,29 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.TypeShape; +import com.pulumi.deployment.Deployment; +import com.pulumi.deployment.InvokeOptions; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.gemini.inputs.GetRepositoryGroupIamPolicyArgs; +import com.pulumi.gcp.gemini.inputs.GetRepositoryGroupIamPolicyPlainArgs; +import com.pulumi.gcp.gemini.outputs.GetRepositoryGroupIamPolicyResult; +import java.util.concurrent.CompletableFuture; + +public final class GeminiFunctions { + public static Output getRepositoryGroupIamPolicy(GetRepositoryGroupIamPolicyArgs args) { + return getRepositoryGroupIamPolicy(args, InvokeOptions.Empty); + } + public static CompletableFuture getRepositoryGroupIamPolicyPlain(GetRepositoryGroupIamPolicyPlainArgs args) { + return getRepositoryGroupIamPolicyPlain(args, InvokeOptions.Empty); + } + public static Output getRepositoryGroupIamPolicy(GetRepositoryGroupIamPolicyArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy", TypeShape.of(GetRepositoryGroupIamPolicyResult.class), args, Utilities.withVersion(options)); + } + public static CompletableFuture getRepositoryGroupIamPolicyPlain(GetRepositoryGroupIamPolicyPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy", TypeShape.of(GetRepositoryGroupIamPolicyResult.class), args, Utilities.withVersion(options)); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroup.java new file mode 100644 index 0000000000..0b9630f52f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroup.java @@ -0,0 +1,262 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.gemini.RepositoryGroupArgs; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupState; +import com.pulumi.gcp.gemini.outputs.RepositoryGroupRepository; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## 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}} + * ``` + * + */ +@ResourceType(type="gcp:gemini/repositoryGroup:RepositoryGroup") +public class RepositoryGroup extends com.pulumi.resources.CustomResource { + /** + * Required. Id of the Code Repository Index. + * + */ + @Export(name="codeRepositoryIndex", refs={String.class}, tree="[0]") + private Output codeRepositoryIndex; + + /** + * @return Required. Id of the Code Repository Index. + * + */ + public Output codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + /** + * Output only. Create time stamp + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Output only. Create time stamp + * + */ + public Output createTime() { + return this.createTime; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * 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. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return 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 Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * The location of the Code Repository Index, for example `us-central1`. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The location of the Code Repository Index, for example `us-central1`. + * + */ + public Output location() { + return this.location; + } + /** + * Immutable. Identifier. name of resource + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Immutable. Identifier. name of resource + * + */ + public Output name() { + return this.name; + } + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * Required. List of repositories to group + * Structure is documented below. + * + */ + @Export(name="repositories", refs={List.class,RepositoryGroupRepository.class}, tree="[0,1]") + private Output> repositories; + + /** + * @return Required. List of repositories to group + * Structure is documented below. + * + */ + public Output> repositories() { + return this.repositories; + } + /** + * Required. Id of the Repository Group. + * + */ + @Export(name="repositoryGroupId", refs={String.class}, tree="[0]") + private Output repositoryGroupId; + + /** + * @return Required. Id of the Repository Group. + * + */ + public Output repositoryGroupId() { + return this.repositoryGroupId; + } + /** + * Output only. Update time stamp + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return Output only. Update time stamp + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public RepositoryGroup(java.lang.String name) { + this(name, RepositoryGroupArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public RepositoryGroup(java.lang.String name, RepositoryGroupArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public RepositoryGroup(java.lang.String name, RepositoryGroupArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/repositoryGroup:RepositoryGroup", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private RepositoryGroup(java.lang.String name, Output id, @Nullable RepositoryGroupState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/repositoryGroup:RepositoryGroup", name, state, makeResourceOptions(options, id), false); + } + + private static RepositoryGroupArgs makeArgs(RepositoryGroupArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? RepositoryGroupArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static RepositoryGroup get(java.lang.String name, Output id, @Nullable RepositoryGroupState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new RepositoryGroup(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupArgs.java new file mode 100644 index 0000000000..1339c0891d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupArgs.java @@ -0,0 +1,283 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupRepositoryArgs; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupArgs extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupArgs Empty = new RepositoryGroupArgs(); + + /** + * Required. Id of the Code Repository Index. + * + */ + @Import(name="codeRepositoryIndex", required=true) + private Output codeRepositoryIndex; + + /** + * @return Required. Id of the Code Repository Index. + * + */ + public Output codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location of the Code Repository Index, for example `us-central1`. + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location of the Code Repository Index, for example `us-central1`. + * + */ + public Output location() { + return this.location; + } + + @Import(name="project") + private @Nullable Output project; + + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Required. List of repositories to group + * Structure is documented below. + * + */ + @Import(name="repositories", required=true) + private Output> repositories; + + /** + * @return Required. List of repositories to group + * Structure is documented below. + * + */ + public Output> repositories() { + return this.repositories; + } + + /** + * Required. Id of the Repository Group. + * + */ + @Import(name="repositoryGroupId", required=true) + private Output repositoryGroupId; + + /** + * @return Required. Id of the Repository Group. + * + */ + public Output repositoryGroupId() { + return this.repositoryGroupId; + } + + private RepositoryGroupArgs() {} + + private RepositoryGroupArgs(RepositoryGroupArgs $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.labels = $.labels; + this.location = $.location; + this.project = $.project; + this.repositories = $.repositories; + this.repositoryGroupId = $.repositoryGroupId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupArgs $; + + public Builder() { + $ = new RepositoryGroupArgs(); + } + + public Builder(RepositoryGroupArgs defaults) { + $ = new RepositoryGroupArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param codeRepositoryIndex Required. Id of the Code Repository Index. + * + * @return builder + * + */ + public Builder codeRepositoryIndex(Output codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + /** + * @param codeRepositoryIndex Required. Id of the Code Repository Index. + * + * @return builder + * + */ + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + return codeRepositoryIndex(Output.of(codeRepositoryIndex)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location of the Code Repository Index, for example `us-central1`. + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the Code Repository Index, for example `us-central1`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param repositories Required. List of repositories to group + * Structure is documented below. + * + * @return builder + * + */ + public Builder repositories(Output> repositories) { + $.repositories = repositories; + return this; + } + + /** + * @param repositories Required. List of repositories to group + * Structure is documented below. + * + * @return builder + * + */ + public Builder repositories(List repositories) { + return repositories(Output.of(repositories)); + } + + /** + * @param repositories Required. List of repositories to group + * Structure is documented below. + * + * @return builder + * + */ + public Builder repositories(RepositoryGroupRepositoryArgs... repositories) { + return repositories(List.of(repositories)); + } + + /** + * @param repositoryGroupId Required. Id of the Repository Group. + * + * @return builder + * + */ + public Builder repositoryGroupId(Output repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + /** + * @param repositoryGroupId Required. Id of the Repository Group. + * + * @return builder + * + */ + public Builder repositoryGroupId(String repositoryGroupId) { + return repositoryGroupId(Output.of(repositoryGroupId)); + } + + public RepositoryGroupArgs build() { + if ($.codeRepositoryIndex == null) { + throw new MissingRequiredPropertyException("RepositoryGroupArgs", "codeRepositoryIndex"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("RepositoryGroupArgs", "location"); + } + if ($.repositories == null) { + throw new MissingRequiredPropertyException("RepositoryGroupArgs", "repositories"); + } + if ($.repositoryGroupId == null) { + throw new MissingRequiredPropertyException("RepositoryGroupArgs", "repositoryGroupId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamBinding.java new file mode 100644 index 0000000000..91e37aa845 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamBinding.java @@ -0,0 +1,235 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.gemini.RepositoryGroupIamBindingArgs; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupIamBindingState; +import com.pulumi.gcp.gemini.outputs.RepositoryGroupIamBindingCondition; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## 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{@literal @}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`. + * + */ +@ResourceType(type="gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding") +public class RepositoryGroupIamBinding extends com.pulumi.resources.CustomResource { + @Export(name="codeRepositoryIndex", refs={String.class}, tree="[0]") + private Output codeRepositoryIndex; + + public Output codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + @Export(name="condition", refs={RepositoryGroupIamBindingCondition.class}, tree="[0]") + private Output condition; + + public Output> condition() { + return Codegen.optional(this.condition); + } + /** + * (Computed) The etag of the IAM policy. + * + */ + @Export(name="etag", refs={String.class}, tree="[0]") + private Output etag; + + /** + * @return (Computed) The etag of the IAM policy. + * + */ + public Output etag() { + return this.etag; + } + /** + * 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. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return 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. + * + */ + public Output location() { + return this.location; + } + /** + * 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + */ + @Export(name="members", refs={List.class,String.class}, tree="[0,1]") + private Output> members; + + /** + * @return 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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 Output> members() { + return this.members; + } + /** + * 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. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return 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. + * + */ + public Output project() { + return this.project; + } + @Export(name="repositoryGroupId", refs={String.class}, tree="[0]") + private Output repositoryGroupId; + + public Output repositoryGroupId() { + return this.repositoryGroupId; + } + /** + * 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}`. + * + */ + @Export(name="role", refs={String.class}, tree="[0]") + private Output role; + + /** + * @return 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}`. + * + */ + public Output role() { + return this.role; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public RepositoryGroupIamBinding(java.lang.String name) { + this(name, RepositoryGroupIamBindingArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public RepositoryGroupIamBinding(java.lang.String name, RepositoryGroupIamBindingArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public RepositoryGroupIamBinding(java.lang.String name, RepositoryGroupIamBindingArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private RepositoryGroupIamBinding(java.lang.String name, Output id, @Nullable RepositoryGroupIamBindingState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding", name, state, makeResourceOptions(options, id), false); + } + + private static RepositoryGroupIamBindingArgs makeArgs(RepositoryGroupIamBindingArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? RepositoryGroupIamBindingArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static RepositoryGroupIamBinding get(java.lang.String name, Output id, @Nullable RepositoryGroupIamBindingState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new RepositoryGroupIamBinding(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamBindingArgs.java new file mode 100644 index 0000000000..3b325067b2 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamBindingArgs.java @@ -0,0 +1,340 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupIamBindingConditionArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupIamBindingArgs extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupIamBindingArgs Empty = new RepositoryGroupIamBindingArgs(); + + @Import(name="codeRepositoryIndex", required=true) + private Output codeRepositoryIndex; + + public Output codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + + @Import(name="condition") + private @Nullable Output condition; + + public Optional> condition() { + return Optional.ofNullable(this.condition); + } + + /** + * 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. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + */ + @Import(name="members", required=true) + private Output> members; + + /** + * @return 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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 Output> members() { + return this.members; + } + + /** + * 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. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return 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. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + @Import(name="repositoryGroupId", required=true) + private Output repositoryGroupId; + + public Output repositoryGroupId() { + return this.repositoryGroupId; + } + + /** + * 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}`. + * + */ + @Import(name="role", required=true) + private Output role; + + /** + * @return 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}`. + * + */ + public Output role() { + return this.role; + } + + private RepositoryGroupIamBindingArgs() {} + + private RepositoryGroupIamBindingArgs(RepositoryGroupIamBindingArgs $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.condition = $.condition; + this.location = $.location; + this.members = $.members; + this.project = $.project; + this.repositoryGroupId = $.repositoryGroupId; + this.role = $.role; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupIamBindingArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupIamBindingArgs $; + + public Builder() { + $ = new RepositoryGroupIamBindingArgs(); + } + + public Builder(RepositoryGroupIamBindingArgs defaults) { + $ = new RepositoryGroupIamBindingArgs(Objects.requireNonNull(defaults)); + } + + public Builder codeRepositoryIndex(Output codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + return codeRepositoryIndex(Output.of(codeRepositoryIndex)); + } + + public Builder condition(@Nullable Output condition) { + $.condition = condition; + return this; + } + + public Builder condition(RepositoryGroupIamBindingConditionArgs condition) { + return condition(Output.of(condition)); + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder members(Output> members) { + $.members = members; + return this; + } + + /** + * @param 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder members(List members) { + return members(Output.of(members)); + } + + /** + * @param 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder members(String... members) { + return members(List.of(members)); + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public Builder repositoryGroupId(Output repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + public Builder repositoryGroupId(String repositoryGroupId) { + return repositoryGroupId(Output.of(repositoryGroupId)); + } + + /** + * @param role 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}`. + * + * @return builder + * + */ + public Builder role(Output role) { + $.role = role; + return this; + } + + /** + * @param role 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}`. + * + * @return builder + * + */ + public Builder role(String role) { + return role(Output.of(role)); + } + + public RepositoryGroupIamBindingArgs build() { + if ($.codeRepositoryIndex == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamBindingArgs", "codeRepositoryIndex"); + } + if ($.members == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamBindingArgs", "members"); + } + if ($.repositoryGroupId == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamBindingArgs", "repositoryGroupId"); + } + if ($.role == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamBindingArgs", "role"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamMember.java new file mode 100644 index 0000000000..3e96e0e7a0 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamMember.java @@ -0,0 +1,234 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.gemini.RepositoryGroupIamMemberArgs; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupIamMemberState; +import com.pulumi.gcp.gemini.outputs.RepositoryGroupIamMemberCondition; +import java.lang.String; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## 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{@literal @}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`. + * + */ +@ResourceType(type="gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember") +public class RepositoryGroupIamMember extends com.pulumi.resources.CustomResource { + @Export(name="codeRepositoryIndex", refs={String.class}, tree="[0]") + private Output codeRepositoryIndex; + + public Output codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + @Export(name="condition", refs={RepositoryGroupIamMemberCondition.class}, tree="[0]") + private Output condition; + + public Output> condition() { + return Codegen.optional(this.condition); + } + /** + * (Computed) The etag of the IAM policy. + * + */ + @Export(name="etag", refs={String.class}, tree="[0]") + private Output etag; + + /** + * @return (Computed) The etag of the IAM policy. + * + */ + public Output etag() { + return this.etag; + } + /** + * 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. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return 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. + * + */ + public Output location() { + return this.location; + } + /** + * 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + */ + @Export(name="member", refs={String.class}, tree="[0]") + private Output member; + + /** + * @return 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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 Output member() { + return this.member; + } + /** + * 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. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return 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. + * + */ + public Output project() { + return this.project; + } + @Export(name="repositoryGroupId", refs={String.class}, tree="[0]") + private Output repositoryGroupId; + + public Output repositoryGroupId() { + return this.repositoryGroupId; + } + /** + * 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}`. + * + */ + @Export(name="role", refs={String.class}, tree="[0]") + private Output role; + + /** + * @return 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}`. + * + */ + public Output role() { + return this.role; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public RepositoryGroupIamMember(java.lang.String name) { + this(name, RepositoryGroupIamMemberArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public RepositoryGroupIamMember(java.lang.String name, RepositoryGroupIamMemberArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public RepositoryGroupIamMember(java.lang.String name, RepositoryGroupIamMemberArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private RepositoryGroupIamMember(java.lang.String name, Output id, @Nullable RepositoryGroupIamMemberState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember", name, state, makeResourceOptions(options, id), false); + } + + private static RepositoryGroupIamMemberArgs makeArgs(RepositoryGroupIamMemberArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? RepositoryGroupIamMemberArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static RepositoryGroupIamMember get(java.lang.String name, Output id, @Nullable RepositoryGroupIamMemberState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new RepositoryGroupIamMember(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamMemberArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamMemberArgs.java new file mode 100644 index 0000000000..7e5ef5d408 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamMemberArgs.java @@ -0,0 +1,319 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupIamMemberConditionArgs; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupIamMemberArgs extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupIamMemberArgs Empty = new RepositoryGroupIamMemberArgs(); + + @Import(name="codeRepositoryIndex", required=true) + private Output codeRepositoryIndex; + + public Output codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + + @Import(name="condition") + private @Nullable Output condition; + + public Optional> condition() { + return Optional.ofNullable(this.condition); + } + + /** + * 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. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + */ + @Import(name="member", required=true) + private Output member; + + /** + * @return 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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 Output member() { + return this.member; + } + + /** + * 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. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return 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. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + @Import(name="repositoryGroupId", required=true) + private Output repositoryGroupId; + + public Output repositoryGroupId() { + return this.repositoryGroupId; + } + + /** + * 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}`. + * + */ + @Import(name="role", required=true) + private Output role; + + /** + * @return 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}`. + * + */ + public Output role() { + return this.role; + } + + private RepositoryGroupIamMemberArgs() {} + + private RepositoryGroupIamMemberArgs(RepositoryGroupIamMemberArgs $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.condition = $.condition; + this.location = $.location; + this.member = $.member; + this.project = $.project; + this.repositoryGroupId = $.repositoryGroupId; + this.role = $.role; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupIamMemberArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupIamMemberArgs $; + + public Builder() { + $ = new RepositoryGroupIamMemberArgs(); + } + + public Builder(RepositoryGroupIamMemberArgs defaults) { + $ = new RepositoryGroupIamMemberArgs(Objects.requireNonNull(defaults)); + } + + public Builder codeRepositoryIndex(Output codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + return codeRepositoryIndex(Output.of(codeRepositoryIndex)); + } + + public Builder condition(@Nullable Output condition) { + $.condition = condition; + return this; + } + + public Builder condition(RepositoryGroupIamMemberConditionArgs condition) { + return condition(Output.of(condition)); + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param member 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder member(Output member) { + $.member = member; + return this; + } + + /** + * @param member 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder member(String member) { + return member(Output.of(member)); + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public Builder repositoryGroupId(Output repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + public Builder repositoryGroupId(String repositoryGroupId) { + return repositoryGroupId(Output.of(repositoryGroupId)); + } + + /** + * @param role 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}`. + * + * @return builder + * + */ + public Builder role(Output role) { + $.role = role; + return this; + } + + /** + * @param role 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}`. + * + * @return builder + * + */ + public Builder role(String role) { + return role(Output.of(role)); + } + + public RepositoryGroupIamMemberArgs build() { + if ($.codeRepositoryIndex == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamMemberArgs", "codeRepositoryIndex"); + } + if ($.member == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamMemberArgs", "member"); + } + if ($.repositoryGroupId == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamMemberArgs", "repositoryGroupId"); + } + if ($.role == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamMemberArgs", "role"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamPolicy.java new file mode 100644 index 0000000000..698d04eb69 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamPolicy.java @@ -0,0 +1,190 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.gemini.RepositoryGroupIamPolicyArgs; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupIamPolicyState; +import java.lang.String; +import javax.annotation.Nullable; + +/** + * ## 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy editor "projects/{{project}}/locations/{{location}}/codeRepositoryIndexes/{{code_repository_index}}/repositoryGroups/{{repository_group_id}} roles/cloudaicompanion.repositoryGroupsUser user:jane{@literal @}example.com" + * ``` + * + * IAM binding imports use space-delimited identifiers: the resource in question and the role, e.g. + * + * ```sh + * $ pulumi import gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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`. + * + */ +@ResourceType(type="gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy") +public class RepositoryGroupIamPolicy extends com.pulumi.resources.CustomResource { + @Export(name="codeRepositoryIndex", refs={String.class}, tree="[0]") + private Output codeRepositoryIndex; + + public Output codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + /** + * (Computed) The etag of the IAM policy. + * + */ + @Export(name="etag", refs={String.class}, tree="[0]") + private Output etag; + + /** + * @return (Computed) The etag of the IAM policy. + * + */ + public Output etag() { + return this.etag; + } + /** + * 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. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return 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. + * + */ + public Output location() { + return this.location; + } + /** + * The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + */ + @Export(name="policyData", refs={String.class}, tree="[0]") + private Output policyData; + + /** + * @return The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + */ + public Output policyData() { + return this.policyData; + } + /** + * 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. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return 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. + * + */ + public Output project() { + return this.project; + } + @Export(name="repositoryGroupId", refs={String.class}, tree="[0]") + private Output repositoryGroupId; + + public Output repositoryGroupId() { + return this.repositoryGroupId; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public RepositoryGroupIamPolicy(java.lang.String name) { + this(name, RepositoryGroupIamPolicyArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public RepositoryGroupIamPolicy(java.lang.String name, RepositoryGroupIamPolicyArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public RepositoryGroupIamPolicy(java.lang.String name, RepositoryGroupIamPolicyArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private RepositoryGroupIamPolicy(java.lang.String name, Output id, @Nullable RepositoryGroupIamPolicyState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy", name, state, makeResourceOptions(options, id), false); + } + + private static RepositoryGroupIamPolicyArgs makeArgs(RepositoryGroupIamPolicyArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? RepositoryGroupIamPolicyArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static RepositoryGroupIamPolicy get(java.lang.String name, Output id, @Nullable RepositoryGroupIamPolicyState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new RepositoryGroupIamPolicy(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamPolicyArgs.java new file mode 100644 index 0000000000..a5f8db5dba --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/RepositoryGroupIamPolicyArgs.java @@ -0,0 +1,217 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupIamPolicyArgs extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupIamPolicyArgs Empty = new RepositoryGroupIamPolicyArgs(); + + @Import(name="codeRepositoryIndex", required=true) + private Output codeRepositoryIndex; + + public Output codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + + /** + * 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. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + */ + @Import(name="policyData", required=true) + private Output policyData; + + /** + * @return The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + */ + public Output policyData() { + return this.policyData; + } + + /** + * 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. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return 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. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + @Import(name="repositoryGroupId", required=true) + private Output repositoryGroupId; + + public Output repositoryGroupId() { + return this.repositoryGroupId; + } + + private RepositoryGroupIamPolicyArgs() {} + + private RepositoryGroupIamPolicyArgs(RepositoryGroupIamPolicyArgs $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.location = $.location; + this.policyData = $.policyData; + this.project = $.project; + this.repositoryGroupId = $.repositoryGroupId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupIamPolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupIamPolicyArgs $; + + public Builder() { + $ = new RepositoryGroupIamPolicyArgs(); + } + + public Builder(RepositoryGroupIamPolicyArgs defaults) { + $ = new RepositoryGroupIamPolicyArgs(Objects.requireNonNull(defaults)); + } + + public Builder codeRepositoryIndex(Output codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + return codeRepositoryIndex(Output.of(codeRepositoryIndex)); + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param policyData The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + * @return builder + * + */ + public Builder policyData(Output policyData) { + $.policyData = policyData; + return this; + } + + /** + * @param policyData The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + * @return builder + * + */ + public Builder policyData(String policyData) { + return policyData(Output.of(policyData)); + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public Builder repositoryGroupId(Output repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + public Builder repositoryGroupId(String repositoryGroupId) { + return repositoryGroupId(Output.of(repositoryGroupId)); + } + + public RepositoryGroupIamPolicyArgs build() { + if ($.codeRepositoryIndex == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamPolicyArgs", "codeRepositoryIndex"); + } + if ($.policyData == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamPolicyArgs", "policyData"); + } + if ($.repositoryGroupId == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamPolicyArgs", "repositoryGroupId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/CodeRepositoryIndexState.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/CodeRepositoryIndexState.java new file mode 100644 index 0000000000..172b321cbc --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/CodeRepositoryIndexState.java @@ -0,0 +1,506 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class CodeRepositoryIndexState extends com.pulumi.resources.ResourceArgs { + + public static final CodeRepositoryIndexState Empty = new CodeRepositoryIndexState(); + + /** + * Required. Id of the Code Repository Index. + * + * *** + * + */ + @Import(name="codeRepositoryIndexId") + private @Nullable Output codeRepositoryIndexId; + + /** + * @return Required. Id of the Code Repository Index. + * + * *** + * + */ + public Optional> codeRepositoryIndexId() { + return Optional.ofNullable(this.codeRepositoryIndexId); + } + + /** + * Output only. Create time stamp. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. Create time stamp. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + */ + @Import(name="kmsKey") + private @Nullable Output kmsKey; + + /** + * @return Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + */ + public Optional> kmsKey() { + return Optional.ofNullable(this.kmsKey); + } + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location of the Code Repository Index, for example `us-central1`. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location of the Code Repository Index, for example `us-central1`. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Immutable. Identifier. Name of Code Repository Index. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Immutable. Identifier. Name of Code Repository Index. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * Output only. Code Repository Index instance State. + * Possible values: + * STATE_UNSPECIFIED + * CREATING + * ACTIVE + * DELETING + * SUSPENDED + * + */ + @Import(name="state") + private @Nullable Output state; + + /** + * @return Output only. Code Repository Index instance State. + * Possible values: + * STATE_UNSPECIFIED + * CREATING + * ACTIVE + * DELETING + * SUSPENDED + * + */ + public Optional> state() { + return Optional.ofNullable(this.state); + } + + /** + * Output only. Update time stamp. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Output only. Update time stamp. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private CodeRepositoryIndexState() {} + + private CodeRepositoryIndexState(CodeRepositoryIndexState $) { + this.codeRepositoryIndexId = $.codeRepositoryIndexId; + this.createTime = $.createTime; + this.effectiveLabels = $.effectiveLabels; + this.kmsKey = $.kmsKey; + this.labels = $.labels; + this.location = $.location; + this.name = $.name; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.state = $.state; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(CodeRepositoryIndexState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private CodeRepositoryIndexState $; + + public Builder() { + $ = new CodeRepositoryIndexState(); + } + + public Builder(CodeRepositoryIndexState defaults) { + $ = new CodeRepositoryIndexState(Objects.requireNonNull(defaults)); + } + + /** + * @param codeRepositoryIndexId Required. Id of the Code Repository Index. + * + * *** + * + * @return builder + * + */ + public Builder codeRepositoryIndexId(@Nullable Output codeRepositoryIndexId) { + $.codeRepositoryIndexId = codeRepositoryIndexId; + return this; + } + + /** + * @param codeRepositoryIndexId Required. Id of the Code Repository Index. + * + * *** + * + * @return builder + * + */ + public Builder codeRepositoryIndexId(String codeRepositoryIndexId) { + return codeRepositoryIndexId(Output.of(codeRepositoryIndexId)); + } + + /** + * @param createTime Output only. Create time stamp. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. Create time stamp. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param kmsKey Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + * @return builder + * + */ + public Builder kmsKey(@Nullable Output kmsKey) { + $.kmsKey = kmsKey; + return this; + } + + /** + * @param kmsKey Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + * + * @return builder + * + */ + public Builder kmsKey(String kmsKey) { + return kmsKey(Output.of(kmsKey)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location of the Code Repository Index, for example `us-central1`. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the Code Repository Index, for example `us-central1`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name Immutable. Identifier. Name of Code Repository Index. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Immutable. Identifier. Name of Code Repository Index. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param state Output only. Code Repository Index instance State. + * Possible values: + * STATE_UNSPECIFIED + * CREATING + * ACTIVE + * DELETING + * SUSPENDED + * + * @return builder + * + */ + public Builder state(@Nullable Output state) { + $.state = state; + return this; + } + + /** + * @param state Output only. Code Repository Index instance State. + * Possible values: + * STATE_UNSPECIFIED + * CREATING + * ACTIVE + * DELETING + * SUSPENDED + * + * @return builder + * + */ + public Builder state(String state) { + return state(Output.of(state)); + } + + /** + * @param updateTime Output only. Update time stamp. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Output only. Update time stamp. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public CodeRepositoryIndexState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/GetRepositoryGroupIamPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/GetRepositoryGroupIamPolicyArgs.java new file mode 100644 index 0000000000..fa5386e499 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/GetRepositoryGroupIamPolicyArgs.java @@ -0,0 +1,173 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class GetRepositoryGroupIamPolicyArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetRepositoryGroupIamPolicyArgs Empty = new GetRepositoryGroupIamPolicyArgs(); + + @Import(name="codeRepositoryIndex", required=true) + private Output codeRepositoryIndex; + + public Output codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + + /** + * 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. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * 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. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return 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. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + @Import(name="repositoryGroupId", required=true) + private Output repositoryGroupId; + + public Output repositoryGroupId() { + return this.repositoryGroupId; + } + + private GetRepositoryGroupIamPolicyArgs() {} + + private GetRepositoryGroupIamPolicyArgs(GetRepositoryGroupIamPolicyArgs $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.location = $.location; + this.project = $.project; + this.repositoryGroupId = $.repositoryGroupId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetRepositoryGroupIamPolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetRepositoryGroupIamPolicyArgs $; + + public Builder() { + $ = new GetRepositoryGroupIamPolicyArgs(); + } + + public Builder(GetRepositoryGroupIamPolicyArgs defaults) { + $ = new GetRepositoryGroupIamPolicyArgs(Objects.requireNonNull(defaults)); + } + + public Builder codeRepositoryIndex(Output codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + return codeRepositoryIndex(Output.of(codeRepositoryIndex)); + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public Builder repositoryGroupId(Output repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + public Builder repositoryGroupId(String repositoryGroupId) { + return repositoryGroupId(Output.of(repositoryGroupId)); + } + + public GetRepositoryGroupIamPolicyArgs build() { + if ($.codeRepositoryIndex == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyArgs", "codeRepositoryIndex"); + } + if ($.repositoryGroupId == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyArgs", "repositoryGroupId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/GetRepositoryGroupIamPolicyPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/GetRepositoryGroupIamPolicyPlainArgs.java new file mode 100644 index 0000000000..12aa7dfe9b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/GetRepositoryGroupIamPolicyPlainArgs.java @@ -0,0 +1,141 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class GetRepositoryGroupIamPolicyPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetRepositoryGroupIamPolicyPlainArgs Empty = new GetRepositoryGroupIamPolicyPlainArgs(); + + @Import(name="codeRepositoryIndex", required=true) + private String codeRepositoryIndex; + + public String codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + + /** + * 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. + * + */ + @Import(name="location") + private @Nullable String location; + + /** + * @return 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. + * + */ + public Optional location() { + return Optional.ofNullable(this.location); + } + + /** + * 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. + * + */ + @Import(name="project") + private @Nullable String project; + + /** + * @return 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. + * + */ + public Optional project() { + return Optional.ofNullable(this.project); + } + + @Import(name="repositoryGroupId", required=true) + private String repositoryGroupId; + + public String repositoryGroupId() { + return this.repositoryGroupId; + } + + private GetRepositoryGroupIamPolicyPlainArgs() {} + + private GetRepositoryGroupIamPolicyPlainArgs(GetRepositoryGroupIamPolicyPlainArgs $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.location = $.location; + this.project = $.project; + this.repositoryGroupId = $.repositoryGroupId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetRepositoryGroupIamPolicyPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetRepositoryGroupIamPolicyPlainArgs $; + + public Builder() { + $ = new GetRepositoryGroupIamPolicyPlainArgs(); + } + + public Builder(GetRepositoryGroupIamPolicyPlainArgs defaults) { + $ = new GetRepositoryGroupIamPolicyPlainArgs(Objects.requireNonNull(defaults)); + } + + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(@Nullable String location) { + $.location = location; + return this; + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(@Nullable String project) { + $.project = project; + return this; + } + + public Builder repositoryGroupId(String repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + public GetRepositoryGroupIamPolicyPlainArgs build() { + if ($.codeRepositoryIndex == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyPlainArgs", "codeRepositoryIndex"); + } + if ($.repositoryGroupId == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyPlainArgs", "repositoryGroupId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamBindingConditionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamBindingConditionArgs.java new file mode 100644 index 0000000000..0ca69561c2 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamBindingConditionArgs.java @@ -0,0 +1,104 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupIamBindingConditionArgs extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupIamBindingConditionArgs Empty = new RepositoryGroupIamBindingConditionArgs(); + + @Import(name="description") + private @Nullable Output description; + + public Optional> description() { + return Optional.ofNullable(this.description); + } + + @Import(name="expression", required=true) + private Output expression; + + public Output expression() { + return this.expression; + } + + @Import(name="title", required=true) + private Output title; + + public Output title() { + return this.title; + } + + private RepositoryGroupIamBindingConditionArgs() {} + + private RepositoryGroupIamBindingConditionArgs(RepositoryGroupIamBindingConditionArgs $) { + this.description = $.description; + this.expression = $.expression; + this.title = $.title; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupIamBindingConditionArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupIamBindingConditionArgs $; + + public Builder() { + $ = new RepositoryGroupIamBindingConditionArgs(); + } + + public Builder(RepositoryGroupIamBindingConditionArgs defaults) { + $ = new RepositoryGroupIamBindingConditionArgs(Objects.requireNonNull(defaults)); + } + + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + public Builder description(String description) { + return description(Output.of(description)); + } + + public Builder expression(Output expression) { + $.expression = expression; + return this; + } + + public Builder expression(String expression) { + return expression(Output.of(expression)); + } + + public Builder title(Output title) { + $.title = title; + return this; + } + + public Builder title(String title) { + return title(Output.of(title)); + } + + public RepositoryGroupIamBindingConditionArgs build() { + if ($.expression == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamBindingConditionArgs", "expression"); + } + if ($.title == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamBindingConditionArgs", "title"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamBindingState.java new file mode 100644 index 0000000000..2b32a4f708 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamBindingState.java @@ -0,0 +1,364 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupIamBindingConditionArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupIamBindingState extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupIamBindingState Empty = new RepositoryGroupIamBindingState(); + + @Import(name="codeRepositoryIndex") + private @Nullable Output codeRepositoryIndex; + + public Optional> codeRepositoryIndex() { + return Optional.ofNullable(this.codeRepositoryIndex); + } + + @Import(name="condition") + private @Nullable Output condition; + + public Optional> condition() { + return Optional.ofNullable(this.condition); + } + + /** + * (Computed) The etag of the IAM policy. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return (Computed) The etag of the IAM policy. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * 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. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + */ + @Import(name="members") + private @Nullable Output> members; + + /** + * @return 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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 Optional>> members() { + return Optional.ofNullable(this.members); + } + + /** + * 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. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return 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. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + @Import(name="repositoryGroupId") + private @Nullable Output repositoryGroupId; + + public Optional> repositoryGroupId() { + return Optional.ofNullable(this.repositoryGroupId); + } + + /** + * 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}`. + * + */ + @Import(name="role") + private @Nullable Output role; + + /** + * @return 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}`. + * + */ + public Optional> role() { + return Optional.ofNullable(this.role); + } + + private RepositoryGroupIamBindingState() {} + + private RepositoryGroupIamBindingState(RepositoryGroupIamBindingState $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.condition = $.condition; + this.etag = $.etag; + this.location = $.location; + this.members = $.members; + this.project = $.project; + this.repositoryGroupId = $.repositoryGroupId; + this.role = $.role; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupIamBindingState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupIamBindingState $; + + public Builder() { + $ = new RepositoryGroupIamBindingState(); + } + + public Builder(RepositoryGroupIamBindingState defaults) { + $ = new RepositoryGroupIamBindingState(Objects.requireNonNull(defaults)); + } + + public Builder codeRepositoryIndex(@Nullable Output codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + return codeRepositoryIndex(Output.of(codeRepositoryIndex)); + } + + public Builder condition(@Nullable Output condition) { + $.condition = condition; + return this; + } + + public Builder condition(RepositoryGroupIamBindingConditionArgs condition) { + return condition(Output.of(condition)); + } + + /** + * @param etag (Computed) The etag of the IAM policy. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag (Computed) The etag of the IAM policy. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder members(@Nullable Output> members) { + $.members = members; + return this; + } + + /** + * @param 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder members(List members) { + return members(Output.of(members)); + } + + /** + * @param 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder members(String... members) { + return members(List.of(members)); + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public Builder repositoryGroupId(@Nullable Output repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + public Builder repositoryGroupId(String repositoryGroupId) { + return repositoryGroupId(Output.of(repositoryGroupId)); + } + + /** + * @param role 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}`. + * + * @return builder + * + */ + public Builder role(@Nullable Output role) { + $.role = role; + return this; + } + + /** + * @param role 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}`. + * + * @return builder + * + */ + public Builder role(String role) { + return role(Output.of(role)); + } + + public RepositoryGroupIamBindingState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamMemberConditionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamMemberConditionArgs.java new file mode 100644 index 0000000000..d1b361ec1c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamMemberConditionArgs.java @@ -0,0 +1,104 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupIamMemberConditionArgs extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupIamMemberConditionArgs Empty = new RepositoryGroupIamMemberConditionArgs(); + + @Import(name="description") + private @Nullable Output description; + + public Optional> description() { + return Optional.ofNullable(this.description); + } + + @Import(name="expression", required=true) + private Output expression; + + public Output expression() { + return this.expression; + } + + @Import(name="title", required=true) + private Output title; + + public Output title() { + return this.title; + } + + private RepositoryGroupIamMemberConditionArgs() {} + + private RepositoryGroupIamMemberConditionArgs(RepositoryGroupIamMemberConditionArgs $) { + this.description = $.description; + this.expression = $.expression; + this.title = $.title; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupIamMemberConditionArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupIamMemberConditionArgs $; + + public Builder() { + $ = new RepositoryGroupIamMemberConditionArgs(); + } + + public Builder(RepositoryGroupIamMemberConditionArgs defaults) { + $ = new RepositoryGroupIamMemberConditionArgs(Objects.requireNonNull(defaults)); + } + + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + public Builder description(String description) { + return description(Output.of(description)); + } + + public Builder expression(Output expression) { + $.expression = expression; + return this; + } + + public Builder expression(String expression) { + return expression(Output.of(expression)); + } + + public Builder title(Output title) { + $.title = title; + return this; + } + + public Builder title(String title) { + return title(Output.of(title)); + } + + public RepositoryGroupIamMemberConditionArgs build() { + if ($.expression == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamMemberConditionArgs", "expression"); + } + if ($.title == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamMemberConditionArgs", "title"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamMemberState.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamMemberState.java new file mode 100644 index 0000000000..d386203afe --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamMemberState.java @@ -0,0 +1,343 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupIamMemberConditionArgs; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupIamMemberState extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupIamMemberState Empty = new RepositoryGroupIamMemberState(); + + @Import(name="codeRepositoryIndex") + private @Nullable Output codeRepositoryIndex; + + public Optional> codeRepositoryIndex() { + return Optional.ofNullable(this.codeRepositoryIndex); + } + + @Import(name="condition") + private @Nullable Output condition; + + public Optional> condition() { + return Optional.ofNullable(this.condition); + } + + /** + * (Computed) The etag of the IAM policy. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return (Computed) The etag of the IAM policy. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * 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. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + */ + @Import(name="member") + private @Nullable Output member; + + /** + * @return 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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 Optional> member() { + return Optional.ofNullable(this.member); + } + + /** + * 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. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return 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. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + @Import(name="repositoryGroupId") + private @Nullable Output repositoryGroupId; + + public Optional> repositoryGroupId() { + return Optional.ofNullable(this.repositoryGroupId); + } + + /** + * 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}`. + * + */ + @Import(name="role") + private @Nullable Output role; + + /** + * @return 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}`. + * + */ + public Optional> role() { + return Optional.ofNullable(this.role); + } + + private RepositoryGroupIamMemberState() {} + + private RepositoryGroupIamMemberState(RepositoryGroupIamMemberState $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.condition = $.condition; + this.etag = $.etag; + this.location = $.location; + this.member = $.member; + this.project = $.project; + this.repositoryGroupId = $.repositoryGroupId; + this.role = $.role; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupIamMemberState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupIamMemberState $; + + public Builder() { + $ = new RepositoryGroupIamMemberState(); + } + + public Builder(RepositoryGroupIamMemberState defaults) { + $ = new RepositoryGroupIamMemberState(Objects.requireNonNull(defaults)); + } + + public Builder codeRepositoryIndex(@Nullable Output codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + return codeRepositoryIndex(Output.of(codeRepositoryIndex)); + } + + public Builder condition(@Nullable Output condition) { + $.condition = condition; + return this; + } + + public Builder condition(RepositoryGroupIamMemberConditionArgs condition) { + return condition(Output.of(condition)); + } + + /** + * @param etag (Computed) The etag of the IAM policy. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag (Computed) The etag of the IAM policy. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param member 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder member(@Nullable Output member) { + $.member = member; + return this; + } + + /** + * @param member 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{@literal @}gmail.com or joe{@literal @}example.com. + * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app{@literal @}appspot.gserviceaccount.com. + * * **group:{emailid}**: An email address that represents a Google group. For example, admins{@literal @}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" + * + * @return builder + * + */ + public Builder member(String member) { + return member(Output.of(member)); + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public Builder repositoryGroupId(@Nullable Output repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + public Builder repositoryGroupId(String repositoryGroupId) { + return repositoryGroupId(Output.of(repositoryGroupId)); + } + + /** + * @param role 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}`. + * + * @return builder + * + */ + public Builder role(@Nullable Output role) { + $.role = role; + return this; + } + + /** + * @param role 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}`. + * + * @return builder + * + */ + public Builder role(String role) { + return role(Output.of(role)); + } + + public RepositoryGroupIamMemberState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamPolicyState.java new file mode 100644 index 0000000000..5a880d611a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupIamPolicyState.java @@ -0,0 +1,244 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupIamPolicyState extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupIamPolicyState Empty = new RepositoryGroupIamPolicyState(); + + @Import(name="codeRepositoryIndex") + private @Nullable Output codeRepositoryIndex; + + public Optional> codeRepositoryIndex() { + return Optional.ofNullable(this.codeRepositoryIndex); + } + + /** + * (Computed) The etag of the IAM policy. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return (Computed) The etag of the IAM policy. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * 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. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + */ + @Import(name="policyData") + private @Nullable Output policyData; + + /** + * @return The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + */ + public Optional> policyData() { + return Optional.ofNullable(this.policyData); + } + + /** + * 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. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return 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. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + @Import(name="repositoryGroupId") + private @Nullable Output repositoryGroupId; + + public Optional> repositoryGroupId() { + return Optional.ofNullable(this.repositoryGroupId); + } + + private RepositoryGroupIamPolicyState() {} + + private RepositoryGroupIamPolicyState(RepositoryGroupIamPolicyState $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.etag = $.etag; + this.location = $.location; + this.policyData = $.policyData; + this.project = $.project; + this.repositoryGroupId = $.repositoryGroupId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupIamPolicyState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupIamPolicyState $; + + public Builder() { + $ = new RepositoryGroupIamPolicyState(); + } + + public Builder(RepositoryGroupIamPolicyState defaults) { + $ = new RepositoryGroupIamPolicyState(Objects.requireNonNull(defaults)); + } + + public Builder codeRepositoryIndex(@Nullable Output codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + return codeRepositoryIndex(Output.of(codeRepositoryIndex)); + } + + /** + * @param etag (Computed) The etag of the IAM policy. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag (Computed) The etag of the IAM policy. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param policyData The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + * @return builder + * + */ + public Builder policyData(@Nullable Output policyData) { + $.policyData = policyData; + return this; + } + + /** + * @param policyData The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + * @return builder + * + */ + public Builder policyData(String policyData) { + return policyData(Output.of(policyData)); + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project 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. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public Builder repositoryGroupId(@Nullable Output repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + public Builder repositoryGroupId(String repositoryGroupId) { + return repositoryGroupId(Output.of(repositoryGroupId)); + } + + public RepositoryGroupIamPolicyState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupRepositoryArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupRepositoryArgs.java new file mode 100644 index 0000000000..dd248ae17a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupRepositoryArgs.java @@ -0,0 +1,141 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + + +public final class RepositoryGroupRepositoryArgs extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupRepositoryArgs Empty = new RepositoryGroupRepositoryArgs(); + + /** + * Required. The Git branch pattern used for indexing in RE2 syntax. + * See https://github.com/google/re2/wiki/syntax for syntax. + * + * *** + * + */ + @Import(name="branchPattern", required=true) + private Output branchPattern; + + /** + * @return Required. The Git branch pattern used for indexing in RE2 syntax. + * See https://github.com/google/re2/wiki/syntax for syntax. + * + * *** + * + */ + public Output branchPattern() { + return this.branchPattern; + } + + /** + * Required. The DeveloperConnect repository full resource name, relative resource name + * or resource URL to be indexed. + * + */ + @Import(name="resource", required=true) + private Output resource; + + /** + * @return Required. The DeveloperConnect repository full resource name, relative resource name + * or resource URL to be indexed. + * + */ + public Output resource() { + return this.resource; + } + + private RepositoryGroupRepositoryArgs() {} + + private RepositoryGroupRepositoryArgs(RepositoryGroupRepositoryArgs $) { + this.branchPattern = $.branchPattern; + this.resource = $.resource; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupRepositoryArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupRepositoryArgs $; + + public Builder() { + $ = new RepositoryGroupRepositoryArgs(); + } + + public Builder(RepositoryGroupRepositoryArgs defaults) { + $ = new RepositoryGroupRepositoryArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param branchPattern Required. The Git branch pattern used for indexing in RE2 syntax. + * See https://github.com/google/re2/wiki/syntax for syntax. + * + * *** + * + * @return builder + * + */ + public Builder branchPattern(Output branchPattern) { + $.branchPattern = branchPattern; + return this; + } + + /** + * @param branchPattern Required. The Git branch pattern used for indexing in RE2 syntax. + * See https://github.com/google/re2/wiki/syntax for syntax. + * + * *** + * + * @return builder + * + */ + public Builder branchPattern(String branchPattern) { + return branchPattern(Output.of(branchPattern)); + } + + /** + * @param resource Required. The DeveloperConnect repository full resource name, relative resource name + * or resource URL to be indexed. + * + * @return builder + * + */ + public Builder resource(Output resource) { + $.resource = resource; + return this; + } + + /** + * @param resource Required. The DeveloperConnect repository full resource name, relative resource name + * or resource URL to be indexed. + * + * @return builder + * + */ + public Builder resource(String resource) { + return resource(Output.of(resource)); + } + + public RepositoryGroupRepositoryArgs build() { + if ($.branchPattern == null) { + throw new MissingRequiredPropertyException("RepositoryGroupRepositoryArgs", "branchPattern"); + } + if ($.resource == null) { + throw new MissingRequiredPropertyException("RepositoryGroupRepositoryArgs", "resource"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupState.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupState.java new file mode 100644 index 0000000000..0fdb70615e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/inputs/RepositoryGroupState.java @@ -0,0 +1,459 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.gemini.inputs.RepositoryGroupRepositoryArgs; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryGroupState extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryGroupState Empty = new RepositoryGroupState(); + + /** + * Required. Id of the Code Repository Index. + * + */ + @Import(name="codeRepositoryIndex") + private @Nullable Output codeRepositoryIndex; + + /** + * @return Required. Id of the Code Repository Index. + * + */ + public Optional> codeRepositoryIndex() { + return Optional.ofNullable(this.codeRepositoryIndex); + } + + /** + * Output only. Create time stamp + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. Create time stamp + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location of the Code Repository Index, for example `us-central1`. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location of the Code Repository Index, for example `us-central1`. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Immutable. Identifier. name of resource + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Immutable. Identifier. name of resource + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + @Import(name="project") + private @Nullable Output project; + + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * Required. List of repositories to group + * Structure is documented below. + * + */ + @Import(name="repositories") + private @Nullable Output> repositories; + + /** + * @return Required. List of repositories to group + * Structure is documented below. + * + */ + public Optional>> repositories() { + return Optional.ofNullable(this.repositories); + } + + /** + * Required. Id of the Repository Group. + * + */ + @Import(name="repositoryGroupId") + private @Nullable Output repositoryGroupId; + + /** + * @return Required. Id of the Repository Group. + * + */ + public Optional> repositoryGroupId() { + return Optional.ofNullable(this.repositoryGroupId); + } + + /** + * Output only. Update time stamp + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Output only. Update time stamp + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private RepositoryGroupState() {} + + private RepositoryGroupState(RepositoryGroupState $) { + this.codeRepositoryIndex = $.codeRepositoryIndex; + this.createTime = $.createTime; + this.effectiveLabels = $.effectiveLabels; + this.labels = $.labels; + this.location = $.location; + this.name = $.name; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.repositories = $.repositories; + this.repositoryGroupId = $.repositoryGroupId; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryGroupState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryGroupState $; + + public Builder() { + $ = new RepositoryGroupState(); + } + + public Builder(RepositoryGroupState defaults) { + $ = new RepositoryGroupState(Objects.requireNonNull(defaults)); + } + + /** + * @param codeRepositoryIndex Required. Id of the Code Repository Index. + * + * @return builder + * + */ + public Builder codeRepositoryIndex(@Nullable Output codeRepositoryIndex) { + $.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + + /** + * @param codeRepositoryIndex Required. Id of the Code Repository Index. + * + * @return builder + * + */ + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + return codeRepositoryIndex(Output.of(codeRepositoryIndex)); + } + + /** + * @param createTime Output only. Create time stamp + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. Create time stamp + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location of the Code Repository Index, for example `us-central1`. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the Code Repository Index, for example `us-central1`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name Immutable. Identifier. name of resource + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Immutable. Identifier. name of resource + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param repositories Required. List of repositories to group + * Structure is documented below. + * + * @return builder + * + */ + public Builder repositories(@Nullable Output> repositories) { + $.repositories = repositories; + return this; + } + + /** + * @param repositories Required. List of repositories to group + * Structure is documented below. + * + * @return builder + * + */ + public Builder repositories(List repositories) { + return repositories(Output.of(repositories)); + } + + /** + * @param repositories Required. List of repositories to group + * Structure is documented below. + * + * @return builder + * + */ + public Builder repositories(RepositoryGroupRepositoryArgs... repositories) { + return repositories(List.of(repositories)); + } + + /** + * @param repositoryGroupId Required. Id of the Repository Group. + * + * @return builder + * + */ + public Builder repositoryGroupId(@Nullable Output repositoryGroupId) { + $.repositoryGroupId = repositoryGroupId; + return this; + } + + /** + * @param repositoryGroupId Required. Id of the Repository Group. + * + * @return builder + * + */ + public Builder repositoryGroupId(String repositoryGroupId) { + return repositoryGroupId(Output.of(repositoryGroupId)); + } + + /** + * @param updateTime Output only. Update time stamp + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Output only. Update time stamp + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public RepositoryGroupState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/GetRepositoryGroupIamPolicyResult.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/GetRepositoryGroupIamPolicyResult.java new file mode 100644 index 0000000000..393e615999 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/GetRepositoryGroupIamPolicyResult.java @@ -0,0 +1,166 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetRepositoryGroupIamPolicyResult { + private String codeRepositoryIndex; + /** + * @return (Computed) The etag of the IAM policy. + * + */ + private String etag; + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + private String id; + private String location; + /** + * @return (Required only by `gcp.gemini.RepositoryGroupIamPolicy`) The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + */ + private String policyData; + private String project; + private String repositoryGroupId; + + private GetRepositoryGroupIamPolicyResult() {} + public String codeRepositoryIndex() { + return this.codeRepositoryIndex; + } + /** + * @return (Computed) The etag of the IAM policy. + * + */ + public String etag() { + return this.etag; + } + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + public String id() { + return this.id; + } + public String location() { + return this.location; + } + /** + * @return (Required only by `gcp.gemini.RepositoryGroupIamPolicy`) The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + * + */ + public String policyData() { + return this.policyData; + } + public String project() { + return this.project; + } + public String repositoryGroupId() { + return this.repositoryGroupId; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetRepositoryGroupIamPolicyResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String codeRepositoryIndex; + private String etag; + private String id; + private String location; + private String policyData; + private String project; + private String repositoryGroupId; + public Builder() {} + public Builder(GetRepositoryGroupIamPolicyResult defaults) { + Objects.requireNonNull(defaults); + this.codeRepositoryIndex = defaults.codeRepositoryIndex; + this.etag = defaults.etag; + this.id = defaults.id; + this.location = defaults.location; + this.policyData = defaults.policyData; + this.project = defaults.project; + this.repositoryGroupId = defaults.repositoryGroupId; + } + + @CustomType.Setter + public Builder codeRepositoryIndex(String codeRepositoryIndex) { + if (codeRepositoryIndex == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyResult", "codeRepositoryIndex"); + } + this.codeRepositoryIndex = codeRepositoryIndex; + return this; + } + @CustomType.Setter + public Builder etag(String etag) { + if (etag == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyResult", "etag"); + } + this.etag = etag; + return this; + } + @CustomType.Setter + public Builder id(String id) { + if (id == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyResult", "id"); + } + this.id = id; + return this; + } + @CustomType.Setter + public Builder location(String location) { + if (location == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyResult", "location"); + } + this.location = location; + return this; + } + @CustomType.Setter + public Builder policyData(String policyData) { + if (policyData == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyResult", "policyData"); + } + this.policyData = policyData; + return this; + } + @CustomType.Setter + public Builder project(String project) { + if (project == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyResult", "project"); + } + this.project = project; + return this; + } + @CustomType.Setter + public Builder repositoryGroupId(String repositoryGroupId) { + if (repositoryGroupId == null) { + throw new MissingRequiredPropertyException("GetRepositoryGroupIamPolicyResult", "repositoryGroupId"); + } + this.repositoryGroupId = repositoryGroupId; + return this; + } + public GetRepositoryGroupIamPolicyResult build() { + final var _resultValue = new GetRepositoryGroupIamPolicyResult(); + _resultValue.codeRepositoryIndex = codeRepositoryIndex; + _resultValue.etag = etag; + _resultValue.id = id; + _resultValue.location = location; + _resultValue.policyData = policyData; + _resultValue.project = project; + _resultValue.repositoryGroupId = repositoryGroupId; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/RepositoryGroupIamBindingCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/RepositoryGroupIamBindingCondition.java new file mode 100644 index 0000000000..f200694c04 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/RepositoryGroupIamBindingCondition.java @@ -0,0 +1,80 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RepositoryGroupIamBindingCondition { + private @Nullable String description; + private String expression; + private String title; + + private RepositoryGroupIamBindingCondition() {} + public Optional description() { + return Optional.ofNullable(this.description); + } + public String expression() { + return this.expression; + } + public String title() { + return this.title; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RepositoryGroupIamBindingCondition defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String description; + private String expression; + private String title; + public Builder() {} + public Builder(RepositoryGroupIamBindingCondition defaults) { + Objects.requireNonNull(defaults); + this.description = defaults.description; + this.expression = defaults.expression; + this.title = defaults.title; + } + + @CustomType.Setter + public Builder description(@Nullable String description) { + + this.description = description; + return this; + } + @CustomType.Setter + public Builder expression(String expression) { + if (expression == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamBindingCondition", "expression"); + } + this.expression = expression; + return this; + } + @CustomType.Setter + public Builder title(String title) { + if (title == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamBindingCondition", "title"); + } + this.title = title; + return this; + } + public RepositoryGroupIamBindingCondition build() { + final var _resultValue = new RepositoryGroupIamBindingCondition(); + _resultValue.description = description; + _resultValue.expression = expression; + _resultValue.title = title; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/RepositoryGroupIamMemberCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/RepositoryGroupIamMemberCondition.java new file mode 100644 index 0000000000..1476a65baa --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/RepositoryGroupIamMemberCondition.java @@ -0,0 +1,80 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class RepositoryGroupIamMemberCondition { + private @Nullable String description; + private String expression; + private String title; + + private RepositoryGroupIamMemberCondition() {} + public Optional description() { + return Optional.ofNullable(this.description); + } + public String expression() { + return this.expression; + } + public String title() { + return this.title; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RepositoryGroupIamMemberCondition defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String description; + private String expression; + private String title; + public Builder() {} + public Builder(RepositoryGroupIamMemberCondition defaults) { + Objects.requireNonNull(defaults); + this.description = defaults.description; + this.expression = defaults.expression; + this.title = defaults.title; + } + + @CustomType.Setter + public Builder description(@Nullable String description) { + + this.description = description; + return this; + } + @CustomType.Setter + public Builder expression(String expression) { + if (expression == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamMemberCondition", "expression"); + } + this.expression = expression; + return this; + } + @CustomType.Setter + public Builder title(String title) { + if (title == null) { + throw new MissingRequiredPropertyException("RepositoryGroupIamMemberCondition", "title"); + } + this.title = title; + return this; + } + public RepositoryGroupIamMemberCondition build() { + final var _resultValue = new RepositoryGroupIamMemberCondition(); + _resultValue.description = description; + _resultValue.expression = expression; + _resultValue.title = title; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/RepositoryGroupRepository.java b/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/RepositoryGroupRepository.java new file mode 100644 index 0000000000..c79bcd6736 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/gemini/outputs/RepositoryGroupRepository.java @@ -0,0 +1,89 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.gemini.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class RepositoryGroupRepository { + /** + * @return Required. The Git branch pattern used for indexing in RE2 syntax. + * See https://github.com/google/re2/wiki/syntax for syntax. + * + * *** + * + */ + private String branchPattern; + /** + * @return Required. The DeveloperConnect repository full resource name, relative resource name + * or resource URL to be indexed. + * + */ + private String resource; + + private RepositoryGroupRepository() {} + /** + * @return Required. The Git branch pattern used for indexing in RE2 syntax. + * See https://github.com/google/re2/wiki/syntax for syntax. + * + * *** + * + */ + public String branchPattern() { + return this.branchPattern; + } + /** + * @return Required. The DeveloperConnect repository full resource name, relative resource name + * or resource URL to be indexed. + * + */ + public String resource() { + return this.resource; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(RepositoryGroupRepository defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String branchPattern; + private String resource; + public Builder() {} + public Builder(RepositoryGroupRepository defaults) { + Objects.requireNonNull(defaults); + this.branchPattern = defaults.branchPattern; + this.resource = defaults.resource; + } + + @CustomType.Setter + public Builder branchPattern(String branchPattern) { + if (branchPattern == null) { + throw new MissingRequiredPropertyException("RepositoryGroupRepository", "branchPattern"); + } + this.branchPattern = branchPattern; + return this; + } + @CustomType.Setter + public Builder resource(String resource) { + if (resource == null) { + throw new MissingRequiredPropertyException("RepositoryGroupRepository", "resource"); + } + this.resource = resource; + return this; + } + public RepositoryGroupRepository build() { + final var _resultValue = new RepositoryGroupRepository(); + _resultValue.branchPattern = branchPattern; + _resultValue.resource = resource; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipBinding.java index 4f865c733c..f88fabb622 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipBinding.java @@ -71,7 +71,7 @@ * .build()); * * var membership = new Membership("membership", MembershipArgs.builder() - * .membershipId("tf-test-membership_9106") + * .membershipId("tf-test-membership_27169") * .endpoint(MembershipEndpointArgs.builder() * .gkeCluster(MembershipEndpointGkeClusterArgs.builder() * .resourceLink(primary.id().applyValue(id -> String.format("//container.googleapis.com/%s", id))) @@ -82,11 +82,11 @@ * .build()); * * var scope = new Scope("scope", ScopeArgs.builder() - * .scopeId("tf-test-scope_27169") + * .scopeId("tf-test-scope_75223") * .build()); * * var membershipBinding = new MembershipBinding("membershipBinding", MembershipBindingArgs.builder() - * .membershipBindingId("tf-test-membership-binding_75223") + * .membershipBindingId("tf-test-membership-binding_41819") * .scope(scope.name()) * .membershipId(membership.membershipId()) * .location("global") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipRbacRoleBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipRbacRoleBinding.java index 7411312e86..6b5de181dd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipRbacRoleBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/MembershipRbacRoleBinding.java @@ -63,7 +63,7 @@ * .build()); * * var membership = new Membership("membership", MembershipArgs.builder() - * .membershipId("tf-test-membership_41819") + * .membershipId("tf-test-membership_75092") * .endpoint(MembershipEndpointArgs.builder() * .gkeCluster(MembershipEndpointGkeClusterArgs.builder() * .resourceLink(primary.id().applyValue(id -> String.format("//container.googleapis.com/%s", id))) @@ -76,7 +76,7 @@ * final var project = OrganizationsFunctions.getProject(); * * var membershipRbacRoleBinding = new MembershipRbacRoleBinding("membershipRbacRoleBinding", MembershipRbacRoleBindingArgs.builder() - * .membershipRbacRoleBindingId("tf-test-membership-rbac-role-binding_75092") + * .membershipRbacRoleBindingId("tf-test-membership-rbac-role-binding_2605") * .membershipId(membership.membershipId()) * .user(String.format("service-%s}{@literal @}{@code gcp-sa-anthossupport.iam.gserviceaccount.com", project.applyValue(getProjectResult -> getProjectResult.number()))) * .role(MembershipRbacRoleBindingRoleArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/Namespace.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/Namespace.java index aba8d93ba3..521e6f2f91 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/Namespace.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/Namespace.java @@ -56,11 +56,11 @@ * * public static void stack(Context ctx) { * var scope = new Scope("scope", ScopeArgs.builder() - * .scopeId("tf-test-scope_2605") + * .scopeId("tf-test-scope_34535") * .build()); * * var namespace = new Namespace("namespace", NamespaceArgs.builder() - * .scopeNamespaceId("tf-test-namespace_34535") + * .scopeNamespaceId("tf-test-namespace_22375") * .scopeId(scope.scopeId()) * .scope(scope.name()) * .namespaceLabels(Map.ofEntries( diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/ScopeRbacRoleBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/ScopeRbacRoleBinding.java index f4ce48e51f..484d1b7665 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/ScopeRbacRoleBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/ScopeRbacRoleBinding.java @@ -58,11 +58,11 @@ * * public static void stack(Context ctx) }{{@code * var scope = new Scope("scope", ScopeArgs.builder() - * .scopeId("tf-test-scope_22375") + * .scopeId("tf-test-scope_29439") * .build()); * * var scopeRbacRoleBinding = new ScopeRbacRoleBinding("scopeRbacRoleBinding", ScopeRbacRoleBindingArgs.builder() - * .scopeRbacRoleBindingId("tf-test-scope-rbac-role-binding_29439") + * .scopeRbacRoleBindingId("tf-test-scope-rbac-role-binding_87786") * .scopeId(scope.scopeId()) * .user("test-email}{@literal @}{@code gmail.com") * .role(ScopeRbacRoleBindingRoleArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.java index 815163aa05..618cd64f4d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/inputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgs.java @@ -17,7 +17,7 @@ public final class FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControll /** * Configures the manner in which the template library is installed on the cluster. - * Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + * Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. * */ @Import(name="installation") @@ -25,7 +25,7 @@ public final class FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControll /** * @return Configures the manner in which the template library is installed on the cluster. - * Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + * Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. * */ public Optional> installation() { @@ -58,7 +58,7 @@ public Builder(FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHu /** * @param installation Configures the manner in which the template library is installed on the cluster. - * Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + * Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. * * @return builder * @@ -70,7 +70,7 @@ public Builder installation(@Nullable Output installation) { /** * @param installation Configures the manner in which the template library is installed on the cluster. - * Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + * Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/inputs/FeatureMembershipConfigmanagementConfigSyncArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/inputs/FeatureMembershipConfigmanagementConfigSyncArgs.java index f4b4c087d5..ae6ae85e31 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/inputs/FeatureMembershipConfigmanagementConfigSyncArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/inputs/FeatureMembershipConfigmanagementConfigSyncArgs.java @@ -49,14 +49,14 @@ public Optional> git( } /** - * 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. + * 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. * */ @Import(name="metricsGcpServiceAccountEmail") private @Nullable Output metricsGcpServiceAccountEmail; /** - * @return 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. + * @return 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. * */ public Optional> metricsGcpServiceAccountEmail() { @@ -83,14 +83,14 @@ public Optional> oci( } /** - * 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. + * 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. * */ @Import(name="preventDrift") private @Nullable Output preventDrift; /** - * @return 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. + * @return 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. * */ public Optional> preventDrift() { @@ -112,6 +112,21 @@ public Optional> sourceFormat() { return Optional.ofNullable(this.sourceFormat); } + /** + * 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`. + * + */ + @Import(name="stopSyncing") + private @Nullable Output stopSyncing; + + /** + * @return 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`. + * + */ + public Optional> stopSyncing() { + return Optional.ofNullable(this.stopSyncing); + } + private FeatureMembershipConfigmanagementConfigSyncArgs() {} private FeatureMembershipConfigmanagementConfigSyncArgs(FeatureMembershipConfigmanagementConfigSyncArgs $) { @@ -121,6 +136,7 @@ private FeatureMembershipConfigmanagementConfigSyncArgs(FeatureMembershipConfigm this.oci = $.oci; this.preventDrift = $.preventDrift; this.sourceFormat = $.sourceFormat; + this.stopSyncing = $.stopSyncing; } public static Builder builder() { @@ -184,7 +200,7 @@ public Builder git(FeatureMembershipConfigmanagementConfigSyncGitArgs git) { } /** - * @param metricsGcpServiceAccountEmail 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. + * @param metricsGcpServiceAccountEmail 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. * * @return builder * @@ -195,7 +211,7 @@ public Builder metricsGcpServiceAccountEmail(@Nullable Output metricsGcp } /** - * @param metricsGcpServiceAccountEmail 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. + * @param metricsGcpServiceAccountEmail 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. * * @return builder * @@ -230,7 +246,7 @@ public Builder oci(FeatureMembershipConfigmanagementConfigSyncOciArgs oci) { } /** - * @param preventDrift 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. + * @param preventDrift 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. * * @return builder * @@ -241,7 +257,7 @@ public Builder preventDrift(@Nullable Output preventDrift) { } /** - * @param preventDrift 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. + * @param preventDrift 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. * * @return builder * @@ -271,6 +287,27 @@ public Builder sourceFormat(String sourceFormat) { return sourceFormat(Output.of(sourceFormat)); } + /** + * @param stopSyncing 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`. + * + * @return builder + * + */ + public Builder stopSyncing(@Nullable Output stopSyncing) { + $.stopSyncing = stopSyncing; + return this; + } + + /** + * @param stopSyncing 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`. + * + * @return builder + * + */ + public Builder stopSyncing(Boolean stopSyncing) { + return stopSyncing(Output.of(stopSyncing)); + } + public FeatureMembershipConfigmanagementConfigSyncArgs build() { return $; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/outputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/outputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary.java index 0b274493ad..5539297a9b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/outputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/outputs/FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary.java @@ -13,7 +13,7 @@ public final class FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary { /** * @return Configures the manner in which the template library is installed on the cluster. - * Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + * Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. * */ private @Nullable String installation; @@ -21,7 +21,7 @@ public final class FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControll private FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary() {} /** * @return Configures the manner in which the template library is installed on the cluster. - * Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + * Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. * */ public Optional installation() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/outputs/FeatureMembershipConfigmanagementConfigSync.java b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/outputs/FeatureMembershipConfigmanagementConfigSync.java index 1b717b994a..ca8bf2173a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/gkehub/outputs/FeatureMembershipConfigmanagementConfigSync.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/gkehub/outputs/FeatureMembershipConfigmanagementConfigSync.java @@ -25,7 +25,7 @@ public final class FeatureMembershipConfigmanagementConfigSync { */ private @Nullable FeatureMembershipConfigmanagementConfigSyncGit git; /** - * @return 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. + * @return 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. * */ private @Nullable String metricsGcpServiceAccountEmail; @@ -37,7 +37,7 @@ public final class FeatureMembershipConfigmanagementConfigSync { */ private @Nullable FeatureMembershipConfigmanagementConfigSyncOci oci; /** - * @return 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. + * @return 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. * */ private @Nullable Boolean preventDrift; @@ -46,6 +46,11 @@ public final class FeatureMembershipConfigmanagementConfigSync { * */ private @Nullable String sourceFormat; + /** + * @return 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`. + * + */ + private @Nullable Boolean stopSyncing; private FeatureMembershipConfigmanagementConfigSync() {} /** @@ -63,7 +68,7 @@ public Optional git() { return Optional.ofNullable(this.git); } /** - * @return 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. + * @return 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. * */ public Optional metricsGcpServiceAccountEmail() { @@ -79,7 +84,7 @@ public Optional oci() { return Optional.ofNullable(this.oci); } /** - * @return 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. + * @return 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. * */ public Optional preventDrift() { @@ -92,6 +97,13 @@ public Optional preventDrift() { public Optional sourceFormat() { return Optional.ofNullable(this.sourceFormat); } + /** + * @return 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`. + * + */ + public Optional stopSyncing() { + return Optional.ofNullable(this.stopSyncing); + } public static Builder builder() { return new Builder(); @@ -108,6 +120,7 @@ public static final class Builder { private @Nullable FeatureMembershipConfigmanagementConfigSyncOci oci; private @Nullable Boolean preventDrift; private @Nullable String sourceFormat; + private @Nullable Boolean stopSyncing; public Builder() {} public Builder(FeatureMembershipConfigmanagementConfigSync defaults) { Objects.requireNonNull(defaults); @@ -117,6 +130,7 @@ public Builder(FeatureMembershipConfigmanagementConfigSync defaults) { this.oci = defaults.oci; this.preventDrift = defaults.preventDrift; this.sourceFormat = defaults.sourceFormat; + this.stopSyncing = defaults.stopSyncing; } @CustomType.Setter @@ -155,6 +169,12 @@ public Builder sourceFormat(@Nullable String sourceFormat) { this.sourceFormat = sourceFormat; return this; } + @CustomType.Setter + public Builder stopSyncing(@Nullable Boolean stopSyncing) { + + this.stopSyncing = stopSyncing; + return this; + } public FeatureMembershipConfigmanagementConfigSync build() { final var _resultValue = new FeatureMembershipConfigmanagementConfigSync(); _resultValue.enabled = enabled; @@ -163,6 +183,7 @@ public FeatureMembershipConfigmanagementConfigSync build() { _resultValue.oci = oci; _resultValue.preventDrift = preventDrift; _resultValue.sourceFormat = sourceFormat; + _resultValue.stopSyncing = stopSyncing; return _resultValue; } } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/FoldersPolicyBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/FoldersPolicyBinding.java index 6a815be2df..b435bfda84 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/iam/FoldersPolicyBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/FoldersPolicyBinding.java @@ -18,6 +18,14 @@ import javax.annotation.Nullable; /** + * A policy binding to a folder + * + * To get more information about FoldersPolicyBinding, see: + * + * * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/folders.locations.policyBindings) + * * How-to Guides + * * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + * * ## Example Usage * * ### Iam Folders Policy Binding diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/OrganizationsPolicyBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/OrganizationsPolicyBinding.java index 96687804c0..ac04e10799 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/iam/OrganizationsPolicyBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/OrganizationsPolicyBinding.java @@ -18,6 +18,14 @@ import javax.annotation.Nullable; /** + * A policy binding to an organizations + * + * To get more information about OrganizationsPolicyBinding, see: + * + * * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.policyBindings) + * * How-to Guides + * * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + * * ## Example Usage * * ### Iam Organizations Policy Binding diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/PrincipalAccessBoundaryPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/PrincipalAccessBoundaryPolicy.java index 751b4a8d08..4d282ea16d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/iam/PrincipalAccessBoundaryPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/PrincipalAccessBoundaryPolicy.java @@ -17,6 +17,14 @@ import javax.annotation.Nullable; /** + * An IAM Principal Access Boundary Policy resource + * + * To get more information about PrincipalAccessBoundaryPolicy, see: + * + * * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.principalAccessBoundaryPolicies) + * * How-to Guides + * * [Create and apply Principal Access Boundaries](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create) + * * ## Example Usage * * ### Iam Principal Access Boundary Policy diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/ProjectsPolicyBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/ProjectsPolicyBinding.java new file mode 100644 index 0000000000..8a3df4a9d7 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/ProjectsPolicyBinding.java @@ -0,0 +1,407 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.iam.ProjectsPolicyBindingArgs; +import com.pulumi.gcp.iam.inputs.ProjectsPolicyBindingState; +import com.pulumi.gcp.iam.outputs.ProjectsPolicyBindingCondition; +import com.pulumi.gcp.iam.outputs.ProjectsPolicyBindingTarget; +import java.lang.String; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * A policy binding to a Project + * + * To get more information about ProjectsPolicyBinding, see: + * + * * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/projects.locations.policyBindings) + * * How-to Guides + * * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + * + * ## Example Usage + * + * ### Iam Projects Policy Binding + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.organizations.OrganizationsFunctions;
+ * import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
+ * import com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicy;
+ * import com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicyArgs;
+ * import com.pulumi.gcp.iam.ProjectsPolicyBinding;
+ * import com.pulumi.gcp.iam.ProjectsPolicyBindingArgs;
+ * import com.pulumi.gcp.iam.inputs.ProjectsPolicyBindingTargetArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         final var project = OrganizationsFunctions.getProject();
+ * 
+ *         var pabPolicy = new PrincipalAccessBoundaryPolicy("pabPolicy", PrincipalAccessBoundaryPolicyArgs.builder()
+ *             .organization("123456789")
+ *             .location("global")
+ *             .displayName("test project binding")
+ *             .principalAccessBoundaryPolicyId("my-pab-policy")
+ *             .build());
+ * 
+ *         var my_project_binding = new ProjectsPolicyBinding("my-project-binding", ProjectsPolicyBindingArgs.builder()
+ *             .project(project.applyValue(getProjectResult -> getProjectResult.projectId()))
+ *             .location("global")
+ *             .displayName("test project binding")
+ *             .policyKind("PRINCIPAL_ACCESS_BOUNDARY")
+ *             .policyBindingId("test-project-binding")
+ *             .policy(pabPolicy.principalAccessBoundaryPolicyId().applyValue(principalAccessBoundaryPolicyId -> String.format("organizations/123456789/locations/global/principalAccessBoundaryPolicies/%s", principalAccessBoundaryPolicyId)))
+ *             .target(ProjectsPolicyBindingTargetArgs.builder()
+ *                 .principalSet(String.format("//cloudresourcemanager.googleapis.com/projects/%s", project.applyValue(getProjectResult -> getProjectResult.projectId())))
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * ProjectsPolicyBinding can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}}` + * + * * `{{project}}/{{location}}/{{policy_binding_id}}` + * + * * `{{location}}/{{policy_binding_id}}` + * + * When using the `pulumi import` command, ProjectsPolicyBinding can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{project}}/{{location}}/{{policy_binding_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{location}}/{{policy_binding_id}} + * ``` + * + */ +@ResourceType(type="gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding") +public class ProjectsPolicyBinding extends com.pulumi.resources.CustomResource { + /** + * Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + */ + @Export(name="annotations", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> annotations; + + /** + * @return Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + */ + public Output>> annotations() { + return Codegen.optional(this.annotations); + } + /** + * Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + */ + @Export(name="condition", refs={ProjectsPolicyBindingCondition.class}, tree="[0]") + private Output condition; + + /** + * @return Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + */ + public Output> condition() { + return Codegen.optional(this.condition); + } + /** + * Output only. The time when the policy binding was created. + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Output only. The time when the policy binding was created. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + */ + @Export(name="displayName", refs={String.class}, tree="[0]") + private Output displayName; + + /** + * @return Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + */ + public Output> displayName() { + return Codegen.optional(this.displayName); + } + @Export(name="effectiveAnnotations", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveAnnotations; + + public Output> effectiveAnnotations() { + return this.effectiveAnnotations; + } + /** + * Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + * + */ + @Export(name="etag", refs={String.class}, tree="[0]") + private Output etag; + + /** + * @return Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + * + */ + public Output etag() { + return this.etag; + } + /** + * The location of the Policy Binding + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return The location of the Policy Binding + * + */ + public Output location() { + return this.location; + } + /** + * The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + * + */ + public Output name() { + return this.name; + } + /** + * Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + */ + @Export(name="policy", refs={String.class}, tree="[0]") + private Output policy; + + /** + * @return Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + */ + public Output policy() { + return this.policy; + } + /** + * The Policy Binding ID. + * + */ + @Export(name="policyBindingId", refs={String.class}, tree="[0]") + private Output policyBindingId; + + /** + * @return The Policy Binding ID. + * + */ + public Output policyBindingId() { + return this.policyBindingId; + } + /** + * Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + */ + @Export(name="policyKind", refs={String.class}, tree="[0]") + private Output policyKind; + + /** + * @return Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + */ + public Output> policyKind() { + return Codegen.optional(this.policyKind); + } + /** + * Output only. The globally unique ID of the policy to be bound. + * + */ + @Export(name="policyUid", refs={String.class}, tree="[0]") + private Output policyUid; + + /** + * @return Output only. The globally unique ID of the policy to be bound. + * + */ + public Output policyUid() { + return this.policyUid; + } + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + public Output project() { + return this.project; + } + /** + * Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + */ + @Export(name="target", refs={ProjectsPolicyBindingTarget.class}, tree="[0]") + private Output target; + + /** + * @return Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + */ + public Output target() { + return this.target; + } + /** + * Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + * + */ + @Export(name="uid", refs={String.class}, tree="[0]") + private Output uid; + + /** + * @return Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + * + */ + public Output uid() { + return this.uid; + } + /** + * Output only. The time when the policy binding was most recently updated. + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return Output only. The time when the policy binding was most recently updated. + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public ProjectsPolicyBinding(java.lang.String name) { + this(name, ProjectsPolicyBindingArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public ProjectsPolicyBinding(java.lang.String name, ProjectsPolicyBindingArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public ProjectsPolicyBinding(java.lang.String name, ProjectsPolicyBindingArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private ProjectsPolicyBinding(java.lang.String name, Output id, @Nullable ProjectsPolicyBindingState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding", name, state, makeResourceOptions(options, id), false); + } + + private static ProjectsPolicyBindingArgs makeArgs(ProjectsPolicyBindingArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? ProjectsPolicyBindingArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static ProjectsPolicyBinding get(java.lang.String name, Output id, @Nullable ProjectsPolicyBindingState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new ProjectsPolicyBinding(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/ProjectsPolicyBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/ProjectsPolicyBindingArgs.java new file mode 100644 index 0000000000..fdf174e792 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/ProjectsPolicyBindingArgs.java @@ -0,0 +1,431 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.iam.inputs.ProjectsPolicyBindingConditionArgs; +import com.pulumi.gcp.iam.inputs.ProjectsPolicyBindingTargetArgs; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ProjectsPolicyBindingArgs extends com.pulumi.resources.ResourceArgs { + + public static final ProjectsPolicyBindingArgs Empty = new ProjectsPolicyBindingArgs(); + + /** + * Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + */ + @Import(name="annotations") + private @Nullable Output> annotations; + + /** + * @return Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + */ + public Optional>> annotations() { + return Optional.ofNullable(this.annotations); + } + + /** + * Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + */ + @Import(name="condition") + private @Nullable Output condition; + + /** + * @return Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + */ + public Optional> condition() { + return Optional.ofNullable(this.condition); + } + + /** + * Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * The location of the Policy Binding + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location of the Policy Binding + * + */ + public Output location() { + return this.location; + } + + /** + * Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + */ + @Import(name="policy", required=true) + private Output policy; + + /** + * @return Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + */ + public Output policy() { + return this.policy; + } + + /** + * The Policy Binding ID. + * + */ + @Import(name="policyBindingId", required=true) + private Output policyBindingId; + + /** + * @return The Policy Binding ID. + * + */ + public Output policyBindingId() { + return this.policyBindingId; + } + + /** + * Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + */ + @Import(name="policyKind") + private @Nullable Output policyKind; + + /** + * @return Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + */ + public Optional> policyKind() { + return Optional.ofNullable(this.policyKind); + } + + @Import(name="project") + private @Nullable Output project; + + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + */ + @Import(name="target", required=true) + private Output target; + + /** + * @return Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + */ + public Output target() { + return this.target; + } + + private ProjectsPolicyBindingArgs() {} + + private ProjectsPolicyBindingArgs(ProjectsPolicyBindingArgs $) { + this.annotations = $.annotations; + this.condition = $.condition; + this.displayName = $.displayName; + this.location = $.location; + this.policy = $.policy; + this.policyBindingId = $.policyBindingId; + this.policyKind = $.policyKind; + this.project = $.project; + this.target = $.target; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ProjectsPolicyBindingArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ProjectsPolicyBindingArgs $; + + public Builder() { + $ = new ProjectsPolicyBindingArgs(); + } + + public Builder(ProjectsPolicyBindingArgs defaults) { + $ = new ProjectsPolicyBindingArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param annotations Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + * @return builder + * + */ + public Builder annotations(@Nullable Output> annotations) { + $.annotations = annotations; + return this; + } + + /** + * @param annotations Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + * @return builder + * + */ + public Builder annotations(Map annotations) { + return annotations(Output.of(annotations)); + } + + /** + * @param condition Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + * @return builder + * + */ + public Builder condition(@Nullable Output condition) { + $.condition = condition; + return this; + } + + /** + * @param condition Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + * @return builder + * + */ + public Builder condition(ProjectsPolicyBindingConditionArgs condition) { + return condition(Output.of(condition)); + } + + /** + * @param displayName Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param location The location of the Policy Binding + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the Policy Binding + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param policy Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + * @return builder + * + */ + public Builder policy(Output policy) { + $.policy = policy; + return this; + } + + /** + * @param policy Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + * @return builder + * + */ + public Builder policy(String policy) { + return policy(Output.of(policy)); + } + + /** + * @param policyBindingId The Policy Binding ID. + * + * @return builder + * + */ + public Builder policyBindingId(Output policyBindingId) { + $.policyBindingId = policyBindingId; + return this; + } + + /** + * @param policyBindingId The Policy Binding ID. + * + * @return builder + * + */ + public Builder policyBindingId(String policyBindingId) { + return policyBindingId(Output.of(policyBindingId)); + } + + /** + * @param policyKind Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + * @return builder + * + */ + public Builder policyKind(@Nullable Output policyKind) { + $.policyKind = policyKind; + return this; + } + + /** + * @param policyKind Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + * @return builder + * + */ + public Builder policyKind(String policyKind) { + return policyKind(Output.of(policyKind)); + } + + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param target Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + * @return builder + * + */ + public Builder target(Output target) { + $.target = target; + return this; + } + + /** + * @param target Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + * @return builder + * + */ + public Builder target(ProjectsPolicyBindingTargetArgs target) { + return target(Output.of(target)); + } + + public ProjectsPolicyBindingArgs build() { + if ($.location == null) { + throw new MissingRequiredPropertyException("ProjectsPolicyBindingArgs", "location"); + } + if ($.policy == null) { + throw new MissingRequiredPropertyException("ProjectsPolicyBindingArgs", "policy"); + } + if ($.policyBindingId == null) { + throw new MissingRequiredPropertyException("ProjectsPolicyBindingArgs", "policyBindingId"); + } + if ($.target == null) { + throw new MissingRequiredPropertyException("ProjectsPolicyBindingArgs", "target"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/ProjectsPolicyBindingConditionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/ProjectsPolicyBindingConditionArgs.java new file mode 100644 index 0000000000..8e7ada1d0c --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/ProjectsPolicyBindingConditionArgs.java @@ -0,0 +1,194 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ProjectsPolicyBindingConditionArgs extends com.pulumi.resources.ResourceArgs { + + public static final ProjectsPolicyBindingConditionArgs Empty = new ProjectsPolicyBindingConditionArgs(); + + /** + * Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * Textual representation of an expression in Common Expression Language syntax. + * + */ + @Import(name="expression") + private @Nullable Output expression; + + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ + public Optional> expression() { + return Optional.ofNullable(this.expression); + } + + /** + * Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * 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. + * + */ + @Import(name="title") + private @Nullable Output title; + + /** + * @return 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. + * + */ + public Optional> title() { + return Optional.ofNullable(this.title); + } + + private ProjectsPolicyBindingConditionArgs() {} + + private ProjectsPolicyBindingConditionArgs(ProjectsPolicyBindingConditionArgs $) { + this.description = $.description; + this.expression = $.expression; + this.location = $.location; + this.title = $.title; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ProjectsPolicyBindingConditionArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ProjectsPolicyBindingConditionArgs $; + + public Builder() { + $ = new ProjectsPolicyBindingConditionArgs(); + } + + public Builder(ProjectsPolicyBindingConditionArgs defaults) { + $ = new ProjectsPolicyBindingConditionArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param description Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param expression Textual representation of an expression in Common Expression Language syntax. + * + * @return builder + * + */ + public Builder expression(@Nullable Output expression) { + $.expression = expression; + return this; + } + + /** + * @param expression Textual representation of an expression in Common Expression Language syntax. + * + * @return builder + * + */ + public Builder expression(String expression) { + return expression(Output.of(expression)); + } + + /** + * @param location Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param title 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. + * + * @return builder + * + */ + public Builder title(@Nullable Output title) { + $.title = title; + return this; + } + + /** + * @param title 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. + * + * @return builder + * + */ + public Builder title(String title) { + return title(Output.of(title)); + } + + public ProjectsPolicyBindingConditionArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/ProjectsPolicyBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/ProjectsPolicyBindingState.java new file mode 100644 index 0000000000..2588502bc2 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/ProjectsPolicyBindingState.java @@ -0,0 +1,657 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.iam.inputs.ProjectsPolicyBindingConditionArgs; +import com.pulumi.gcp.iam.inputs.ProjectsPolicyBindingTargetArgs; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ProjectsPolicyBindingState extends com.pulumi.resources.ResourceArgs { + + public static final ProjectsPolicyBindingState Empty = new ProjectsPolicyBindingState(); + + /** + * Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + */ + @Import(name="annotations") + private @Nullable Output> annotations; + + /** + * @return Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + */ + public Optional>> annotations() { + return Optional.ofNullable(this.annotations); + } + + /** + * Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + */ + @Import(name="condition") + private @Nullable Output condition; + + /** + * @return Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + */ + public Optional> condition() { + return Optional.ofNullable(this.condition); + } + + /** + * Output only. The time when the policy binding was created. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. The time when the policy binding was created. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + @Import(name="effectiveAnnotations") + private @Nullable Output> effectiveAnnotations; + + public Optional>> effectiveAnnotations() { + return Optional.ofNullable(this.effectiveAnnotations); + } + + /** + * Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * The location of the Policy Binding + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location of the Policy Binding + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + */ + @Import(name="policy") + private @Nullable Output policy; + + /** + * @return Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + */ + public Optional> policy() { + return Optional.ofNullable(this.policy); + } + + /** + * The Policy Binding ID. + * + */ + @Import(name="policyBindingId") + private @Nullable Output policyBindingId; + + /** + * @return The Policy Binding ID. + * + */ + public Optional> policyBindingId() { + return Optional.ofNullable(this.policyBindingId); + } + + /** + * Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + */ + @Import(name="policyKind") + private @Nullable Output policyKind; + + /** + * @return Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + */ + public Optional> policyKind() { + return Optional.ofNullable(this.policyKind); + } + + /** + * Output only. The globally unique ID of the policy to be bound. + * + */ + @Import(name="policyUid") + private @Nullable Output policyUid; + + /** + * @return Output only. The globally unique ID of the policy to be bound. + * + */ + public Optional> policyUid() { + return Optional.ofNullable(this.policyUid); + } + + @Import(name="project") + private @Nullable Output project; + + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + */ + @Import(name="target") + private @Nullable Output target; + + /** + * @return Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + */ + public Optional> target() { + return Optional.ofNullable(this.target); + } + + /** + * Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + * + */ + @Import(name="uid") + private @Nullable Output uid; + + /** + * @return Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + * + */ + public Optional> uid() { + return Optional.ofNullable(this.uid); + } + + /** + * Output only. The time when the policy binding was most recently updated. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Output only. The time when the policy binding was most recently updated. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private ProjectsPolicyBindingState() {} + + private ProjectsPolicyBindingState(ProjectsPolicyBindingState $) { + this.annotations = $.annotations; + this.condition = $.condition; + this.createTime = $.createTime; + this.displayName = $.displayName; + this.effectiveAnnotations = $.effectiveAnnotations; + this.etag = $.etag; + this.location = $.location; + this.name = $.name; + this.policy = $.policy; + this.policyBindingId = $.policyBindingId; + this.policyKind = $.policyKind; + this.policyUid = $.policyUid; + this.project = $.project; + this.target = $.target; + this.uid = $.uid; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ProjectsPolicyBindingState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ProjectsPolicyBindingState $; + + public Builder() { + $ = new ProjectsPolicyBindingState(); + } + + public Builder(ProjectsPolicyBindingState defaults) { + $ = new ProjectsPolicyBindingState(Objects.requireNonNull(defaults)); + } + + /** + * @param annotations Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + * @return builder + * + */ + public Builder annotations(@Nullable Output> annotations) { + $.annotations = annotations; + return this; + } + + /** + * @param annotations Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + * + * @return builder + * + */ + public Builder annotations(Map annotations) { + return annotations(Output.of(annotations)); + } + + /** + * @param condition Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + * @return builder + * + */ + public Builder condition(@Nullable Output condition) { + $.condition = condition; + return this; + } + + /** + * @param condition Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + * + * @return builder + * + */ + public Builder condition(ProjectsPolicyBindingConditionArgs condition) { + return condition(Output.of(condition)); + } + + /** + * @param createTime Output only. The time when the policy binding was created. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. The time when the policy binding was created. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param displayName Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName Optional. The description of the policy binding. Must be less than or equal to 63 characters. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + public Builder effectiveAnnotations(@Nullable Output> effectiveAnnotations) { + $.effectiveAnnotations = effectiveAnnotations; + return this; + } + + public Builder effectiveAnnotations(Map effectiveAnnotations) { + return effectiveAnnotations(Output.of(effectiveAnnotations)); + } + + /** + * @param etag Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param location The location of the Policy Binding + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location of the Policy Binding + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param policy Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + * @return builder + * + */ + public Builder policy(@Nullable Output policy) { + $.policy = policy; + return this; + } + + /** + * @param policy Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + * + * @return builder + * + */ + public Builder policy(String policy) { + return policy(Output.of(policy)); + } + + /** + * @param policyBindingId The Policy Binding ID. + * + * @return builder + * + */ + public Builder policyBindingId(@Nullable Output policyBindingId) { + $.policyBindingId = policyBindingId; + return this; + } + + /** + * @param policyBindingId The Policy Binding ID. + * + * @return builder + * + */ + public Builder policyBindingId(String policyBindingId) { + return policyBindingId(Output.of(policyBindingId)); + } + + /** + * @param policyKind Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + * @return builder + * + */ + public Builder policyKind(@Nullable Output policyKind) { + $.policyKind = policyKind; + return this; + } + + /** + * @param policyKind Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + * + * @return builder + * + */ + public Builder policyKind(String policyKind) { + return policyKind(Output.of(policyKind)); + } + + /** + * @param policyUid Output only. The globally unique ID of the policy to be bound. + * + * @return builder + * + */ + public Builder policyUid(@Nullable Output policyUid) { + $.policyUid = policyUid; + return this; + } + + /** + * @param policyUid Output only. The globally unique ID of the policy to be bound. + * + * @return builder + * + */ + public Builder policyUid(String policyUid) { + return policyUid(Output.of(policyUid)); + } + + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param target Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + * @return builder + * + */ + public Builder target(@Nullable Output target) { + $.target = target; + return this; + } + + /** + * @param target Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + * + * @return builder + * + */ + public Builder target(ProjectsPolicyBindingTargetArgs target) { + return target(Output.of(target)); + } + + /** + * @param uid Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + * + * @return builder + * + */ + public Builder uid(@Nullable Output uid) { + $.uid = uid; + return this; + } + + /** + * @param uid Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + * + * @return builder + * + */ + public Builder uid(String uid) { + return uid(Output.of(uid)); + } + + /** + * @param updateTime Output only. The time when the policy binding was most recently updated. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Output only. The time when the policy binding was most recently updated. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public ProjectsPolicyBindingState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/ProjectsPolicyBindingTargetArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/ProjectsPolicyBindingTargetArgs.java new file mode 100644 index 0000000000..5ec2951460 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/ProjectsPolicyBindingTargetArgs.java @@ -0,0 +1,95 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ProjectsPolicyBindingTargetArgs extends com.pulumi.resources.ResourceArgs { + + public static final ProjectsPolicyBindingTargetArgs Empty = new ProjectsPolicyBindingTargetArgs(); + + /** + * Required. Immutable. The resource name of the policy to be bound. + * The binding parent and policy must belong to the same Organization (or Project). + * + * *** + * + */ + @Import(name="principalSet") + private @Nullable Output principalSet; + + /** + * @return Required. Immutable. The resource name of the policy to be bound. + * The binding parent and policy must belong to the same Organization (or Project). + * + * *** + * + */ + public Optional> principalSet() { + return Optional.ofNullable(this.principalSet); + } + + private ProjectsPolicyBindingTargetArgs() {} + + private ProjectsPolicyBindingTargetArgs(ProjectsPolicyBindingTargetArgs $) { + this.principalSet = $.principalSet; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ProjectsPolicyBindingTargetArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ProjectsPolicyBindingTargetArgs $; + + public Builder() { + $ = new ProjectsPolicyBindingTargetArgs(); + } + + public Builder(ProjectsPolicyBindingTargetArgs defaults) { + $ = new ProjectsPolicyBindingTargetArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param principalSet Required. Immutable. The resource name of the policy to be bound. + * The binding parent and policy must belong to the same Organization (or Project). + * + * *** + * + * @return builder + * + */ + public Builder principalSet(@Nullable Output principalSet) { + $.principalSet = principalSet; + return this; + } + + /** + * @param principalSet Required. Immutable. The resource name of the policy to be bound. + * The binding parent and policy must belong to the same Organization (or Project). + * + * *** + * + * @return builder + * + */ + public Builder principalSet(String principalSet) { + return principalSet(Output.of(principalSet)); + } + + public ProjectsPolicyBindingTargetArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/ProjectsPolicyBindingCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/ProjectsPolicyBindingCondition.java new file mode 100644 index 0000000000..cf3dc7782b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/ProjectsPolicyBindingCondition.java @@ -0,0 +1,120 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ProjectsPolicyBindingCondition { + /** + * @return Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ + private @Nullable String description; + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ + private @Nullable String expression; + /** + * @return Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + * + */ + private @Nullable String location; + /** + * @return 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. + * + */ + private @Nullable String title; + + private ProjectsPolicyBindingCondition() {} + /** + * @return Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ + public Optional description() { + return Optional.ofNullable(this.description); + } + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ + public Optional expression() { + return Optional.ofNullable(this.expression); + } + /** + * @return Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + * + */ + public Optional location() { + return Optional.ofNullable(this.location); + } + /** + * @return 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. + * + */ + public Optional title() { + return Optional.ofNullable(this.title); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ProjectsPolicyBindingCondition defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String description; + private @Nullable String expression; + private @Nullable String location; + private @Nullable String title; + public Builder() {} + public Builder(ProjectsPolicyBindingCondition defaults) { + Objects.requireNonNull(defaults); + this.description = defaults.description; + this.expression = defaults.expression; + this.location = defaults.location; + this.title = defaults.title; + } + + @CustomType.Setter + public Builder description(@Nullable String description) { + + this.description = description; + return this; + } + @CustomType.Setter + public Builder expression(@Nullable String expression) { + + this.expression = expression; + return this; + } + @CustomType.Setter + public Builder location(@Nullable String location) { + + this.location = location; + return this; + } + @CustomType.Setter + public Builder title(@Nullable String title) { + + this.title = title; + return this; + } + public ProjectsPolicyBindingCondition build() { + final var _resultValue = new ProjectsPolicyBindingCondition(); + _resultValue.description = description; + _resultValue.expression = expression; + _resultValue.location = location; + _resultValue.title = title; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/ProjectsPolicyBindingTarget.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/ProjectsPolicyBindingTarget.java new file mode 100644 index 0000000000..88b0d4611d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/ProjectsPolicyBindingTarget.java @@ -0,0 +1,63 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ProjectsPolicyBindingTarget { + /** + * @return Required. Immutable. The resource name of the policy to be bound. + * The binding parent and policy must belong to the same Organization (or Project). + * + * *** + * + */ + private @Nullable String principalSet; + + private ProjectsPolicyBindingTarget() {} + /** + * @return Required. Immutable. The resource name of the policy to be bound. + * The binding parent and policy must belong to the same Organization (or Project). + * + * *** + * + */ + public Optional principalSet() { + return Optional.ofNullable(this.principalSet); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ProjectsPolicyBindingTarget defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String principalSet; + public Builder() {} + public Builder(ProjectsPolicyBindingTarget defaults) { + Objects.requireNonNull(defaults); + this.principalSet = defaults.principalSet; + } + + @CustomType.Setter + public Builder principalSet(@Nullable String principalSet) { + + this.principalSet = principalSet; + return this; + } + public ProjectsPolicyBindingTarget build() { + final var _resultValue = new ProjectsPolicyBindingTarget(); + _resultValue.principalSet = principalSet; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iap/TunnelDestGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/iap/TunnelDestGroup.java index 7086c47f4a..f8d61b1508 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/iap/TunnelDestGroup.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/iap/TunnelDestGroup.java @@ -53,7 +53,7 @@ * public static void stack(Context ctx) { * var destGroup = new TunnelDestGroup("destGroup", TunnelDestGroupArgs.builder() * .region("us-central1") - * .groupName("testgroup_87786") + * .groupName("testgroup_2067") * .cidrs( * "10.1.0.0/16", * "192.168.10.0/24") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/ManagedZone.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/ManagedZone.java index 5c2ffe2141..d2c516ff35 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/ManagedZone.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/ManagedZone.java @@ -67,8 +67,8 @@ * * public static void stack(Context ctx) }{{@code * var targetProject = new Project("targetProject", ProjectArgs.builder() - * .projectId("tf-test_2067") - * .name("tf-test_40785") + * .projectId("tf-test_40785") + * .name("tf-test_79169") * .orgId("123456789") * .billingAccount("000000-0000000-0000000-000000") * .deletionPolicy("DELETE") @@ -101,8 +101,8 @@ * .build()); * * var zone = new ManagedZone("zone", ManagedZoneArgs.builder() - * .name("tf-test-dns_79169") - * .dnsName("private_56529.example.com.") + * .name("tf-test-dns_56529") + * .dnsName("private_75413.example.com.") * .visibility("private") * .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder() * .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/inputs/ConnectionAuthConfigAdditionalVariableArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/inputs/ConnectionAuthConfigAdditionalVariableArgs.java index a164213b23..814c818ef0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/inputs/ConnectionAuthConfigAdditionalVariableArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/inputs/ConnectionAuthConfigAdditionalVariableArgs.java @@ -36,7 +36,7 @@ public Optional> booleanValue() { } /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. * */ @@ -44,7 +44,7 @@ public Optional> booleanValue() { private @Nullable Output encryptionKeyValue; /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ @@ -165,7 +165,7 @@ public Builder booleanValue(Boolean booleanValue) { } /** - * @param encryptionKeyValue Encription key value of configVariable. + * @param encryptionKeyValue Encryption key value of configVariable. * Structure is documented below. * * @return builder @@ -177,7 +177,7 @@ public Builder encryptionKeyValue(@Nullable Output> booleanValue() { } /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. * */ @@ -44,7 +44,7 @@ public Optional> booleanValue() { private @Nullable Output encryptionKeyValue; /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ @@ -165,7 +165,7 @@ public Builder booleanValue(Boolean booleanValue) { } /** - * @param encryptionKeyValue Encription key value of configVariable. + * @param encryptionKeyValue Encryption key value of configVariable. * Structure is documented below. * * @return builder @@ -177,7 +177,7 @@ public Builder encryptionKeyValue(@Nullable Output> booleanValue() { } /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. * */ @@ -44,7 +44,7 @@ public Optional> booleanValue() { private @Nullable Output encryptionKeyValue; /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ @@ -165,7 +165,7 @@ public Builder booleanValue(Boolean booleanValue) { } /** - * @param encryptionKeyValue Encription key value of configVariable. + * @param encryptionKeyValue Encryption key value of configVariable. * Structure is documented below. * * @return builder @@ -177,7 +177,7 @@ public Builder encryptionKeyValue(@Nullable Output> booleanValue() { } /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. * */ @@ -44,7 +44,7 @@ public Optional> booleanValue() { private @Nullable Output encryptionKeyValue; /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ @@ -165,7 +165,7 @@ public Builder booleanValue(Boolean booleanValue) { } /** - * @param encryptionKeyValue Encription key value of configVariable. + * @param encryptionKeyValue Encryption key value of configVariable. * Structure is documented below. * * @return builder @@ -177,7 +177,7 @@ public Builder encryptionKeyValue(@Nullable Output> booleanValue() { } /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. * */ @@ -44,7 +44,7 @@ public Optional> booleanValue() { private @Nullable Output encryptionKeyValue; /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ @@ -165,7 +165,7 @@ public Builder booleanValue(Boolean booleanValue) { } /** - * @param encryptionKeyValue Encription key value of configVariable. + * @param encryptionKeyValue Encryption key value of configVariable. * Structure is documented below. * * @return builder @@ -177,7 +177,7 @@ public Builder encryptionKeyValue(@Nullable Output booleanValue() { return Optional.ofNullable(this.booleanValue); } /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionConfigVariable.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionConfigVariable.java index a2c80024af..5074e12d4a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionConfigVariable.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionConfigVariable.java @@ -22,7 +22,7 @@ public final class ConnectionConfigVariable { */ private @Nullable Boolean booleanValue; /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ @@ -58,7 +58,7 @@ public Optional booleanValue() { return Optional.ofNullable(this.booleanValue); } /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionEventingConfigAdditionalVariable.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionEventingConfigAdditionalVariable.java index 8fd5cd665f..3b87c2195d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionEventingConfigAdditionalVariable.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionEventingConfigAdditionalVariable.java @@ -22,7 +22,7 @@ public final class ConnectionEventingConfigAdditionalVariable { */ private @Nullable Boolean booleanValue; /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ @@ -58,7 +58,7 @@ public Optional booleanValue() { return Optional.ofNullable(this.booleanValue); } /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionEventingConfigAuthConfigAdditionalVariable.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionEventingConfigAuthConfigAdditionalVariable.java index 641db29216..98debc8686 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionEventingConfigAuthConfigAdditionalVariable.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionEventingConfigAuthConfigAdditionalVariable.java @@ -22,7 +22,7 @@ public final class ConnectionEventingConfigAuthConfigAdditionalVariable { */ private @Nullable Boolean booleanValue; /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ @@ -58,7 +58,7 @@ public Optional booleanValue() { return Optional.ofNullable(this.booleanValue); } /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionSslConfigAdditionalVariable.java b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionSslConfigAdditionalVariable.java index 7caf6c568b..dce33339c7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionSslConfigAdditionalVariable.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/integrationconnectors/outputs/ConnectionSslConfigAdditionalVariable.java @@ -22,7 +22,7 @@ public final class ConnectionSslConfigAdditionalVariable { */ private @Nullable Boolean booleanValue; /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ @@ -58,7 +58,7 @@ public Optional booleanValue() { return Optional.ofNullable(this.booleanValue); } /** - * @return Encription key value of configVariable. + * @return Encryption key value of configVariable. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/inputs/AlertPolicyConditionConditionPrometheusQueryLanguageArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/inputs/AlertPolicyConditionConditionPrometheusQueryLanguageArgs.java index f89c130df4..5ab2287512 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/inputs/AlertPolicyConditionConditionPrometheusQueryLanguageArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/inputs/AlertPolicyConditionConditionPrometheusQueryLanguageArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -28,8 +29,6 @@ public final class AlertPolicyConditionConditionPrometheusQueryLanguageArgs exte * This field is optional. If this field is not empty, then it must be a * valid Prometheus label name. * - * *** - * */ @Import(name="alertRule") private @Nullable Output alertRule; @@ -45,13 +44,18 @@ public final class AlertPolicyConditionConditionPrometheusQueryLanguageArgs exte * This field is optional. If this field is not empty, then it must be a * valid Prometheus label name. * - * *** - * */ public Optional> alertRule() { return Optional.ofNullable(this.alertRule); } + @Import(name="disableMetricValidation") + private @Nullable Output disableMetricValidation; + + public Optional> disableMetricValidation() { + return Optional.ofNullable(this.disableMetricValidation); + } + /** * Alerts are considered firing once their PromQL expression evaluated * to be "true" for this long. Alerts whose PromQL expression was not @@ -171,6 +175,7 @@ private AlertPolicyConditionConditionPrometheusQueryLanguageArgs() {} private AlertPolicyConditionConditionPrometheusQueryLanguageArgs(AlertPolicyConditionConditionPrometheusQueryLanguageArgs $) { this.alertRule = $.alertRule; + this.disableMetricValidation = $.disableMetricValidation; this.duration = $.duration; this.evaluationInterval = $.evaluationInterval; this.labels = $.labels; @@ -207,8 +212,6 @@ public Builder(AlertPolicyConditionConditionPrometheusQueryLanguageArgs defaults * This field is optional. If this field is not empty, then it must be a * valid Prometheus label name. * - * *** - * * @return builder * */ @@ -228,8 +231,6 @@ public Builder alertRule(@Nullable Output alertRule) { * This field is optional. If this field is not empty, then it must be a * valid Prometheus label name. * - * *** - * * @return builder * */ @@ -237,6 +238,15 @@ public Builder alertRule(String alertRule) { return alertRule(Output.of(alertRule)); } + public Builder disableMetricValidation(@Nullable Output disableMetricValidation) { + $.disableMetricValidation = disableMetricValidation; + return this; + } + + public Builder disableMetricValidation(Boolean disableMetricValidation) { + return disableMetricValidation(Output.of(disableMetricValidation)); + } + /** * @param duration Alerts are considered firing once their PromQL expression evaluated * to be "true" for this long. Alerts whose PromQL expression was not diff --git a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/outputs/AlertPolicyConditionConditionPrometheusQueryLanguage.java b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/outputs/AlertPolicyConditionConditionPrometheusQueryLanguage.java index f992423309..af29fc7645 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/outputs/AlertPolicyConditionConditionPrometheusQueryLanguage.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/outputs/AlertPolicyConditionConditionPrometheusQueryLanguage.java @@ -5,6 +5,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -24,10 +25,9 @@ public final class AlertPolicyConditionConditionPrometheusQueryLanguage { * This field is optional. If this field is not empty, then it must be a * valid Prometheus label name. * - * *** - * */ private @Nullable String alertRule; + private @Nullable Boolean disableMetricValidation; /** * @return Alerts are considered firing once their PromQL expression evaluated * to be "true" for this long. Alerts whose PromQL expression was not @@ -86,12 +86,13 @@ private AlertPolicyConditionConditionPrometheusQueryLanguage() {} * This field is optional. If this field is not empty, then it must be a * valid Prometheus label name. * - * *** - * */ public Optional alertRule() { return Optional.ofNullable(this.alertRule); } + public Optional disableMetricValidation() { + return Optional.ofNullable(this.disableMetricValidation); + } /** * @return Alerts are considered firing once their PromQL expression evaluated * to be "true" for this long. Alerts whose PromQL expression was not @@ -158,6 +159,7 @@ public static Builder builder(AlertPolicyConditionConditionPrometheusQueryLangua @CustomType.Builder public static final class Builder { private @Nullable String alertRule; + private @Nullable Boolean disableMetricValidation; private @Nullable String duration; private @Nullable String evaluationInterval; private @Nullable Map labels; @@ -167,6 +169,7 @@ public Builder() {} public Builder(AlertPolicyConditionConditionPrometheusQueryLanguage defaults) { Objects.requireNonNull(defaults); this.alertRule = defaults.alertRule; + this.disableMetricValidation = defaults.disableMetricValidation; this.duration = defaults.duration; this.evaluationInterval = defaults.evaluationInterval; this.labels = defaults.labels; @@ -181,6 +184,12 @@ public Builder alertRule(@Nullable String alertRule) { return this; } @CustomType.Setter + public Builder disableMetricValidation(@Nullable Boolean disableMetricValidation) { + + this.disableMetricValidation = disableMetricValidation; + return this; + } + @CustomType.Setter public Builder duration(@Nullable String duration) { this.duration = duration; @@ -215,6 +224,7 @@ public Builder ruleGroup(@Nullable String ruleGroup) { public AlertPolicyConditionConditionPrometheusQueryLanguage build() { final var _resultValue = new AlertPolicyConditionConditionPrometheusQueryLanguage(); _resultValue.alertRule = alertRule; + _resultValue.disableMetricValidation = disableMetricValidation; _resultValue.duration = duration; _resultValue.evaluationInterval = evaluationInterval; _resultValue.labels = labels; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/ActiveDirectory.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/ActiveDirectory.java index 0d8bf082c6..a1d7821dd1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/ActiveDirectory.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/ActiveDirectory.java @@ -242,14 +242,14 @@ public Output> encryptDcConnections() { return Codegen.optional(this.encryptDcConnections); } /** - * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * */ @Export(name="kdcHostname", refs={String.class}, tree="[0]") private Output kdcHostname; /** - * @return Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * @return Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * */ public Output> kdcHostname() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/ActiveDirectoryArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/ActiveDirectoryArgs.java index 8b32dac326..dc09dc64ea 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/ActiveDirectoryArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/ActiveDirectoryArgs.java @@ -125,14 +125,14 @@ public Optional> encryptDcConnections() { } /** - * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * */ @Import(name="kdcHostname") private @Nullable Output kdcHostname; /** - * @return Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * @return Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * */ public Optional> kdcHostname() { @@ -560,7 +560,7 @@ public Builder encryptDcConnections(Boolean encryptDcConnections) { } /** - * @param kdcHostname Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * @param kdcHostname Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * * @return builder * @@ -571,7 +571,7 @@ public Builder kdcHostname(@Nullable Output kdcHostname) { } /** - * @param kdcHostname Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * @param kdcHostname Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/Volume.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/Volume.java index 40c0afb67c..eee30584ef 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/Volume.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/Volume.java @@ -568,14 +568,14 @@ public Output securityStyle() { return this.securityStyle; } /** - * Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + * Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. * */ @Export(name="serviceLevel", refs={String.class}, tree="[0]") private Output serviceLevel; /** - * @return Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + * @return Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. * */ public Output serviceLevel() { @@ -672,14 +672,14 @@ public Output stateDetails() { return this.stateDetails; } /** - * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * */ @Export(name="storagePool", refs={String.class}, tree="[0]") private Output storagePool; /** - * @return Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * @return Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * */ public Output storagePool() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/VolumeArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/VolumeArgs.java index d63e2e2ddd..055b3a922f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/VolumeArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/VolumeArgs.java @@ -365,14 +365,14 @@ public Optional> snapshotPolicy() { } /** - * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * */ @Import(name="storagePool", required=true) private Output storagePool; /** - * @return Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * @return Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * */ public Output storagePool() { @@ -951,7 +951,7 @@ public Builder snapshotPolicy(VolumeSnapshotPolicyArgs snapshotPolicy) { } /** - * @param storagePool Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * @param storagePool Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * * @return builder * @@ -962,7 +962,7 @@ public Builder storagePool(Output storagePool) { } /** - * @param storagePool Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * @param storagePool Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/ActiveDirectoryState.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/ActiveDirectoryState.java index 37c834b57f..60b7a72610 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/ActiveDirectoryState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/ActiveDirectoryState.java @@ -154,14 +154,14 @@ public Optional> encryptDcConnections() { } /** - * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * */ @Import(name="kdcHostname") private @Nullable Output kdcHostname; /** - * @return Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * @return Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * */ public Optional> kdcHostname() { @@ -683,7 +683,7 @@ public Builder encryptDcConnections(Boolean encryptDcConnections) { } /** - * @param kdcHostname Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * @param kdcHostname Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * * @return builder * @@ -694,7 +694,7 @@ public Builder kdcHostname(@Nullable Output kdcHostname) { } /** - * @param kdcHostname Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * @param kdcHostname Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeExportPolicyRuleArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeExportPolicyRuleArgs.java index 76a62819e1..4b897069f9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeExportPolicyRuleArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeExportPolicyRuleArgs.java @@ -34,14 +34,14 @@ public Optional> accessType() { } /** - * Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + * Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. * */ @Import(name="allowedClients") private @Nullable Output allowedClients; /** - * @return Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + * @return Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. * */ public Optional> allowedClients() { @@ -241,7 +241,7 @@ public Builder accessType(String accessType) { } /** - * @param allowedClients Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + * @param allowedClients Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. * * @return builder * @@ -252,7 +252,7 @@ public Builder allowedClients(@Nullable Output allowedClients) { } /** - * @param allowedClients Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + * @param allowedClients Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeState.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeState.java index 197f97a1d5..8f55233e6a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/inputs/VolumeState.java @@ -498,14 +498,14 @@ public Optional> securityStyle() { } /** - * Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + * Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. * */ @Import(name="serviceLevel") private @Nullable Output serviceLevel; /** - * @return Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + * @return Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. * */ public Optional> serviceLevel() { @@ -609,14 +609,14 @@ public Optional> stateDetails() { } /** - * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * */ @Import(name="storagePool") private @Nullable Output storagePool; /** - * @return Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * @return Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * */ public Optional> storagePool() { @@ -1430,7 +1430,7 @@ public Builder securityStyle(String securityStyle) { } /** - * @param serviceLevel Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + * @param serviceLevel Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. * * @return builder * @@ -1441,7 +1441,7 @@ public Builder serviceLevel(@Nullable Output serviceLevel) { } /** - * @param serviceLevel Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + * @param serviceLevel Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. * * @return builder * @@ -1594,7 +1594,7 @@ public Builder stateDetails(String stateDetails) { } /** - * @param storagePool Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * @param storagePool Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * * @return builder * @@ -1605,7 +1605,7 @@ public Builder storagePool(@Nullable Output storagePool) { } /** - * @param storagePool Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * @param storagePool Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/netapp/outputs/VolumeExportPolicyRule.java b/sdk/java/src/main/java/com/pulumi/gcp/netapp/outputs/VolumeExportPolicyRule.java index 6a6df33d75..81767813fe 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/netapp/outputs/VolumeExportPolicyRule.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/netapp/outputs/VolumeExportPolicyRule.java @@ -19,7 +19,7 @@ public final class VolumeExportPolicyRule { */ private @Nullable String accessType; /** - * @return Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + * @return Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. * */ private @Nullable String allowedClients; @@ -79,7 +79,7 @@ public Optional accessType() { return Optional.ofNullable(this.accessType); } /** - * @return Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + * @return Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. * */ public Optional allowedClients() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networkconnectivity/Spoke.java b/sdk/java/src/main/java/com/pulumi/gcp/networkconnectivity/Spoke.java index 78f6f326be..2bb703b529 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/networkconnectivity/Spoke.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/networkconnectivity/Spoke.java @@ -133,19 +133,19 @@ * * public static void stack(Context ctx) { * var network = new Network("network", NetworkArgs.builder() - * .name("tf-test-network_75413") + * .name("tf-test-network_55138") * .autoCreateSubnetworks(false) * .build()); * * var subnetwork = new Subnetwork("subnetwork", SubnetworkArgs.builder() - * .name("tf-test-subnet_55138") + * .name("tf-test-subnet_37559") * .ipCidrRange("10.0.0.0/28") * .region("us-central1") * .network(network.selfLink()) * .build()); * * var instance = new Instance("instance", InstanceArgs.builder() - * .name("tf-test-instance_37559") + * .name("tf-test-instance_91980") * .machineType("e2-medium") * .canIpForward(true) * .zone("us-central1-a") @@ -164,13 +164,13 @@ * .build()); * * var basicHub = new Hub("basicHub", HubArgs.builder() - * .name("tf-test-hub_91980") + * .name("tf-test-hub_37118") * .description("A sample hub") * .labels(Map.of("label-two", "value-one")) * .build()); * * var primary = new Spoke("primary", SpokeArgs.builder() - * .name("tf-test-name_37118") + * .name("tf-test-name_80332") * .location("us-central1") * .description("A sample spoke with a linked routher appliance instance") * .labels(Map.of("label-one", "value-one")) diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeployment.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeployment.java new file mode 100644 index 0000000000..4971be7497 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeployment.java @@ -0,0 +1,428 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.networksecurity.MirroringDeploymentArgs; +import com.pulumi.gcp.networksecurity.inputs.MirroringDeploymentState; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Network Security Mirroring Deployment Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.Network;
+ * import com.pulumi.gcp.compute.NetworkArgs;
+ * import com.pulumi.gcp.compute.Subnetwork;
+ * import com.pulumi.gcp.compute.SubnetworkArgs;
+ * import com.pulumi.gcp.compute.RegionHealthCheck;
+ * import com.pulumi.gcp.compute.RegionHealthCheckArgs;
+ * import com.pulumi.gcp.compute.inputs.RegionHealthCheckHttpHealthCheckArgs;
+ * import com.pulumi.gcp.compute.RegionBackendService;
+ * import com.pulumi.gcp.compute.RegionBackendServiceArgs;
+ * import com.pulumi.gcp.compute.ForwardingRule;
+ * import com.pulumi.gcp.compute.ForwardingRuleArgs;
+ * import com.pulumi.gcp.networksecurity.MirroringDeploymentGroup;
+ * import com.pulumi.gcp.networksecurity.MirroringDeploymentGroupArgs;
+ * import com.pulumi.gcp.networksecurity.MirroringDeployment;
+ * import com.pulumi.gcp.networksecurity.MirroringDeploymentArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var network = new Network("network", NetworkArgs.builder()
+ *             .name("example-network")
+ *             .autoCreateSubnetworks(false)
+ *             .build());
+ * 
+ *         var subnetwork = new Subnetwork("subnetwork", SubnetworkArgs.builder()
+ *             .name("example-subnet")
+ *             .region("us-central1")
+ *             .ipCidrRange("10.1.0.0/16")
+ *             .network(network.name())
+ *             .build());
+ * 
+ *         var healthCheck = new RegionHealthCheck("healthCheck", RegionHealthCheckArgs.builder()
+ *             .name("example-hc")
+ *             .region("us-central1")
+ *             .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()
+ *                 .port(80)
+ *                 .build())
+ *             .build());
+ * 
+ *         var backendService = new RegionBackendService("backendService", RegionBackendServiceArgs.builder()
+ *             .name("example-bs")
+ *             .region("us-central1")
+ *             .healthChecks(healthCheck.id())
+ *             .protocol("UDP")
+ *             .loadBalancingScheme("INTERNAL")
+ *             .build());
+ * 
+ *         var forwardingRule = new ForwardingRule("forwardingRule", ForwardingRuleArgs.builder()
+ *             .name("example-fwr")
+ *             .region("us-central1")
+ *             .network(network.name())
+ *             .subnetwork(subnetwork.name())
+ *             .backendService(backendService.id())
+ *             .loadBalancingScheme("INTERNAL")
+ *             .ports(6081)
+ *             .ipProtocol("UDP")
+ *             .isMirroringCollector(true)
+ *             .build());
+ * 
+ *         var deploymentGroup = new MirroringDeploymentGroup("deploymentGroup", MirroringDeploymentGroupArgs.builder()
+ *             .mirroringDeploymentGroupId("example-dg")
+ *             .location("global")
+ *             .network(network.id())
+ *             .build());
+ * 
+ *         var default_ = new MirroringDeployment("default", MirroringDeploymentArgs.builder()
+ *             .mirroringDeploymentId("example-deployment")
+ *             .location("us-central1-a")
+ *             .forwardingRule(forwardingRule.id())
+ *             .mirroringDeploymentGroup(deploymentGroup.id())
+ *             .labels(Map.of("foo", "bar"))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * MirroringDeployment can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}}` + * + * * `{{project}}/{{location}}/{{mirroring_deployment_id}}` + * + * * `{{location}}/{{mirroring_deployment_id}}` + * + * When using the `pulumi import` command, MirroringDeployment can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{project}}/{{location}}/{{mirroring_deployment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{location}}/{{mirroring_deployment_id}} + * ``` + * + */ +@ResourceType(type="gcp:networksecurity/mirroringDeployment:MirroringDeployment") +public class MirroringDeployment extends com.pulumi.resources.CustomResource { + /** + * Output only. [Output only] Create time stamp + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Output only. [Output only] Create time stamp + * + */ + public Output createTime() { + return this.createTime; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + */ + @Export(name="forwardingRule", refs={String.class}, tree="[0]") + private Output forwardingRule; + + /** + * @return Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + */ + public Output forwardingRule() { + return this.forwardingRule; + } + /** + * 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. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return 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 Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * 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`. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return 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`. + * + */ + public Output location() { + return this.location; + } + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + @Export(name="mirroringDeploymentGroup", refs={String.class}, tree="[0]") + private Output mirroringDeploymentGroup; + + /** + * @return Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + public Output mirroringDeploymentGroup() { + return this.mirroringDeploymentGroup; + } + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + */ + @Export(name="mirroringDeploymentId", refs={String.class}, tree="[0]") + private Output mirroringDeploymentId; + + /** + * @return Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + */ + public Output mirroringDeploymentId() { + return this.mirroringDeploymentId; + } + /** + * Immutable. Identifier. The name of the MirroringDeployment. + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Immutable. Identifier. The name of the MirroringDeployment. + * + */ + public Output name() { + return this.name; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + @Export(name="reconciling", refs={Boolean.class}, tree="[0]") + private Output reconciling; + + /** + * @return Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + public Output reconciling() { + return this.reconciling; + } + /** + * Output only. Current state of the deployment. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * OUT_OF_SYNC + * DELETE_FAILED + * + */ + @Export(name="state", refs={String.class}, tree="[0]") + private Output state; + + /** + * @return Output only. Current state of the deployment. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * OUT_OF_SYNC + * DELETE_FAILED + * + */ + public Output state() { + return this.state; + } + /** + * Output only. [Output only] Update time stamp + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return Output only. [Output only] Update time stamp + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public MirroringDeployment(java.lang.String name) { + this(name, MirroringDeploymentArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public MirroringDeployment(java.lang.String name, MirroringDeploymentArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public MirroringDeployment(java.lang.String name, MirroringDeploymentArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networksecurity/mirroringDeployment:MirroringDeployment", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private MirroringDeployment(java.lang.String name, Output id, @Nullable MirroringDeploymentState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networksecurity/mirroringDeployment:MirroringDeployment", name, state, makeResourceOptions(options, id), false); + } + + private static MirroringDeploymentArgs makeArgs(MirroringDeploymentArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? MirroringDeploymentArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static MirroringDeployment get(java.lang.String name, Output id, @Nullable MirroringDeploymentState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new MirroringDeployment(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeploymentArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeploymentArgs.java new file mode 100644 index 0000000000..3d17a46b3f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeploymentArgs.java @@ -0,0 +1,322 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringDeploymentArgs extends com.pulumi.resources.ResourceArgs { + + public static final MirroringDeploymentArgs Empty = new MirroringDeploymentArgs(); + + /** + * Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + */ + @Import(name="forwardingRule", required=true) + private Output forwardingRule; + + /** + * @return Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + */ + public Output forwardingRule() { + return this.forwardingRule; + } + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * 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`. + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return 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`. + * + */ + public Output location() { + return this.location; + } + + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + @Import(name="mirroringDeploymentGroup", required=true) + private Output mirroringDeploymentGroup; + + /** + * @return Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + public Output mirroringDeploymentGroup() { + return this.mirroringDeploymentGroup; + } + + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + */ + @Import(name="mirroringDeploymentId", required=true) + private Output mirroringDeploymentId; + + /** + * @return Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + */ + public Output mirroringDeploymentId() { + return this.mirroringDeploymentId; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private MirroringDeploymentArgs() {} + + private MirroringDeploymentArgs(MirroringDeploymentArgs $) { + this.forwardingRule = $.forwardingRule; + this.labels = $.labels; + this.location = $.location; + this.mirroringDeploymentGroup = $.mirroringDeploymentGroup; + this.mirroringDeploymentId = $.mirroringDeploymentId; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringDeploymentArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringDeploymentArgs $; + + public Builder() { + $ = new MirroringDeploymentArgs(); + } + + public Builder(MirroringDeploymentArgs defaults) { + $ = new MirroringDeploymentArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param forwardingRule Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + * @return builder + * + */ + public Builder forwardingRule(Output forwardingRule) { + $.forwardingRule = forwardingRule; + return this; + } + + /** + * @param forwardingRule Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + * @return builder + * + */ + public Builder forwardingRule(String forwardingRule) { + return forwardingRule(Output.of(forwardingRule)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param mirroringDeploymentGroup Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + * @return builder + * + */ + public Builder mirroringDeploymentGroup(Output mirroringDeploymentGroup) { + $.mirroringDeploymentGroup = mirroringDeploymentGroup; + return this; + } + + /** + * @param mirroringDeploymentGroup Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + * @return builder + * + */ + public Builder mirroringDeploymentGroup(String mirroringDeploymentGroup) { + return mirroringDeploymentGroup(Output.of(mirroringDeploymentGroup)); + } + + /** + * @param mirroringDeploymentId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringDeploymentId(Output mirroringDeploymentId) { + $.mirroringDeploymentId = mirroringDeploymentId; + return this; + } + + /** + * @param mirroringDeploymentId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringDeploymentId(String mirroringDeploymentId) { + return mirroringDeploymentId(Output.of(mirroringDeploymentId)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public MirroringDeploymentArgs build() { + if ($.forwardingRule == null) { + throw new MissingRequiredPropertyException("MirroringDeploymentArgs", "forwardingRule"); + } + if ($.location == null) { + throw new MissingRequiredPropertyException("MirroringDeploymentArgs", "location"); + } + if ($.mirroringDeploymentGroup == null) { + throw new MissingRequiredPropertyException("MirroringDeploymentArgs", "mirroringDeploymentGroup"); + } + if ($.mirroringDeploymentId == null) { + throw new MissingRequiredPropertyException("MirroringDeploymentArgs", "mirroringDeploymentId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeploymentGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeploymentGroup.java new file mode 100644 index 0000000000..d6e5969e50 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeploymentGroup.java @@ -0,0 +1,372 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.networksecurity.MirroringDeploymentGroupArgs; +import com.pulumi.gcp.networksecurity.inputs.MirroringDeploymentGroupState; +import com.pulumi.gcp.networksecurity.outputs.MirroringDeploymentGroupConnectedEndpointGroup; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Network Security Mirroring Deployment Group Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.Network;
+ * import com.pulumi.gcp.compute.NetworkArgs;
+ * import com.pulumi.gcp.networksecurity.MirroringDeploymentGroup;
+ * import com.pulumi.gcp.networksecurity.MirroringDeploymentGroupArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var network = new Network("network", NetworkArgs.builder()
+ *             .name("example-network")
+ *             .autoCreateSubnetworks(false)
+ *             .build());
+ * 
+ *         var default_ = new MirroringDeploymentGroup("default", MirroringDeploymentGroupArgs.builder()
+ *             .mirroringDeploymentGroupId("example-dg")
+ *             .location("global")
+ *             .network(network.id())
+ *             .labels(Map.of("foo", "bar"))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * MirroringDeploymentGroup can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}}` + * + * * `{{project}}/{{location}}/{{mirroring_deployment_group_id}}` + * + * * `{{location}}/{{mirroring_deployment_group_id}}` + * + * When using the `pulumi import` command, MirroringDeploymentGroup can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{project}}/{{location}}/{{mirroring_deployment_group_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{location}}/{{mirroring_deployment_group_id}} + * ``` + * + */ +@ResourceType(type="gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup") +public class MirroringDeploymentGroup extends com.pulumi.resources.CustomResource { + /** + * Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + * Structure is documented below. + * + */ + @Export(name="connectedEndpointGroups", refs={List.class,MirroringDeploymentGroupConnectedEndpointGroup.class}, tree="[0,1]") + private Output> connectedEndpointGroups; + + /** + * @return Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + * Structure is documented below. + * + */ + public Output> connectedEndpointGroups() { + return this.connectedEndpointGroups; + } + /** + * Output only. [Output only] Create time stamp + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Output only. [Output only] Create time stamp + * + */ + public Output createTime() { + return this.createTime; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * 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. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return 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 Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * 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`. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return 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`. + * + */ + public Output location() { + return this.location; + } + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + */ + @Export(name="mirroringDeploymentGroupId", refs={String.class}, tree="[0]") + private Output mirroringDeploymentGroupId; + + /** + * @return Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + */ + public Output mirroringDeploymentGroupId() { + return this.mirroringDeploymentGroupId; + } + /** + * (Output) + * Output only. A connected mirroring endpoint group. + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return (Output) + * Output only. A connected mirroring endpoint group. + * + */ + public Output name() { + return this.name; + } + /** + * Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + */ + @Export(name="network", refs={String.class}, tree="[0]") + private Output network; + + /** + * @return Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + */ + public Output network() { + return this.network; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + @Export(name="reconciling", refs={Boolean.class}, tree="[0]") + private Output reconciling; + + /** + * @return Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + public Output reconciling() { + return this.reconciling; + } + /** + * Output only. Current state of the deployment group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * + */ + @Export(name="state", refs={String.class}, tree="[0]") + private Output state; + + /** + * @return Output only. Current state of the deployment group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * + */ + public Output state() { + return this.state; + } + /** + * Output only. [Output only] Update time stamp + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return Output only. [Output only] Update time stamp + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public MirroringDeploymentGroup(java.lang.String name) { + this(name, MirroringDeploymentGroupArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public MirroringDeploymentGroup(java.lang.String name, MirroringDeploymentGroupArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public MirroringDeploymentGroup(java.lang.String name, MirroringDeploymentGroupArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private MirroringDeploymentGroup(java.lang.String name, Output id, @Nullable MirroringDeploymentGroupState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup", name, state, makeResourceOptions(options, id), false); + } + + private static MirroringDeploymentGroupArgs makeArgs(MirroringDeploymentGroupArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? MirroringDeploymentGroupArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static MirroringDeploymentGroup get(java.lang.String name, Output id, @Nullable MirroringDeploymentGroupState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new MirroringDeploymentGroup(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeploymentGroupArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeploymentGroupArgs.java new file mode 100644 index 0000000000..200b3b78ee --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringDeploymentGroupArgs.java @@ -0,0 +1,274 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringDeploymentGroupArgs extends com.pulumi.resources.ResourceArgs { + + public static final MirroringDeploymentGroupArgs Empty = new MirroringDeploymentGroupArgs(); + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * 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`. + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return 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`. + * + */ + public Output location() { + return this.location; + } + + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + */ + @Import(name="mirroringDeploymentGroupId", required=true) + private Output mirroringDeploymentGroupId; + + /** + * @return Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + */ + public Output mirroringDeploymentGroupId() { + return this.mirroringDeploymentGroupId; + } + + /** + * Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + */ + @Import(name="network", required=true) + private Output network; + + /** + * @return Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + */ + public Output network() { + return this.network; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private MirroringDeploymentGroupArgs() {} + + private MirroringDeploymentGroupArgs(MirroringDeploymentGroupArgs $) { + this.labels = $.labels; + this.location = $.location; + this.mirroringDeploymentGroupId = $.mirroringDeploymentGroupId; + this.network = $.network; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringDeploymentGroupArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringDeploymentGroupArgs $; + + public Builder() { + $ = new MirroringDeploymentGroupArgs(); + } + + public Builder(MirroringDeploymentGroupArgs defaults) { + $ = new MirroringDeploymentGroupArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param mirroringDeploymentGroupId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringDeploymentGroupId(Output mirroringDeploymentGroupId) { + $.mirroringDeploymentGroupId = mirroringDeploymentGroupId; + return this; + } + + /** + * @param mirroringDeploymentGroupId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringDeploymentGroupId(String mirroringDeploymentGroupId) { + return mirroringDeploymentGroupId(Output.of(mirroringDeploymentGroupId)); + } + + /** + * @param network Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + * @return builder + * + */ + public Builder network(Output network) { + $.network = network; + return this; + } + + /** + * @param network Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + * @return builder + * + */ + public Builder network(String network) { + return network(Output.of(network)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public MirroringDeploymentGroupArgs build() { + if ($.location == null) { + throw new MissingRequiredPropertyException("MirroringDeploymentGroupArgs", "location"); + } + if ($.mirroringDeploymentGroupId == null) { + throw new MissingRequiredPropertyException("MirroringDeploymentGroupArgs", "mirroringDeploymentGroupId"); + } + if ($.network == null) { + throw new MissingRequiredPropertyException("MirroringDeploymentGroupArgs", "network"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroup.java new file mode 100644 index 0000000000..712115b5cb --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroup.java @@ -0,0 +1,367 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.networksecurity.MirroringEndpointGroupArgs; +import com.pulumi.gcp.networksecurity.inputs.MirroringEndpointGroupState; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Network Security Mirroring Endpoint Group Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.Network;
+ * import com.pulumi.gcp.compute.NetworkArgs;
+ * import com.pulumi.gcp.networksecurity.MirroringDeploymentGroup;
+ * import com.pulumi.gcp.networksecurity.MirroringDeploymentGroupArgs;
+ * import com.pulumi.gcp.networksecurity.MirroringEndpointGroup;
+ * import com.pulumi.gcp.networksecurity.MirroringEndpointGroupArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var network = new Network("network", NetworkArgs.builder()
+ *             .name("example-network")
+ *             .autoCreateSubnetworks(false)
+ *             .build());
+ * 
+ *         var deploymentGroup = new MirroringDeploymentGroup("deploymentGroup", MirroringDeploymentGroupArgs.builder()
+ *             .mirroringDeploymentGroupId("example-dg")
+ *             .location("global")
+ *             .network(network.id())
+ *             .build());
+ * 
+ *         var default_ = new MirroringEndpointGroup("default", MirroringEndpointGroupArgs.builder()
+ *             .mirroringEndpointGroupId("example-eg")
+ *             .location("global")
+ *             .mirroringDeploymentGroup(deploymentGroup.id())
+ *             .labels(Map.of("foo", "bar"))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * MirroringEndpointGroup can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}}` + * + * * `{{project}}/{{location}}/{{mirroring_endpoint_group_id}}` + * + * * `{{location}}/{{mirroring_endpoint_group_id}}` + * + * When using the `pulumi import` command, MirroringEndpointGroup can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{project}}/{{location}}/{{mirroring_endpoint_group_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{location}}/{{mirroring_endpoint_group_id}} + * ``` + * + */ +@ResourceType(type="gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup") +public class MirroringEndpointGroup extends com.pulumi.resources.CustomResource { + /** + * Output only. [Output only] Create time stamp + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Output only. [Output only] Create time stamp + * + */ + public Output createTime() { + return this.createTime; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * 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. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return 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 Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * 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`. + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return 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`. + * + */ + public Output location() { + return this.location; + } + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + @Export(name="mirroringDeploymentGroup", refs={String.class}, tree="[0]") + private Output mirroringDeploymentGroup; + + /** + * @return Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + public Output mirroringDeploymentGroup() { + return this.mirroringDeploymentGroup; + } + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + */ + @Export(name="mirroringEndpointGroupId", refs={String.class}, tree="[0]") + private Output mirroringEndpointGroupId; + + /** + * @return Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + */ + public Output mirroringEndpointGroupId() { + return this.mirroringEndpointGroupId; + } + /** + * Immutable. Identifier. The name of the MirroringEndpointGroup. + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Immutable. Identifier. The name of the MirroringEndpointGroup. + * + */ + public Output name() { + return this.name; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + @Export(name="reconciling", refs={Boolean.class}, tree="[0]") + private Output reconciling; + + /** + * @return Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + public Output reconciling() { + return this.reconciling; + } + /** + * Output only. Current state of the endpoint group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CLOSED + * CREATING + * DELETING + * OUT_OF_SYNC + * + */ + @Export(name="state", refs={String.class}, tree="[0]") + private Output state; + + /** + * @return Output only. Current state of the endpoint group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CLOSED + * CREATING + * DELETING + * OUT_OF_SYNC + * + */ + public Output state() { + return this.state; + } + /** + * Output only. [Output only] Update time stamp + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return Output only. [Output only] Update time stamp + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public MirroringEndpointGroup(java.lang.String name) { + this(name, MirroringEndpointGroupArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public MirroringEndpointGroup(java.lang.String name, MirroringEndpointGroupArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public MirroringEndpointGroup(java.lang.String name, MirroringEndpointGroupArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private MirroringEndpointGroup(java.lang.String name, Output id, @Nullable MirroringEndpointGroupState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup", name, state, makeResourceOptions(options, id), false); + } + + private static MirroringEndpointGroupArgs makeArgs(MirroringEndpointGroupArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? MirroringEndpointGroupArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static MirroringEndpointGroup get(java.lang.String name, Output id, @Nullable MirroringEndpointGroupState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new MirroringEndpointGroup(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroupArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroupArgs.java new file mode 100644 index 0000000000..7844a2c783 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroupArgs.java @@ -0,0 +1,278 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringEndpointGroupArgs extends com.pulumi.resources.ResourceArgs { + + public static final MirroringEndpointGroupArgs Empty = new MirroringEndpointGroupArgs(); + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * 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`. + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return 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`. + * + */ + public Output location() { + return this.location; + } + + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + @Import(name="mirroringDeploymentGroup", required=true) + private Output mirroringDeploymentGroup; + + /** + * @return Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + public Output mirroringDeploymentGroup() { + return this.mirroringDeploymentGroup; + } + + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + */ + @Import(name="mirroringEndpointGroupId", required=true) + private Output mirroringEndpointGroupId; + + /** + * @return Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + */ + public Output mirroringEndpointGroupId() { + return this.mirroringEndpointGroupId; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private MirroringEndpointGroupArgs() {} + + private MirroringEndpointGroupArgs(MirroringEndpointGroupArgs $) { + this.labels = $.labels; + this.location = $.location; + this.mirroringDeploymentGroup = $.mirroringDeploymentGroup; + this.mirroringEndpointGroupId = $.mirroringEndpointGroupId; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringEndpointGroupArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringEndpointGroupArgs $; + + public Builder() { + $ = new MirroringEndpointGroupArgs(); + } + + public Builder(MirroringEndpointGroupArgs defaults) { + $ = new MirroringEndpointGroupArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param mirroringDeploymentGroup Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + * @return builder + * + */ + public Builder mirroringDeploymentGroup(Output mirroringDeploymentGroup) { + $.mirroringDeploymentGroup = mirroringDeploymentGroup; + return this; + } + + /** + * @param mirroringDeploymentGroup Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + * @return builder + * + */ + public Builder mirroringDeploymentGroup(String mirroringDeploymentGroup) { + return mirroringDeploymentGroup(Output.of(mirroringDeploymentGroup)); + } + + /** + * @param mirroringEndpointGroupId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringEndpointGroupId(Output mirroringEndpointGroupId) { + $.mirroringEndpointGroupId = mirroringEndpointGroupId; + return this; + } + + /** + * @param mirroringEndpointGroupId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringEndpointGroupId(String mirroringEndpointGroupId) { + return mirroringEndpointGroupId(Output.of(mirroringEndpointGroupId)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public MirroringEndpointGroupArgs build() { + if ($.location == null) { + throw new MissingRequiredPropertyException("MirroringEndpointGroupArgs", "location"); + } + if ($.mirroringDeploymentGroup == null) { + throw new MissingRequiredPropertyException("MirroringEndpointGroupArgs", "mirroringDeploymentGroup"); + } + if ($.mirroringEndpointGroupId == null) { + throw new MissingRequiredPropertyException("MirroringEndpointGroupArgs", "mirroringEndpointGroupId"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroupAssociation.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroupAssociation.java new file mode 100644 index 0000000000..6023526fc4 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroupAssociation.java @@ -0,0 +1,412 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.networksecurity.MirroringEndpointGroupAssociationArgs; +import com.pulumi.gcp.networksecurity.inputs.MirroringEndpointGroupAssociationState; +import com.pulumi.gcp.networksecurity.outputs.MirroringEndpointGroupAssociationLocationsDetail; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Network Security Mirroring Endpoint Group Association Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.Network;
+ * import com.pulumi.gcp.compute.NetworkArgs;
+ * import com.pulumi.gcp.networksecurity.MirroringDeploymentGroup;
+ * import com.pulumi.gcp.networksecurity.MirroringDeploymentGroupArgs;
+ * import com.pulumi.gcp.networksecurity.MirroringEndpointGroup;
+ * import com.pulumi.gcp.networksecurity.MirroringEndpointGroupArgs;
+ * import com.pulumi.gcp.networksecurity.MirroringEndpointGroupAssociation;
+ * import com.pulumi.gcp.networksecurity.MirroringEndpointGroupAssociationArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var producerNetwork = new Network("producerNetwork", NetworkArgs.builder()
+ *             .name("example-prod-network")
+ *             .autoCreateSubnetworks(false)
+ *             .build());
+ * 
+ *         var consumerNetwork = new Network("consumerNetwork", NetworkArgs.builder()
+ *             .name("example-cons-network")
+ *             .autoCreateSubnetworks(false)
+ *             .build());
+ * 
+ *         var deploymentGroup = new MirroringDeploymentGroup("deploymentGroup", MirroringDeploymentGroupArgs.builder()
+ *             .mirroringDeploymentGroupId("example-dg")
+ *             .location("global")
+ *             .network(producerNetwork.id())
+ *             .build());
+ * 
+ *         var endpointGroup = new MirroringEndpointGroup("endpointGroup", MirroringEndpointGroupArgs.builder()
+ *             .mirroringEndpointGroupId("example-eg")
+ *             .location("global")
+ *             .mirroringDeploymentGroup(deploymentGroup.id())
+ *             .build());
+ * 
+ *         var default_ = new MirroringEndpointGroupAssociation("default", MirroringEndpointGroupAssociationArgs.builder()
+ *             .mirroringEndpointGroupAssociationId("example-ega")
+ *             .location("global")
+ *             .network(consumerNetwork.id())
+ *             .mirroringEndpointGroup(endpointGroup.id())
+ *             .labels(Map.of("foo", "bar"))
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * MirroringEndpointGroupAssociation can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}}` + * + * * `{{project}}/{{location}}/{{mirroring_endpoint_group_association_id}}` + * + * * `{{location}}/{{mirroring_endpoint_group_association_id}}` + * + * When using the `pulumi import` command, MirroringEndpointGroupAssociation can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{project}}/{{location}}/{{mirroring_endpoint_group_association_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{location}}/{{mirroring_endpoint_group_association_id}} + * ``` + * + */ +@ResourceType(type="gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation") +public class MirroringEndpointGroupAssociation extends com.pulumi.resources.CustomResource { + /** + * Output only. [Output only] Create time stamp + * + */ + @Export(name="createTime", refs={String.class}, tree="[0]") + private Output createTime; + + /** + * @return Output only. [Output only] Create time stamp + * + */ + public Output createTime() { + return this.createTime; + } + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Export(name="effectiveLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Output> effectiveLabels() { + return this.effectiveLabels; + } + /** + * 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. + * + */ + @Export(name="labels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> labels; + + /** + * @return 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 Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * 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`. + * + * *** + * + */ + @Export(name="location", refs={String.class}, tree="[0]") + private Output location; + + /** + * @return 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`. + * + * *** + * + */ + public Output location() { + return this.location; + } + /** + * Output only. The list of locations that this association is in and its details. + * Structure is documented below. + * + */ + @Export(name="locationsDetails", refs={List.class,MirroringEndpointGroupAssociationLocationsDetail.class}, tree="[0,1]") + private Output> locationsDetails; + + /** + * @return Output only. The list of locations that this association is in and its details. + * Structure is documented below. + * + */ + public Output> locationsDetails() { + return this.locationsDetails; + } + /** + * Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + */ + @Export(name="mirroringEndpointGroup", refs={String.class}, tree="[0]") + private Output mirroringEndpointGroup; + + /** + * @return Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + */ + public Output mirroringEndpointGroup() { + return this.mirroringEndpointGroup; + } + /** + * Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + */ + @Export(name="mirroringEndpointGroupAssociationId", refs={String.class}, tree="[0]") + private Output mirroringEndpointGroupAssociationId; + + /** + * @return Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + */ + public Output> mirroringEndpointGroupAssociationId() { + return Codegen.optional(this.mirroringEndpointGroupAssociationId); + } + /** + * Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + * + */ + public Output name() { + return this.name; + } + /** + * Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + */ + @Export(name="network", refs={String.class}, tree="[0]") + private Output network; + + /** + * @return Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + */ + public Output network() { + return this.network; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Export(name="pulumiLabels", refs={Map.class,String.class}, tree="[0,1,1]") + private Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Output> pulumiLabels() { + return this.pulumiLabels; + } + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + @Export(name="reconciling", refs={Boolean.class}, tree="[0]") + private Output reconciling; + + /** + * @return Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + public Output reconciling() { + return this.reconciling; + } + /** + * (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + */ + @Export(name="state", refs={String.class}, tree="[0]") + private Output state; + + /** + * @return (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + */ + public Output state() { + return this.state; + } + /** + * Output only. [Output only] Update time stamp + * + */ + @Export(name="updateTime", refs={String.class}, tree="[0]") + private Output updateTime; + + /** + * @return Output only. [Output only] Update time stamp + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public MirroringEndpointGroupAssociation(java.lang.String name) { + this(name, MirroringEndpointGroupAssociationArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public MirroringEndpointGroupAssociation(java.lang.String name, MirroringEndpointGroupAssociationArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public MirroringEndpointGroupAssociation(java.lang.String name, MirroringEndpointGroupAssociationArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private MirroringEndpointGroupAssociation(java.lang.String name, Output id, @Nullable MirroringEndpointGroupAssociationState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation", name, state, makeResourceOptions(options, id), false); + } + + private static MirroringEndpointGroupAssociationArgs makeArgs(MirroringEndpointGroupAssociationArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? MirroringEndpointGroupAssociationArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .additionalSecretOutputs(List.of( + "effectiveLabels", + "pulumiLabels" + )) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static MirroringEndpointGroupAssociation get(java.lang.String name, Output id, @Nullable MirroringEndpointGroupAssociationState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new MirroringEndpointGroupAssociation(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroupAssociationArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroupAssociationArgs.java new file mode 100644 index 0000000000..88997d4e13 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/MirroringEndpointGroupAssociationArgs.java @@ -0,0 +1,323 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringEndpointGroupAssociationArgs extends com.pulumi.resources.ResourceArgs { + + public static final MirroringEndpointGroupAssociationArgs Empty = new MirroringEndpointGroupAssociationArgs(); + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * 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`. + * + * *** + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return 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`. + * + * *** + * + */ + public Output location() { + return this.location; + } + + /** + * Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + */ + @Import(name="mirroringEndpointGroup", required=true) + private Output mirroringEndpointGroup; + + /** + * @return Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + */ + public Output mirroringEndpointGroup() { + return this.mirroringEndpointGroup; + } + + /** + * Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + */ + @Import(name="mirroringEndpointGroupAssociationId") + private @Nullable Output mirroringEndpointGroupAssociationId; + + /** + * @return Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + */ + public Optional> mirroringEndpointGroupAssociationId() { + return Optional.ofNullable(this.mirroringEndpointGroupAssociationId); + } + + /** + * Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + */ + @Import(name="network", required=true) + private Output network; + + /** + * @return Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + */ + public Output network() { + return this.network; + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private MirroringEndpointGroupAssociationArgs() {} + + private MirroringEndpointGroupAssociationArgs(MirroringEndpointGroupAssociationArgs $) { + this.labels = $.labels; + this.location = $.location; + this.mirroringEndpointGroup = $.mirroringEndpointGroup; + this.mirroringEndpointGroupAssociationId = $.mirroringEndpointGroupAssociationId; + this.network = $.network; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringEndpointGroupAssociationArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringEndpointGroupAssociationArgs $; + + public Builder() { + $ = new MirroringEndpointGroupAssociationArgs(); + } + + public Builder(MirroringEndpointGroupAssociationArgs defaults) { + $ = new MirroringEndpointGroupAssociationArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location 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`. + * + * *** + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location 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`. + * + * *** + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param mirroringEndpointGroup Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + * @return builder + * + */ + public Builder mirroringEndpointGroup(Output mirroringEndpointGroup) { + $.mirroringEndpointGroup = mirroringEndpointGroup; + return this; + } + + /** + * @param mirroringEndpointGroup Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + * @return builder + * + */ + public Builder mirroringEndpointGroup(String mirroringEndpointGroup) { + return mirroringEndpointGroup(Output.of(mirroringEndpointGroup)); + } + + /** + * @param mirroringEndpointGroupAssociationId Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + * @return builder + * + */ + public Builder mirroringEndpointGroupAssociationId(@Nullable Output mirroringEndpointGroupAssociationId) { + $.mirroringEndpointGroupAssociationId = mirroringEndpointGroupAssociationId; + return this; + } + + /** + * @param mirroringEndpointGroupAssociationId Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + * @return builder + * + */ + public Builder mirroringEndpointGroupAssociationId(String mirroringEndpointGroupAssociationId) { + return mirroringEndpointGroupAssociationId(Output.of(mirroringEndpointGroupAssociationId)); + } + + /** + * @param network Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + * @return builder + * + */ + public Builder network(Output network) { + $.network = network; + return this; + } + + /** + * @param network Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + * @return builder + * + */ + public Builder network(String network) { + return network(Output.of(network)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public MirroringEndpointGroupAssociationArgs build() { + if ($.location == null) { + throw new MissingRequiredPropertyException("MirroringEndpointGroupAssociationArgs", "location"); + } + if ($.mirroringEndpointGroup == null) { + throw new MissingRequiredPropertyException("MirroringEndpointGroupAssociationArgs", "mirroringEndpointGroup"); + } + if ($.network == null) { + throw new MissingRequiredPropertyException("MirroringEndpointGroupAssociationArgs", "network"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringDeploymentGroupConnectedEndpointGroupArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringDeploymentGroupConnectedEndpointGroupArgs.java new file mode 100644 index 0000000000..7b8a79a21f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringDeploymentGroupConnectedEndpointGroupArgs.java @@ -0,0 +1,87 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringDeploymentGroupConnectedEndpointGroupArgs extends com.pulumi.resources.ResourceArgs { + + public static final MirroringDeploymentGroupConnectedEndpointGroupArgs Empty = new MirroringDeploymentGroupConnectedEndpointGroupArgs(); + + /** + * (Output) + * Output only. A connected mirroring endpoint group. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return (Output) + * Output only. A connected mirroring endpoint group. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + private MirroringDeploymentGroupConnectedEndpointGroupArgs() {} + + private MirroringDeploymentGroupConnectedEndpointGroupArgs(MirroringDeploymentGroupConnectedEndpointGroupArgs $) { + this.name = $.name; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringDeploymentGroupConnectedEndpointGroupArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringDeploymentGroupConnectedEndpointGroupArgs $; + + public Builder() { + $ = new MirroringDeploymentGroupConnectedEndpointGroupArgs(); + } + + public Builder(MirroringDeploymentGroupConnectedEndpointGroupArgs defaults) { + $ = new MirroringDeploymentGroupConnectedEndpointGroupArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param name (Output) + * Output only. A connected mirroring endpoint group. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name (Output) + * Output only. A connected mirroring endpoint group. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + public MirroringDeploymentGroupConnectedEndpointGroupArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringDeploymentGroupState.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringDeploymentGroupState.java new file mode 100644 index 0000000000..3facb47d97 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringDeploymentGroupState.java @@ -0,0 +1,610 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.networksecurity.inputs.MirroringDeploymentGroupConnectedEndpointGroupArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringDeploymentGroupState extends com.pulumi.resources.ResourceArgs { + + public static final MirroringDeploymentGroupState Empty = new MirroringDeploymentGroupState(); + + /** + * Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + * Structure is documented below. + * + */ + @Import(name="connectedEndpointGroups") + private @Nullable Output> connectedEndpointGroups; + + /** + * @return Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + * Structure is documented below. + * + */ + public Optional>> connectedEndpointGroups() { + return Optional.ofNullable(this.connectedEndpointGroups); + } + + /** + * Output only. [Output only] Create time stamp + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. [Output only] Create time stamp + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * 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`. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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`. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + */ + @Import(name="mirroringDeploymentGroupId") + private @Nullable Output mirroringDeploymentGroupId; + + /** + * @return Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + */ + public Optional> mirroringDeploymentGroupId() { + return Optional.ofNullable(this.mirroringDeploymentGroupId); + } + + /** + * (Output) + * Output only. A connected mirroring endpoint group. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return (Output) + * Output only. A connected mirroring endpoint group. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + */ + @Import(name="network") + private @Nullable Output network; + + /** + * @return Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + */ + public Optional> network() { + return Optional.ofNullable(this.network); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + @Import(name="reconciling") + private @Nullable Output reconciling; + + /** + * @return Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + public Optional> reconciling() { + return Optional.ofNullable(this.reconciling); + } + + /** + * Output only. Current state of the deployment group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * + */ + @Import(name="state") + private @Nullable Output state; + + /** + * @return Output only. Current state of the deployment group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * + */ + public Optional> state() { + return Optional.ofNullable(this.state); + } + + /** + * Output only. [Output only] Update time stamp + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Output only. [Output only] Update time stamp + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private MirroringDeploymentGroupState() {} + + private MirroringDeploymentGroupState(MirroringDeploymentGroupState $) { + this.connectedEndpointGroups = $.connectedEndpointGroups; + this.createTime = $.createTime; + this.effectiveLabels = $.effectiveLabels; + this.labels = $.labels; + this.location = $.location; + this.mirroringDeploymentGroupId = $.mirroringDeploymentGroupId; + this.name = $.name; + this.network = $.network; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.reconciling = $.reconciling; + this.state = $.state; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringDeploymentGroupState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringDeploymentGroupState $; + + public Builder() { + $ = new MirroringDeploymentGroupState(); + } + + public Builder(MirroringDeploymentGroupState defaults) { + $ = new MirroringDeploymentGroupState(Objects.requireNonNull(defaults)); + } + + /** + * @param connectedEndpointGroups Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder connectedEndpointGroups(@Nullable Output> connectedEndpointGroups) { + $.connectedEndpointGroups = connectedEndpointGroups; + return this; + } + + /** + * @param connectedEndpointGroups Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder connectedEndpointGroups(List connectedEndpointGroups) { + return connectedEndpointGroups(Output.of(connectedEndpointGroups)); + } + + /** + * @param connectedEndpointGroups Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder connectedEndpointGroups(MirroringDeploymentGroupConnectedEndpointGroupArgs... connectedEndpointGroups) { + return connectedEndpointGroups(List.of(connectedEndpointGroups)); + } + + /** + * @param createTime Output only. [Output only] Create time stamp + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. [Output only] Create time stamp + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param mirroringDeploymentGroupId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringDeploymentGroupId(@Nullable Output mirroringDeploymentGroupId) { + $.mirroringDeploymentGroupId = mirroringDeploymentGroupId; + return this; + } + + /** + * @param mirroringDeploymentGroupId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_group_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringDeploymentGroupId(String mirroringDeploymentGroupId) { + return mirroringDeploymentGroupId(Output.of(mirroringDeploymentGroupId)); + } + + /** + * @param name (Output) + * Output only. A connected mirroring endpoint group. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name (Output) + * Output only. A connected mirroring endpoint group. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param network Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + * @return builder + * + */ + public Builder network(@Nullable Output network) { + $.network = network; + return this; + } + + /** + * @param network Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + * + * @return builder + * + */ + public Builder network(String network) { + return network(Output.of(network)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param reconciling Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + * @return builder + * + */ + public Builder reconciling(@Nullable Output reconciling) { + $.reconciling = reconciling; + return this; + } + + /** + * @param reconciling Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + * @return builder + * + */ + public Builder reconciling(Boolean reconciling) { + return reconciling(Output.of(reconciling)); + } + + /** + * @param state Output only. Current state of the deployment group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * + * @return builder + * + */ + public Builder state(@Nullable Output state) { + $.state = state; + return this; + } + + /** + * @param state Output only. Current state of the deployment group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * + * @return builder + * + */ + public Builder state(String state) { + return state(Output.of(state)); + } + + /** + * @param updateTime Output only. [Output only] Update time stamp + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Output only. [Output only] Update time stamp + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public MirroringDeploymentGroupState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringDeploymentState.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringDeploymentState.java new file mode 100644 index 0000000000..cb5de413a0 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringDeploymentState.java @@ -0,0 +1,605 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringDeploymentState extends com.pulumi.resources.ResourceArgs { + + public static final MirroringDeploymentState Empty = new MirroringDeploymentState(); + + /** + * Output only. [Output only] Create time stamp + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. [Output only] Create time stamp + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + */ + @Import(name="forwardingRule") + private @Nullable Output forwardingRule; + + /** + * @return Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + */ + public Optional> forwardingRule() { + return Optional.ofNullable(this.forwardingRule); + } + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * 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`. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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`. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + @Import(name="mirroringDeploymentGroup") + private @Nullable Output mirroringDeploymentGroup; + + /** + * @return Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + public Optional> mirroringDeploymentGroup() { + return Optional.ofNullable(this.mirroringDeploymentGroup); + } + + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + */ + @Import(name="mirroringDeploymentId") + private @Nullable Output mirroringDeploymentId; + + /** + * @return Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + */ + public Optional> mirroringDeploymentId() { + return Optional.ofNullable(this.mirroringDeploymentId); + } + + /** + * Immutable. Identifier. The name of the MirroringDeployment. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Immutable. Identifier. The name of the MirroringDeployment. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + @Import(name="reconciling") + private @Nullable Output reconciling; + + /** + * @return Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + public Optional> reconciling() { + return Optional.ofNullable(this.reconciling); + } + + /** + * Output only. Current state of the deployment. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * OUT_OF_SYNC + * DELETE_FAILED + * + */ + @Import(name="state") + private @Nullable Output state; + + /** + * @return Output only. Current state of the deployment. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * OUT_OF_SYNC + * DELETE_FAILED + * + */ + public Optional> state() { + return Optional.ofNullable(this.state); + } + + /** + * Output only. [Output only] Update time stamp + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Output only. [Output only] Update time stamp + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private MirroringDeploymentState() {} + + private MirroringDeploymentState(MirroringDeploymentState $) { + this.createTime = $.createTime; + this.effectiveLabels = $.effectiveLabels; + this.forwardingRule = $.forwardingRule; + this.labels = $.labels; + this.location = $.location; + this.mirroringDeploymentGroup = $.mirroringDeploymentGroup; + this.mirroringDeploymentId = $.mirroringDeploymentId; + this.name = $.name; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.reconciling = $.reconciling; + this.state = $.state; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringDeploymentState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringDeploymentState $; + + public Builder() { + $ = new MirroringDeploymentState(); + } + + public Builder(MirroringDeploymentState defaults) { + $ = new MirroringDeploymentState(Objects.requireNonNull(defaults)); + } + + /** + * @param createTime Output only. [Output only] Create time stamp + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. [Output only] Create time stamp + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param forwardingRule Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + * @return builder + * + */ + public Builder forwardingRule(@Nullable Output forwardingRule) { + $.forwardingRule = forwardingRule; + return this; + } + + /** + * @param forwardingRule Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + * + * @return builder + * + */ + public Builder forwardingRule(String forwardingRule) { + return forwardingRule(Output.of(forwardingRule)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param mirroringDeploymentGroup Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + * @return builder + * + */ + public Builder mirroringDeploymentGroup(@Nullable Output mirroringDeploymentGroup) { + $.mirroringDeploymentGroup = mirroringDeploymentGroup; + return this; + } + + /** + * @param mirroringDeploymentGroup Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + * @return builder + * + */ + public Builder mirroringDeploymentGroup(String mirroringDeploymentGroup) { + return mirroringDeploymentGroup(Output.of(mirroringDeploymentGroup)); + } + + /** + * @param mirroringDeploymentId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringDeploymentId(@Nullable Output mirroringDeploymentId) { + $.mirroringDeploymentId = mirroringDeploymentId; + return this; + } + + /** + * @param mirroringDeploymentId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_deployment_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringDeploymentId(String mirroringDeploymentId) { + return mirroringDeploymentId(Output.of(mirroringDeploymentId)); + } + + /** + * @param name Immutable. Identifier. The name of the MirroringDeployment. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Immutable. Identifier. The name of the MirroringDeployment. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param reconciling Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + * @return builder + * + */ + public Builder reconciling(@Nullable Output reconciling) { + $.reconciling = reconciling; + return this; + } + + /** + * @param reconciling Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + * @return builder + * + */ + public Builder reconciling(Boolean reconciling) { + return reconciling(Output.of(reconciling)); + } + + /** + * @param state Output only. Current state of the deployment. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * OUT_OF_SYNC + * DELETE_FAILED + * + * @return builder + * + */ + public Builder state(@Nullable Output state) { + $.state = state; + return this; + } + + /** + * @param state Output only. Current state of the deployment. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * OUT_OF_SYNC + * DELETE_FAILED + * + * @return builder + * + */ + public Builder state(String state) { + return state(Output.of(state)); + } + + /** + * @param updateTime Output only. [Output only] Update time stamp + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Output only. [Output only] Update time stamp + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public MirroringDeploymentState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringEndpointGroupAssociationLocationsDetailArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringEndpointGroupAssociationLocationsDetailArgs.java new file mode 100644 index 0000000000..bb24d9deb2 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringEndpointGroupAssociationLocationsDetailArgs.java @@ -0,0 +1,148 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringEndpointGroupAssociationLocationsDetailArgs extends com.pulumi.resources.ResourceArgs { + + public static final MirroringEndpointGroupAssociationLocationsDetailArgs Empty = new MirroringEndpointGroupAssociationLocationsDetailArgs(); + + /** + * 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`. + * + * *** + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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`. + * + * *** + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + */ + @Import(name="state") + private @Nullable Output state; + + /** + * @return (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + */ + public Optional> state() { + return Optional.ofNullable(this.state); + } + + private MirroringEndpointGroupAssociationLocationsDetailArgs() {} + + private MirroringEndpointGroupAssociationLocationsDetailArgs(MirroringEndpointGroupAssociationLocationsDetailArgs $) { + this.location = $.location; + this.state = $.state; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringEndpointGroupAssociationLocationsDetailArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringEndpointGroupAssociationLocationsDetailArgs $; + + public Builder() { + $ = new MirroringEndpointGroupAssociationLocationsDetailArgs(); + } + + public Builder(MirroringEndpointGroupAssociationLocationsDetailArgs defaults) { + $ = new MirroringEndpointGroupAssociationLocationsDetailArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param location 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`. + * + * *** + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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`. + * + * *** + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param state (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + * @return builder + * + */ + public Builder state(@Nullable Output state) { + $.state = state; + return this; + } + + /** + * @param state (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + * @return builder + * + */ + public Builder state(String state) { + return state(Output.of(state)); + } + + public MirroringEndpointGroupAssociationLocationsDetailArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringEndpointGroupAssociationState.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringEndpointGroupAssociationState.java new file mode 100644 index 0000000000..8de2eb55c8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringEndpointGroupAssociationState.java @@ -0,0 +1,655 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.networksecurity.inputs.MirroringEndpointGroupAssociationLocationsDetailArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringEndpointGroupAssociationState extends com.pulumi.resources.ResourceArgs { + + public static final MirroringEndpointGroupAssociationState Empty = new MirroringEndpointGroupAssociationState(); + + /** + * Output only. [Output only] Create time stamp + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. [Output only] Create time stamp + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * 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`. + * + * *** + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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`. + * + * *** + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Output only. The list of locations that this association is in and its details. + * Structure is documented below. + * + */ + @Import(name="locationsDetails") + private @Nullable Output> locationsDetails; + + /** + * @return Output only. The list of locations that this association is in and its details. + * Structure is documented below. + * + */ + public Optional>> locationsDetails() { + return Optional.ofNullable(this.locationsDetails); + } + + /** + * Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + */ + @Import(name="mirroringEndpointGroup") + private @Nullable Output mirroringEndpointGroup; + + /** + * @return Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + */ + public Optional> mirroringEndpointGroup() { + return Optional.ofNullable(this.mirroringEndpointGroup); + } + + /** + * Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + */ + @Import(name="mirroringEndpointGroupAssociationId") + private @Nullable Output mirroringEndpointGroupAssociationId; + + /** + * @return Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + */ + public Optional> mirroringEndpointGroupAssociationId() { + return Optional.ofNullable(this.mirroringEndpointGroupAssociationId); + } + + /** + * Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + */ + @Import(name="network") + private @Nullable Output network; + + /** + * @return Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + */ + public Optional> network() { + return Optional.ofNullable(this.network); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + @Import(name="reconciling") + private @Nullable Output reconciling; + + /** + * @return Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + public Optional> reconciling() { + return Optional.ofNullable(this.reconciling); + } + + /** + * (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + */ + @Import(name="state") + private @Nullable Output state; + + /** + * @return (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + */ + public Optional> state() { + return Optional.ofNullable(this.state); + } + + /** + * Output only. [Output only] Update time stamp + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Output only. [Output only] Update time stamp + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private MirroringEndpointGroupAssociationState() {} + + private MirroringEndpointGroupAssociationState(MirroringEndpointGroupAssociationState $) { + this.createTime = $.createTime; + this.effectiveLabels = $.effectiveLabels; + this.labels = $.labels; + this.location = $.location; + this.locationsDetails = $.locationsDetails; + this.mirroringEndpointGroup = $.mirroringEndpointGroup; + this.mirroringEndpointGroupAssociationId = $.mirroringEndpointGroupAssociationId; + this.name = $.name; + this.network = $.network; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.reconciling = $.reconciling; + this.state = $.state; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringEndpointGroupAssociationState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringEndpointGroupAssociationState $; + + public Builder() { + $ = new MirroringEndpointGroupAssociationState(); + } + + public Builder(MirroringEndpointGroupAssociationState defaults) { + $ = new MirroringEndpointGroupAssociationState(Objects.requireNonNull(defaults)); + } + + /** + * @param createTime Output only. [Output only] Create time stamp + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. [Output only] Create time stamp + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location 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`. + * + * *** + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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`. + * + * *** + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param locationsDetails Output only. The list of locations that this association is in and its details. + * Structure is documented below. + * + * @return builder + * + */ + public Builder locationsDetails(@Nullable Output> locationsDetails) { + $.locationsDetails = locationsDetails; + return this; + } + + /** + * @param locationsDetails Output only. The list of locations that this association is in and its details. + * Structure is documented below. + * + * @return builder + * + */ + public Builder locationsDetails(List locationsDetails) { + return locationsDetails(Output.of(locationsDetails)); + } + + /** + * @param locationsDetails Output only. The list of locations that this association is in and its details. + * Structure is documented below. + * + * @return builder + * + */ + public Builder locationsDetails(MirroringEndpointGroupAssociationLocationsDetailArgs... locationsDetails) { + return locationsDetails(List.of(locationsDetails)); + } + + /** + * @param mirroringEndpointGroup Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + * @return builder + * + */ + public Builder mirroringEndpointGroup(@Nullable Output mirroringEndpointGroup) { + $.mirroringEndpointGroup = mirroringEndpointGroup; + return this; + } + + /** + * @param mirroringEndpointGroup Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + * + * @return builder + * + */ + public Builder mirroringEndpointGroup(String mirroringEndpointGroup) { + return mirroringEndpointGroup(Output.of(mirroringEndpointGroup)); + } + + /** + * @param mirroringEndpointGroupAssociationId Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + * @return builder + * + */ + public Builder mirroringEndpointGroupAssociationId(@Nullable Output mirroringEndpointGroupAssociationId) { + $.mirroringEndpointGroupAssociationId = mirroringEndpointGroupAssociationId; + return this; + } + + /** + * @param mirroringEndpointGroupAssociationId Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_association_id from the method_signature of Create + * RPC + * + * @return builder + * + */ + public Builder mirroringEndpointGroupAssociationId(String mirroringEndpointGroupAssociationId) { + return mirroringEndpointGroupAssociationId(Output.of(mirroringEndpointGroupAssociationId)); + } + + /** + * @param name Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param network Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + * @return builder + * + */ + public Builder network(@Nullable Output network) { + $.network = network; + return this; + } + + /** + * @param network Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + * + * @return builder + * + */ + public Builder network(String network) { + return network(Output.of(network)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param reconciling Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + * @return builder + * + */ + public Builder reconciling(@Nullable Output reconciling) { + $.reconciling = reconciling; + return this; + } + + /** + * @param reconciling Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + * @return builder + * + */ + public Builder reconciling(Boolean reconciling) { + return reconciling(Output.of(reconciling)); + } + + /** + * @param state (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + * @return builder + * + */ + public Builder state(@Nullable Output state) { + $.state = state; + return this; + } + + /** + * @param state (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + * @return builder + * + */ + public Builder state(String state) { + return state(Output.of(state)); + } + + /** + * @param updateTime Output only. [Output only] Update time stamp + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Output only. [Output only] Update time stamp + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public MirroringEndpointGroupAssociationState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringEndpointGroupState.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringEndpointGroupState.java new file mode 100644 index 0000000000..1bb05e9ffb --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/inputs/MirroringEndpointGroupState.java @@ -0,0 +1,564 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class MirroringEndpointGroupState extends com.pulumi.resources.ResourceArgs { + + public static final MirroringEndpointGroupState Empty = new MirroringEndpointGroupState(); + + /** + * Output only. [Output only] Create time stamp + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. [Output only] Create time stamp + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + @Import(name="effectiveLabels") + private @Nullable Output> effectiveLabels; + + /** + * @return All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + */ + public Optional>> effectiveLabels() { + return Optional.ofNullable(this.effectiveLabels); + } + + /** + * 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. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return 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 Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * 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`. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return 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`. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + @Import(name="mirroringDeploymentGroup") + private @Nullable Output mirroringDeploymentGroup; + + /** + * @return Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + */ + public Optional> mirroringDeploymentGroup() { + return Optional.ofNullable(this.mirroringDeploymentGroup); + } + + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + */ + @Import(name="mirroringEndpointGroupId") + private @Nullable Output mirroringEndpointGroupId; + + /** + * @return Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + */ + public Optional> mirroringEndpointGroupId() { + return Optional.ofNullable(this.mirroringEndpointGroupId); + } + + /** + * Immutable. Identifier. The name of the MirroringEndpointGroup. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Immutable. Identifier. The name of the MirroringEndpointGroup. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + @Import(name="pulumiLabels") + private @Nullable Output> pulumiLabels; + + /** + * @return The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + */ + public Optional>> pulumiLabels() { + return Optional.ofNullable(this.pulumiLabels); + } + + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + @Import(name="reconciling") + private @Nullable Output reconciling; + + /** + * @return Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + */ + public Optional> reconciling() { + return Optional.ofNullable(this.reconciling); + } + + /** + * Output only. Current state of the endpoint group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CLOSED + * CREATING + * DELETING + * OUT_OF_SYNC + * + */ + @Import(name="state") + private @Nullable Output state; + + /** + * @return Output only. Current state of the endpoint group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CLOSED + * CREATING + * DELETING + * OUT_OF_SYNC + * + */ + public Optional> state() { + return Optional.ofNullable(this.state); + } + + /** + * Output only. [Output only] Update time stamp + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Output only. [Output only] Update time stamp + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private MirroringEndpointGroupState() {} + + private MirroringEndpointGroupState(MirroringEndpointGroupState $) { + this.createTime = $.createTime; + this.effectiveLabels = $.effectiveLabels; + this.labels = $.labels; + this.location = $.location; + this.mirroringDeploymentGroup = $.mirroringDeploymentGroup; + this.mirroringEndpointGroupId = $.mirroringEndpointGroupId; + this.name = $.name; + this.project = $.project; + this.pulumiLabels = $.pulumiLabels; + this.reconciling = $.reconciling; + this.state = $.state; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(MirroringEndpointGroupState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private MirroringEndpointGroupState $; + + public Builder() { + $ = new MirroringEndpointGroupState(); + } + + public Builder(MirroringEndpointGroupState defaults) { + $ = new MirroringEndpointGroupState(Objects.requireNonNull(defaults)); + } + + /** + * @param createTime Output only. [Output only] Create time stamp + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. [Output only] Create time stamp + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(@Nullable Output> effectiveLabels) { + $.effectiveLabels = effectiveLabels; + return this; + } + + /** + * @param effectiveLabels All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + * + * @return builder + * + */ + public Builder effectiveLabels(Map effectiveLabels) { + return effectiveLabels(Output.of(effectiveLabels)); + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param 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. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location 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`. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param mirroringDeploymentGroup Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + * @return builder + * + */ + public Builder mirroringDeploymentGroup(@Nullable Output mirroringDeploymentGroup) { + $.mirroringDeploymentGroup = mirroringDeploymentGroup; + return this; + } + + /** + * @param mirroringDeploymentGroup Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + * + * @return builder + * + */ + public Builder mirroringDeploymentGroup(String mirroringDeploymentGroup) { + return mirroringDeploymentGroup(Output.of(mirroringDeploymentGroup)); + } + + /** + * @param mirroringEndpointGroupId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringEndpointGroupId(@Nullable Output mirroringEndpointGroupId) { + $.mirroringEndpointGroupId = mirroringEndpointGroupId; + return this; + } + + /** + * @param mirroringEndpointGroupId Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroring_endpoint_group_id from the method_signature of Create RPC + * + * *** + * + * @return builder + * + */ + public Builder mirroringEndpointGroupId(String mirroringEndpointGroupId) { + return mirroringEndpointGroupId(Output.of(mirroringEndpointGroupId)); + } + + /** + * @param name Immutable. Identifier. The name of the MirroringEndpointGroup. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Immutable. Identifier. The name of the MirroringEndpointGroup. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(@Nullable Output> pulumiLabels) { + $.pulumiLabels = pulumiLabels; + return this; + } + + /** + * @param pulumiLabels The combination of labels configured directly on the resource + * and default labels configured on the provider. + * + * @return builder + * + */ + public Builder pulumiLabels(Map pulumiLabels) { + return pulumiLabels(Output.of(pulumiLabels)); + } + + /** + * @param reconciling Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + * @return builder + * + */ + public Builder reconciling(@Nullable Output reconciling) { + $.reconciling = reconciling; + return this; + } + + /** + * @param reconciling Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + * + * @return builder + * + */ + public Builder reconciling(Boolean reconciling) { + return reconciling(Output.of(reconciling)); + } + + /** + * @param state Output only. Current state of the endpoint group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CLOSED + * CREATING + * DELETING + * OUT_OF_SYNC + * + * @return builder + * + */ + public Builder state(@Nullable Output state) { + $.state = state; + return this; + } + + /** + * @param state Output only. Current state of the endpoint group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CLOSED + * CREATING + * DELETING + * OUT_OF_SYNC + * + * @return builder + * + */ + public Builder state(String state) { + return state(Output.of(state)); + } + + /** + * @param updateTime Output only. [Output only] Update time stamp + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Output only. [Output only] Update time stamp + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public MirroringEndpointGroupState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/outputs/MirroringDeploymentGroupConnectedEndpointGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/outputs/MirroringDeploymentGroupConnectedEndpointGroup.java new file mode 100644 index 0000000000..011b8a20d4 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/outputs/MirroringDeploymentGroupConnectedEndpointGroup.java @@ -0,0 +1,59 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class MirroringDeploymentGroupConnectedEndpointGroup { + /** + * @return (Output) + * Output only. A connected mirroring endpoint group. + * + */ + private @Nullable String name; + + private MirroringDeploymentGroupConnectedEndpointGroup() {} + /** + * @return (Output) + * Output only. A connected mirroring endpoint group. + * + */ + public Optional name() { + return Optional.ofNullable(this.name); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(MirroringDeploymentGroupConnectedEndpointGroup defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String name; + public Builder() {} + public Builder(MirroringDeploymentGroupConnectedEndpointGroup defaults) { + Objects.requireNonNull(defaults); + this.name = defaults.name; + } + + @CustomType.Setter + public Builder name(@Nullable String name) { + + this.name = name; + return this; + } + public MirroringDeploymentGroupConnectedEndpointGroup build() { + final var _resultValue = new MirroringDeploymentGroupConnectedEndpointGroup(); + _resultValue.name = name; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/outputs/MirroringEndpointGroupAssociationLocationsDetail.java b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/outputs/MirroringEndpointGroupAssociationLocationsDetail.java new file mode 100644 index 0000000000..9284af55c5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/networksecurity/outputs/MirroringEndpointGroupAssociationLocationsDetail.java @@ -0,0 +1,92 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.networksecurity.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class MirroringEndpointGroupAssociationLocationsDetail { + /** + * @return 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`. + * + * *** + * + */ + private @Nullable String location; + /** + * @return (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + */ + private @Nullable String state; + + private MirroringEndpointGroupAssociationLocationsDetail() {} + /** + * @return 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`. + * + * *** + * + */ + public Optional location() { + return Optional.ofNullable(this.location); + } + /** + * @return (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + * + */ + public Optional state() { + return Optional.ofNullable(this.state); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(MirroringEndpointGroupAssociationLocationsDetail defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String location; + private @Nullable String state; + public Builder() {} + public Builder(MirroringEndpointGroupAssociationLocationsDetail defaults) { + Objects.requireNonNull(defaults); + this.location = defaults.location; + this.state = defaults.state; + } + + @CustomType.Setter + public Builder location(@Nullable String location) { + + this.location = location; + return this; + } + @CustomType.Setter + public Builder state(@Nullable String state) { + + this.state = state; + return this; + } + public MirroringEndpointGroupAssociationLocationsDetail build() { + final var _resultValue = new MirroringEndpointGroupAssociationLocationsDetail(); + _resultValue.location = location; + _resultValue.state = state; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/AutonomousDatabase.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/AutonomousDatabase.java index ff35bd2919..cbbe4e78e1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/AutonomousDatabase.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/AutonomousDatabase.java @@ -11,6 +11,7 @@ import com.pulumi.gcp.oracledatabase.AutonomousDatabaseArgs; import com.pulumi.gcp.oracledatabase.inputs.AutonomousDatabaseState; import com.pulumi.gcp.oracledatabase.outputs.AutonomousDatabaseProperties; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -76,6 +77,7 @@ * .dbWorkload("OLTP") * .licenseType("LICENSE_INCLUDED") * .build()) + * .deletionProtection("true") * .build()); * * } @@ -147,6 +149,7 @@ * .privateEndpointIp("10.5.0.11") * .privateEndpointLabel("testhost") * .build()) + * .deletionProtection("true") * .build()); * * }}{@code @@ -262,6 +265,12 @@ public Output createTime() { public Output database() { return this.database; } + @Export(name="deletionProtection", refs={Boolean.class}, tree="[0]") + private Output deletionProtection; + + public Output> deletionProtection() { + return Codegen.optional(this.deletionProtection); + } /** * The display name for the Autonomous Database. The name does not have to be unique within your project. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/AutonomousDatabaseArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/AutonomousDatabaseArgs.java index 032619e4b7..85d542e679 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/AutonomousDatabaseArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/AutonomousDatabaseArgs.java @@ -7,6 +7,7 @@ import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.oracledatabase.inputs.AutonomousDatabasePropertiesArgs; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -88,6 +89,13 @@ public Output database() { return this.database; } + @Import(name="deletionProtection") + private @Nullable Output deletionProtection; + + public Optional> deletionProtection() { + return Optional.ofNullable(this.deletionProtection); + } + /** * The display name for the Autonomous Database. The name does not have to be unique within your project. * @@ -185,6 +193,7 @@ private AutonomousDatabaseArgs(AutonomousDatabaseArgs $) { this.autonomousDatabaseId = $.autonomousDatabaseId; this.cidr = $.cidr; this.database = $.database; + this.deletionProtection = $.deletionProtection; this.displayName = $.displayName; this.labels = $.labels; this.location = $.location; @@ -305,6 +314,15 @@ public Builder database(String database) { return database(Output.of(database)); } + public Builder deletionProtection(@Nullable Output deletionProtection) { + $.deletionProtection = deletionProtection; + return this; + } + + public Builder deletionProtection(Boolean deletionProtection) { + return deletionProtection(Output.of(deletionProtection)); + } + /** * @param displayName The display name for the Autonomous Database. The name does not have to be unique within your project. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudExadataInfrastructure.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudExadataInfrastructure.java index 423e43d633..c98dd39040 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudExadataInfrastructure.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudExadataInfrastructure.java @@ -11,6 +11,7 @@ import com.pulumi.gcp.oracledatabase.CloudExadataInfrastructureArgs; import com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructureState; import com.pulumi.gcp.oracledatabase.outputs.CloudExadataInfrastructureProperties; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -64,6 +65,7 @@ * .computeCount("2") * .storageCount("3") * .build()) + * .deletionProtection("true") * .build()); * * } @@ -129,6 +131,7 @@ * .totalStorageSizeGb("196608") * .build()) * .labels(Map.of("label-one", "value-one")) + * .deletionProtection("true") * .build()); * * }}{@code @@ -202,6 +205,12 @@ public Output cloudExadataInfrastructureId() { public Output createTime() { return this.createTime; } + @Export(name="deletionProtection", refs={Boolean.class}, tree="[0]") + private Output deletionProtection; + + public Output> deletionProtection() { + return Codegen.optional(this.deletionProtection); + } /** * User friendly name for this resource. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudExadataInfrastructureArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudExadataInfrastructureArgs.java index abaf027dec..e7b85cbb4b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudExadataInfrastructureArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudExadataInfrastructureArgs.java @@ -7,6 +7,7 @@ import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -43,6 +44,13 @@ public Output cloudExadataInfrastructureId() { return this.cloudExadataInfrastructureId; } + @Import(name="deletionProtection") + private @Nullable Output deletionProtection; + + public Optional> deletionProtection() { + return Optional.ofNullable(this.deletionProtection); + } + /** * User friendly name for this resource. * @@ -145,6 +153,7 @@ private CloudExadataInfrastructureArgs() {} private CloudExadataInfrastructureArgs(CloudExadataInfrastructureArgs $) { this.cloudExadataInfrastructureId = $.cloudExadataInfrastructureId; + this.deletionProtection = $.deletionProtection; this.displayName = $.displayName; this.gcpOracleZone = $.gcpOracleZone; this.labels = $.labels; @@ -202,6 +211,15 @@ public Builder cloudExadataInfrastructureId(String cloudExadataInfrastructureId) return cloudExadataInfrastructureId(Output.of(cloudExadataInfrastructureId)); } + public Builder deletionProtection(@Nullable Output deletionProtection) { + $.deletionProtection = deletionProtection; + return this; + } + + public Builder deletionProtection(Boolean deletionProtection) { + return deletionProtection(Output.of(deletionProtection)); + } + /** * @param displayName User friendly name for this resource. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudVmCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudVmCluster.java index 6d2d51a1be..9346b524d2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudVmCluster.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudVmCluster.java @@ -11,6 +11,7 @@ import com.pulumi.gcp.oracledatabase.CloudVmClusterArgs; import com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterState; import com.pulumi.gcp.oracledatabase.outputs.CloudVmClusterProperties; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -69,6 +70,7 @@ * .computeCount("2") * .storageCount("3") * .build()) + * .deletionProtection("true") * .build()); * * final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder() @@ -92,6 +94,7 @@ * .giVersion("19.0.0.0") * .hostnamePrefix("hostname1") * .build()) + * .deletionProtection("true") * .build()); * * }}{@code @@ -144,6 +147,7 @@ * .computeCount("2") * .storageCount("3") * .build()) + * .deletionProtection("true") * .build()); * * final var default = ComputeFunctions.getNetwork(GetNetworkArgs.builder() @@ -194,6 +198,7 @@ * .build()) * .memorySizeGb(60) * .build()) + * .deletionProtection("true") * .build()); * * }}{@code @@ -295,6 +300,12 @@ public Output cloudVmClusterId() { public Output createTime() { return this.createTime; } + @Export(name="deletionProtection", refs={Boolean.class}, tree="[0]") + private Output deletionProtection; + + public Output> deletionProtection() { + return Codegen.optional(this.deletionProtection); + } /** * User friendly name for this resource. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudVmClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudVmClusterArgs.java index 83d24ccdbc..80e88dbe30 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudVmClusterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/CloudVmClusterArgs.java @@ -7,6 +7,7 @@ import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesArgs; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -73,6 +74,13 @@ public Output cloudVmClusterId() { return this.cloudVmClusterId; } + @Import(name="deletionProtection") + private @Nullable Output deletionProtection; + + public Optional> deletionProtection() { + return Optional.ofNullable(this.deletionProtection); + } + /** * User friendly name for this resource. * @@ -198,6 +206,7 @@ private CloudVmClusterArgs(CloudVmClusterArgs $) { this.backupSubnetCidr = $.backupSubnetCidr; this.cidr = $.cidr; this.cloudVmClusterId = $.cloudVmClusterId; + this.deletionProtection = $.deletionProtection; this.displayName = $.displayName; this.exadataInfrastructure = $.exadataInfrastructure; this.labels = $.labels; @@ -298,6 +307,15 @@ public Builder cloudVmClusterId(String cloudVmClusterId) { return cloudVmClusterId(Output.of(cloudVmClusterId)); } + public Builder deletionProtection(@Nullable Output deletionProtection) { + $.deletionProtection = deletionProtection; + return this; + } + + public Builder deletionProtection(Boolean deletionProtection) { + return deletionProtection(Output.of(deletionProtection)); + } + /** * @param displayName User friendly name for this resource. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/AutonomousDatabaseState.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/AutonomousDatabaseState.java index b021db0973..d719a97551 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/AutonomousDatabaseState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/AutonomousDatabaseState.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.gcp.oracledatabase.inputs.AutonomousDatabasePropertiesArgs; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -102,6 +103,13 @@ public Optional> database() { return Optional.ofNullable(this.database); } + @Import(name="deletionProtection") + private @Nullable Output deletionProtection; + + public Optional> deletionProtection() { + return Optional.ofNullable(this.deletionProtection); + } + /** * The display name for the Autonomous Database. The name does not have to be unique within your project. * @@ -266,6 +274,7 @@ private AutonomousDatabaseState(AutonomousDatabaseState $) { this.cidr = $.cidr; this.createTime = $.createTime; this.database = $.database; + this.deletionProtection = $.deletionProtection; this.displayName = $.displayName; this.effectiveLabels = $.effectiveLabels; this.entitlementId = $.entitlementId; @@ -411,6 +420,15 @@ public Builder database(String database) { return database(Output.of(database)); } + public Builder deletionProtection(@Nullable Output deletionProtection) { + $.deletionProtection = deletionProtection; + return this; + } + + public Builder deletionProtection(Boolean deletionProtection) { + return deletionProtection(Output.of(deletionProtection)); + } + /** * @param displayName The display name for the Autonomous Database. The name does not have to be unique within your project. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/CloudExadataInfrastructureState.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/CloudExadataInfrastructureState.java index fdeebbd20e..8c493380e6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/CloudExadataInfrastructureState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/CloudExadataInfrastructureState.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.gcp.oracledatabase.inputs.CloudExadataInfrastructurePropertiesArgs; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -57,6 +58,13 @@ public Optional> createTime() { return Optional.ofNullable(this.createTime); } + @Import(name="deletionProtection") + private @Nullable Output deletionProtection; + + public Optional> deletionProtection() { + return Optional.ofNullable(this.deletionProtection); + } + /** * User friendly name for this resource. * @@ -226,6 +234,7 @@ private CloudExadataInfrastructureState() {} private CloudExadataInfrastructureState(CloudExadataInfrastructureState $) { this.cloudExadataInfrastructureId = $.cloudExadataInfrastructureId; this.createTime = $.createTime; + this.deletionProtection = $.deletionProtection; this.displayName = $.displayName; this.effectiveLabels = $.effectiveLabels; this.entitlementId = $.entitlementId; @@ -308,6 +317,15 @@ public Builder createTime(String createTime) { return createTime(Output.of(createTime)); } + public Builder deletionProtection(@Nullable Output deletionProtection) { + $.deletionProtection = deletionProtection; + return this; + } + + public Builder deletionProtection(Boolean deletionProtection) { + return deletionProtection(Output.of(deletionProtection)); + } + /** * @param displayName User friendly name for this resource. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/CloudVmClusterState.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/CloudVmClusterState.java index 0781b6b405..001e0fbd63 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/CloudVmClusterState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/inputs/CloudVmClusterState.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.gcp.oracledatabase.inputs.CloudVmClusterPropertiesArgs; +import java.lang.Boolean; import java.lang.String; import java.util.Map; import java.util.Objects; @@ -87,6 +88,13 @@ public Optional> createTime() { return Optional.ofNullable(this.createTime); } + @Import(name="deletionProtection") + private @Nullable Output deletionProtection; + + public Optional> deletionProtection() { + return Optional.ofNullable(this.deletionProtection); + } + /** * User friendly name for this resource. * @@ -279,6 +287,7 @@ private CloudVmClusterState(CloudVmClusterState $) { this.cidr = $.cidr; this.cloudVmClusterId = $.cloudVmClusterId; this.createTime = $.createTime; + this.deletionProtection = $.deletionProtection; this.displayName = $.displayName; this.effectiveLabels = $.effectiveLabels; this.exadataInfrastructure = $.exadataInfrastructure; @@ -404,6 +413,15 @@ public Builder createTime(String createTime) { return createTime(Output.of(createTime)); } + public Builder deletionProtection(@Nullable Output deletionProtection) { + $.deletionProtection = deletionProtection; + return this; + } + + public Builder deletionProtection(Boolean deletionProtection) { + return deletionProtection(Output.of(deletionProtection)); + } + /** * @param displayName User friendly name for this resource. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetAutonomousDatabaseResult.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetAutonomousDatabaseResult.java index 485c723812..cde55034af 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetAutonomousDatabaseResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetAutonomousDatabaseResult.java @@ -6,6 +6,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.oracledatabase.outputs.GetAutonomousDatabaseProperty; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -20,6 +21,7 @@ public final class GetAutonomousDatabaseResult { private String cidr; private String createTime; private String database; + private Boolean deletionProtection; private String displayName; private Map effectiveLabels; private String entitlementId; @@ -52,6 +54,9 @@ public String createTime() { public String database() { return this.database; } + public Boolean deletionProtection() { + return this.deletionProtection; + } public String displayName() { return this.displayName; } @@ -104,6 +109,7 @@ public static final class Builder { private String cidr; private String createTime; private String database; + private Boolean deletionProtection; private String displayName; private Map effectiveLabels; private String entitlementId; @@ -123,6 +129,7 @@ public Builder(GetAutonomousDatabaseResult defaults) { this.cidr = defaults.cidr; this.createTime = defaults.createTime; this.database = defaults.database; + this.deletionProtection = defaults.deletionProtection; this.displayName = defaults.displayName; this.effectiveLabels = defaults.effectiveLabels; this.entitlementId = defaults.entitlementId; @@ -177,6 +184,14 @@ public Builder database(String database) { return this; } @CustomType.Setter + public Builder deletionProtection(Boolean deletionProtection) { + if (deletionProtection == null) { + throw new MissingRequiredPropertyException("GetAutonomousDatabaseResult", "deletionProtection"); + } + this.deletionProtection = deletionProtection; + return this; + } + @CustomType.Setter public Builder displayName(String displayName) { if (displayName == null) { throw new MissingRequiredPropertyException("GetAutonomousDatabaseResult", "displayName"); @@ -272,6 +287,7 @@ public GetAutonomousDatabaseResult build() { _resultValue.cidr = cidr; _resultValue.createTime = createTime; _resultValue.database = database; + _resultValue.deletionProtection = deletionProtection; _resultValue.displayName = displayName; _resultValue.effectiveLabels = effectiveLabels; _resultValue.entitlementId = entitlementId; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetAutonomousDatabasesAutonomousDatabase.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetAutonomousDatabasesAutonomousDatabase.java index 8e8da00a24..cf128554a6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetAutonomousDatabasesAutonomousDatabase.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetAutonomousDatabasesAutonomousDatabase.java @@ -6,6 +6,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.oracledatabase.outputs.GetAutonomousDatabasesAutonomousDatabaseProperty; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -43,6 +44,7 @@ public final class GetAutonomousDatabasesAutonomousDatabase { * */ private String database; + private Boolean deletionProtection; /** * @return The display name for the Autonomous Database. The name does not have to * be unique within your project. @@ -142,6 +144,9 @@ public String createTime() { public String database() { return this.database; } + public Boolean deletionProtection() { + return this.deletionProtection; + } /** * @return The display name for the Autonomous Database. The name does not have to * be unique within your project. @@ -234,6 +239,7 @@ public static final class Builder { private String cidr; private String createTime; private String database; + private Boolean deletionProtection; private String displayName; private Map effectiveLabels; private String entitlementId; @@ -252,6 +258,7 @@ public Builder(GetAutonomousDatabasesAutonomousDatabase defaults) { this.cidr = defaults.cidr; this.createTime = defaults.createTime; this.database = defaults.database; + this.deletionProtection = defaults.deletionProtection; this.displayName = defaults.displayName; this.effectiveLabels = defaults.effectiveLabels; this.entitlementId = defaults.entitlementId; @@ -305,6 +312,14 @@ public Builder database(String database) { return this; } @CustomType.Setter + public Builder deletionProtection(Boolean deletionProtection) { + if (deletionProtection == null) { + throw new MissingRequiredPropertyException("GetAutonomousDatabasesAutonomousDatabase", "deletionProtection"); + } + this.deletionProtection = deletionProtection; + return this; + } + @CustomType.Setter public Builder displayName(String displayName) { if (displayName == null) { throw new MissingRequiredPropertyException("GetAutonomousDatabasesAutonomousDatabase", "displayName"); @@ -394,6 +409,7 @@ public GetAutonomousDatabasesAutonomousDatabase build() { _resultValue.cidr = cidr; _resultValue.createTime = createTime; _resultValue.database = database; + _resultValue.deletionProtection = deletionProtection; _resultValue.displayName = displayName; _resultValue.effectiveLabels = effectiveLabels; _resultValue.entitlementId = entitlementId; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudExadataInfrastructureResult.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudExadataInfrastructureResult.java index 28cc5d421c..ce59ad2780 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudExadataInfrastructureResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudExadataInfrastructureResult.java @@ -6,6 +6,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.oracledatabase.outputs.GetCloudExadataInfrastructureProperty; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -17,6 +18,7 @@ public final class GetCloudExadataInfrastructureResult { private String cloudExadataInfrastructureId; private String createTime; + private Boolean deletionProtection; private String displayName; private Map effectiveLabels; private String entitlementId; @@ -40,6 +42,9 @@ public String cloudExadataInfrastructureId() { public String createTime() { return this.createTime; } + public Boolean deletionProtection() { + return this.deletionProtection; + } public String displayName() { return this.displayName; } @@ -89,6 +94,7 @@ public static Builder builder(GetCloudExadataInfrastructureResult defaults) { public static final class Builder { private String cloudExadataInfrastructureId; private String createTime; + private Boolean deletionProtection; private String displayName; private Map effectiveLabels; private String entitlementId; @@ -105,6 +111,7 @@ public Builder(GetCloudExadataInfrastructureResult defaults) { Objects.requireNonNull(defaults); this.cloudExadataInfrastructureId = defaults.cloudExadataInfrastructureId; this.createTime = defaults.createTime; + this.deletionProtection = defaults.deletionProtection; this.displayName = defaults.displayName; this.effectiveLabels = defaults.effectiveLabels; this.entitlementId = defaults.entitlementId; @@ -135,6 +142,14 @@ public Builder createTime(String createTime) { return this; } @CustomType.Setter + public Builder deletionProtection(Boolean deletionProtection) { + if (deletionProtection == null) { + throw new MissingRequiredPropertyException("GetCloudExadataInfrastructureResult", "deletionProtection"); + } + this.deletionProtection = deletionProtection; + return this; + } + @CustomType.Setter public Builder displayName(String displayName) { if (displayName == null) { throw new MissingRequiredPropertyException("GetCloudExadataInfrastructureResult", "displayName"); @@ -227,6 +242,7 @@ public GetCloudExadataInfrastructureResult build() { final var _resultValue = new GetCloudExadataInfrastructureResult(); _resultValue.cloudExadataInfrastructureId = cloudExadataInfrastructureId; _resultValue.createTime = createTime; + _resultValue.deletionProtection = deletionProtection; _resultValue.displayName = displayName; _resultValue.effectiveLabels = effectiveLabels; _resultValue.entitlementId = entitlementId; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudExadataInfrastructuresCloudExadataInfrastructure.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudExadataInfrastructuresCloudExadataInfrastructure.java index c8a2608153..f0e1c67477 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudExadataInfrastructuresCloudExadataInfrastructure.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudExadataInfrastructuresCloudExadataInfrastructure.java @@ -6,6 +6,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.oracledatabase.outputs.GetCloudExadataInfrastructuresCloudExadataInfrastructureProperty; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -26,6 +27,7 @@ public final class GetCloudExadataInfrastructuresCloudExadataInfrastructure { * */ private String createTime; + private Boolean deletionProtection; /** * @return User friendly name for this resource. * @@ -100,6 +102,9 @@ public String cloudExadataInfrastructureId() { public String createTime() { return this.createTime; } + public Boolean deletionProtection() { + return this.deletionProtection; + } /** * @return User friendly name for this resource. * @@ -187,6 +192,7 @@ public static Builder builder(GetCloudExadataInfrastructuresCloudExadataInfrastr public static final class Builder { private String cloudExadataInfrastructureId; private String createTime; + private Boolean deletionProtection; private String displayName; private Map effectiveLabels; private String entitlementId; @@ -202,6 +208,7 @@ public Builder(GetCloudExadataInfrastructuresCloudExadataInfrastructure defaults Objects.requireNonNull(defaults); this.cloudExadataInfrastructureId = defaults.cloudExadataInfrastructureId; this.createTime = defaults.createTime; + this.deletionProtection = defaults.deletionProtection; this.displayName = defaults.displayName; this.effectiveLabels = defaults.effectiveLabels; this.entitlementId = defaults.entitlementId; @@ -231,6 +238,14 @@ public Builder createTime(String createTime) { return this; } @CustomType.Setter + public Builder deletionProtection(Boolean deletionProtection) { + if (deletionProtection == null) { + throw new MissingRequiredPropertyException("GetCloudExadataInfrastructuresCloudExadataInfrastructure", "deletionProtection"); + } + this.deletionProtection = deletionProtection; + return this; + } + @CustomType.Setter public Builder displayName(String displayName) { if (displayName == null) { throw new MissingRequiredPropertyException("GetCloudExadataInfrastructuresCloudExadataInfrastructure", "displayName"); @@ -317,6 +332,7 @@ public GetCloudExadataInfrastructuresCloudExadataInfrastructure build() { final var _resultValue = new GetCloudExadataInfrastructuresCloudExadataInfrastructure(); _resultValue.cloudExadataInfrastructureId = cloudExadataInfrastructureId; _resultValue.createTime = createTime; + _resultValue.deletionProtection = deletionProtection; _resultValue.displayName = displayName; _resultValue.effectiveLabels = effectiveLabels; _resultValue.entitlementId = entitlementId; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudVmClusterResult.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudVmClusterResult.java index 56336e3fca..a898c67b4e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudVmClusterResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudVmClusterResult.java @@ -6,6 +6,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.oracledatabase.outputs.GetCloudVmClusterProperty; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -19,6 +20,7 @@ public final class GetCloudVmClusterResult { private String cidr; private String cloudVmClusterId; private String createTime; + private Boolean deletionProtection; private String displayName; private Map effectiveLabels; private String exadataInfrastructure; @@ -49,6 +51,9 @@ public String cloudVmClusterId() { public String createTime() { return this.createTime; } + public Boolean deletionProtection() { + return this.deletionProtection; + } public String displayName() { return this.displayName; } @@ -103,6 +108,7 @@ public static final class Builder { private String cidr; private String cloudVmClusterId; private String createTime; + private Boolean deletionProtection; private String displayName; private Map effectiveLabels; private String exadataInfrastructure; @@ -122,6 +128,7 @@ public Builder(GetCloudVmClusterResult defaults) { this.cidr = defaults.cidr; this.cloudVmClusterId = defaults.cloudVmClusterId; this.createTime = defaults.createTime; + this.deletionProtection = defaults.deletionProtection; this.displayName = defaults.displayName; this.effectiveLabels = defaults.effectiveLabels; this.exadataInfrastructure = defaults.exadataInfrastructure; @@ -169,6 +176,14 @@ public Builder createTime(String createTime) { return this; } @CustomType.Setter + public Builder deletionProtection(Boolean deletionProtection) { + if (deletionProtection == null) { + throw new MissingRequiredPropertyException("GetCloudVmClusterResult", "deletionProtection"); + } + this.deletionProtection = deletionProtection; + return this; + } + @CustomType.Setter public Builder displayName(String displayName) { if (displayName == null) { throw new MissingRequiredPropertyException("GetCloudVmClusterResult", "displayName"); @@ -271,6 +286,7 @@ public GetCloudVmClusterResult build() { _resultValue.cidr = cidr; _resultValue.cloudVmClusterId = cloudVmClusterId; _resultValue.createTime = createTime; + _resultValue.deletionProtection = deletionProtection; _resultValue.displayName = displayName; _resultValue.effectiveLabels = effectiveLabels; _resultValue.exadataInfrastructure = exadataInfrastructure; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudVmClustersCloudVmCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudVmClustersCloudVmCluster.java index afabf541dc..6d1e12130d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudVmClustersCloudVmCluster.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/oracledatabase/outputs/GetCloudVmClustersCloudVmCluster.java @@ -6,6 +6,7 @@ import com.pulumi.core.annotations.CustomType; import com.pulumi.exceptions.MissingRequiredPropertyException; import com.pulumi.gcp.oracledatabase.outputs.GetCloudVmClustersCloudVmClusterProperty; +import java.lang.Boolean; import java.lang.String; import java.util.List; import java.util.Map; @@ -36,6 +37,7 @@ public final class GetCloudVmClustersCloudVmCluster { * */ private String createTime; + private Boolean deletionProtection; /** * @return User friendly name for this resource. * @@ -132,6 +134,9 @@ public String cloudVmClusterId() { public String createTime() { return this.createTime; } + public Boolean deletionProtection() { + return this.deletionProtection; + } /** * @return User friendly name for this resource. * @@ -231,6 +236,7 @@ public static final class Builder { private String cidr; private String cloudVmClusterId; private String createTime; + private Boolean deletionProtection; private String displayName; private Map effectiveLabels; private String exadataInfrastructure; @@ -249,6 +255,7 @@ public Builder(GetCloudVmClustersCloudVmCluster defaults) { this.cidr = defaults.cidr; this.cloudVmClusterId = defaults.cloudVmClusterId; this.createTime = defaults.createTime; + this.deletionProtection = defaults.deletionProtection; this.displayName = defaults.displayName; this.effectiveLabels = defaults.effectiveLabels; this.exadataInfrastructure = defaults.exadataInfrastructure; @@ -295,6 +302,14 @@ public Builder createTime(String createTime) { return this; } @CustomType.Setter + public Builder deletionProtection(Boolean deletionProtection) { + if (deletionProtection == null) { + throw new MissingRequiredPropertyException("GetCloudVmClustersCloudVmCluster", "deletionProtection"); + } + this.deletionProtection = deletionProtection; + return this; + } + @CustomType.Setter public Builder displayName(String displayName) { if (displayName == null) { throw new MissingRequiredPropertyException("GetCloudVmClustersCloudVmCluster", "displayName"); @@ -391,6 +406,7 @@ public GetCloudVmClustersCloudVmCluster build() { _resultValue.cidr = cidr; _resultValue.cloudVmClusterId = cloudVmClusterId; _resultValue.createTime = createTime; + _resultValue.deletionProtection = deletionProtection; _resultValue.displayName = displayName; _resultValue.effectiveLabels = effectiveLabels; _resultValue.exadataInfrastructure = exadataInfrastructure; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/orgpolicy/Policy.java b/sdk/java/src/main/java/com/pulumi/gcp/orgpolicy/Policy.java index add9bc2c11..bc362a46e8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/orgpolicy/Policy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/orgpolicy/Policy.java @@ -260,7 +260,7 @@ * * public static void stack(Context ctx) { * var constraint = new CustomConstraint("constraint", CustomConstraintArgs.builder() - * .name("custom.disableGkeAutoUpgrade_13293") + * .name("custom.disableGkeAutoUpgrade_40289") * .parent("organizations/123456789") * .displayName("Disable GKE auto upgrade") * .description("Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/parallelstore/Instance.java b/sdk/java/src/main/java/com/pulumi/gcp/parallelstore/Instance.java index 0f373a3971..114d8c6afd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/parallelstore/Instance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/parallelstore/Instance.java @@ -17,6 +17,8 @@ import javax.annotation.Nullable; /** + * A Parallelstore Instance. + * * ## Example Usage * * ### Parallelstore Instance Basic diff --git a/sdk/java/src/main/java/com/pulumi/gcp/pubsub/Subscription.java b/sdk/java/src/main/java/com/pulumi/gcp/pubsub/Subscription.java index 1540c0434a..b3ecacdde5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/pubsub/Subscription.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/pubsub/Subscription.java @@ -560,7 +560,7 @@ * .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder() * .bucket(example.name()) * .filenamePrefix("pre-") - * .filenameSuffix("-_40289") + * .filenameSuffix("-_33395") * .filenameDatetimeFormat("YYYY-MM-DD/hh_mm_ssZ") * .maxBytes(1000) * .maxDuration("300s") @@ -637,7 +637,7 @@ * .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder() * .bucket(example.name()) * .filenamePrefix("pre-") - * .filenameSuffix("-_33395") + * .filenameSuffix("-_76044") * .filenameDatetimeFormat("YYYY-MM-DD/hh_mm_ssZ") * .maxBytes(1000) * .maxDuration("300s") @@ -722,7 +722,7 @@ * .cloudStorageConfig(SubscriptionCloudStorageConfigArgs.builder() * .bucket(example.name()) * .filenamePrefix("pre-") - * .filenameSuffix("-_76044") + * .filenameSuffix("-_69391") * .filenameDatetimeFormat("YYYY-MM-DD/hh_mm_ssZ") * .maxBytes(1000) * .maxDuration("300s") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/Cluster.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/Cluster.java index 6a2a4bd986..32d414cf9a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/redis/Cluster.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/Cluster.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.Utilities; import com.pulumi.gcp.redis.ClusterArgs; import com.pulumi.gcp.redis.inputs.ClusterState; +import com.pulumi.gcp.redis.outputs.ClusterCrossClusterReplicationConfig; import com.pulumi.gcp.redis.outputs.ClusterDiscoveryEndpoint; import com.pulumi.gcp.redis.outputs.ClusterMaintenancePolicy; import com.pulumi.gcp.redis.outputs.ClusterMaintenanceSchedule; @@ -28,14 +29,6 @@ import javax.annotation.Nullable; /** - * A Google Cloud Redis Cluster instance. - * - * To get more information about Cluster, see: - * - * * [API documentation](https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/memorystore/docs/cluster/) - * * ## Example Usage * * ### Redis Cluster Ha @@ -224,6 +217,176 @@ * } * * <!--End PulumiCodeChooser --> + * ### Redis Cluster Secondary + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.compute.Network;
+ * import com.pulumi.gcp.compute.NetworkArgs;
+ * import com.pulumi.gcp.compute.Subnetwork;
+ * import com.pulumi.gcp.compute.SubnetworkArgs;
+ * import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;
+ * import com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;
+ * import com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;
+ * import com.pulumi.gcp.redis.Cluster;
+ * import com.pulumi.gcp.redis.ClusterArgs;
+ * import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs;
+ * import com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs;
+ * import com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigRdbConfigArgs;
+ * import com.pulumi.gcp.redis.inputs.ClusterZoneDistributionConfigArgs;
+ * import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs;
+ * import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigArgs;
+ * import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigPrimaryClusterArgs;
+ * import com.pulumi.resources.CustomResourceOptions;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var producerNet = new Network("producerNet", NetworkArgs.builder()
+ *             .name("mynetwork")
+ *             .autoCreateSubnetworks(false)
+ *             .build());
+ * 
+ *         var primaryClusterProducerSubnet = new Subnetwork("primaryClusterProducerSubnet", SubnetworkArgs.builder()
+ *             .name("mysubnet-primary-cluster")
+ *             .ipCidrRange("10.0.1.0/29")
+ *             .region("us-east1")
+ *             .network(producerNet.id())
+ *             .build());
+ * 
+ *         var primaryClusterRegionScp = new ServiceConnectionPolicy("primaryClusterRegionScp", ServiceConnectionPolicyArgs.builder()
+ *             .name("mypolicy-primary-cluster")
+ *             .location("us-east1")
+ *             .serviceClass("gcp-memorystore-redis")
+ *             .description("Primary cluster service connection policy")
+ *             .network(producerNet.id())
+ *             .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
+ *                 .subnetworks(primaryClusterProducerSubnet.id())
+ *                 .build())
+ *             .build());
+ * 
+ *         // Primary cluster
+ *         var primaryCluster = new Cluster("primaryCluster", ClusterArgs.builder()
+ *             .name("my-primary-cluster")
+ *             .region("us-east1")
+ *             .pscConfigs(ClusterPscConfigArgs.builder()
+ *                 .network(producerNet.id())
+ *                 .build())
+ *             .authorizationMode("AUTH_MODE_DISABLED")
+ *             .transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED")
+ *             .shardCount(3)
+ *             .redisConfigs(Map.of("maxmemory-policy", "volatile-ttl"))
+ *             .nodeType("REDIS_HIGHMEM_MEDIUM")
+ *             .persistenceConfig(ClusterPersistenceConfigArgs.builder()
+ *                 .mode("RDB")
+ *                 .rdbConfig(ClusterPersistenceConfigRdbConfigArgs.builder()
+ *                     .rdbSnapshotPeriod("ONE_HOUR")
+ *                     .rdbSnapshotStartTime("2024-10-02T15:01:23Z")
+ *                     .build())
+ *                 .build())
+ *             .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
+ *                 .mode("MULTI_ZONE")
+ *                 .build())
+ *             .replicaCount(1)
+ *             .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()
+ *                 .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()
+ *                     .day("MONDAY")
+ *                     .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()
+ *                         .hours(1)
+ *                         .minutes(0)
+ *                         .seconds(0)
+ *                         .nanos(0)
+ *                         .build())
+ *                     .build())
+ *                 .build())
+ *             .deletionProtectionEnabled(true)
+ *             .build(), CustomResourceOptions.builder()
+ *                 .dependsOn(primaryClusterRegionScp)
+ *                 .build());
+ * 
+ *         var secondaryClusterProducerSubnet = new Subnetwork("secondaryClusterProducerSubnet", SubnetworkArgs.builder()
+ *             .name("mysubnet-secondary-cluster")
+ *             .ipCidrRange("10.0.2.0/29")
+ *             .region("europe-west1")
+ *             .network(producerNet.id())
+ *             .build());
+ * 
+ *         var secondaryClusterRegionScp = new ServiceConnectionPolicy("secondaryClusterRegionScp", ServiceConnectionPolicyArgs.builder()
+ *             .name("mypolicy-secondary-cluster")
+ *             .location("europe-west1")
+ *             .serviceClass("gcp-memorystore-redis")
+ *             .description("Secondary cluster service connection policy")
+ *             .network(producerNet.id())
+ *             .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()
+ *                 .subnetworks(secondaryClusterProducerSubnet.id())
+ *                 .build())
+ *             .build());
+ * 
+ *         // Secondary cluster
+ *         var secondaryCluster = new Cluster("secondaryCluster", ClusterArgs.builder()
+ *             .name("my-secondary-cluster")
+ *             .region("europe-west1")
+ *             .pscConfigs(ClusterPscConfigArgs.builder()
+ *                 .network(producerNet.id())
+ *                 .build())
+ *             .authorizationMode("AUTH_MODE_DISABLED")
+ *             .transitEncryptionMode("TRANSIT_ENCRYPTION_MODE_DISABLED")
+ *             .shardCount(3)
+ *             .redisConfigs(Map.of("maxmemory-policy", "volatile-ttl"))
+ *             .nodeType("REDIS_HIGHMEM_MEDIUM")
+ *             .persistenceConfig(ClusterPersistenceConfigArgs.builder()
+ *                 .mode("RDB")
+ *                 .rdbConfig(ClusterPersistenceConfigRdbConfigArgs.builder()
+ *                     .rdbSnapshotPeriod("ONE_HOUR")
+ *                     .rdbSnapshotStartTime("2024-10-02T15:01:23Z")
+ *                     .build())
+ *                 .build())
+ *             .zoneDistributionConfig(ClusterZoneDistributionConfigArgs.builder()
+ *                 .mode("MULTI_ZONE")
+ *                 .build())
+ *             .replicaCount(2)
+ *             .maintenancePolicy(ClusterMaintenancePolicyArgs.builder()
+ *                 .weeklyMaintenanceWindows(ClusterMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()
+ *                     .day("WEDNESDAY")
+ *                     .startTime(ClusterMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()
+ *                         .hours(1)
+ *                         .minutes(0)
+ *                         .seconds(0)
+ *                         .nanos(0)
+ *                         .build())
+ *                     .build())
+ *                 .build())
+ *             .deletionProtectionEnabled(true)
+ *             .crossClusterReplicationConfig(ClusterCrossClusterReplicationConfigArgs.builder()
+ *                 .clusterRole("SECONDARY")
+ *                 .primaryCluster(ClusterCrossClusterReplicationConfigPrimaryClusterArgs.builder()
+ *                     .cluster(primaryCluster.id())
+ *                     .build())
+ *                 .build())
+ *             .build(), CustomResourceOptions.builder()
+ *                 .dependsOn(secondaryClusterRegionScp)
+ *                 .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> * ### Redis Cluster Rdb * * <!--Start PulumiCodeChooser --> @@ -501,6 +664,20 @@ public Output> authorizationMode() { public Output createTime() { return this.createTime; } + /** + * Cross cluster replication config + * + */ + @Export(name="crossClusterReplicationConfig", refs={ClusterCrossClusterReplicationConfig.class}, tree="[0]") + private Output crossClusterReplicationConfig; + + /** + * @return Cross cluster replication config + * + */ + public Output crossClusterReplicationConfig() { + return this.crossClusterReplicationConfig; + } /** * Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster * operation will fail. Default value is true. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/ClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/ClusterArgs.java index 53247f6aa4..71bb7ef987 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/redis/ClusterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/ClusterArgs.java @@ -6,6 +6,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigArgs; import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs; import com.pulumi.gcp.redis.inputs.ClusterPersistenceConfigArgs; import com.pulumi.gcp.redis.inputs.ClusterPscConfigArgs; @@ -43,6 +44,21 @@ public Optional> authorizationMode() { return Optional.ofNullable(this.authorizationMode); } + /** + * Cross cluster replication config + * + */ + @Import(name="crossClusterReplicationConfig") + private @Nullable Output crossClusterReplicationConfig; + + /** + * @return Cross cluster replication config + * + */ + public Optional> crossClusterReplicationConfig() { + return Optional.ofNullable(this.crossClusterReplicationConfig); + } + /** * Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster * operation will fail. Default value is true. @@ -254,6 +270,7 @@ private ClusterArgs() {} private ClusterArgs(ClusterArgs $) { this.authorizationMode = $.authorizationMode; + this.crossClusterReplicationConfig = $.crossClusterReplicationConfig; this.deletionProtectionEnabled = $.deletionProtectionEnabled; this.maintenancePolicy = $.maintenancePolicy; this.name = $.name; @@ -312,6 +329,27 @@ public Builder authorizationMode(String authorizationMode) { return authorizationMode(Output.of(authorizationMode)); } + /** + * @param crossClusterReplicationConfig Cross cluster replication config + * + * @return builder + * + */ + public Builder crossClusterReplicationConfig(@Nullable Output crossClusterReplicationConfig) { + $.crossClusterReplicationConfig = crossClusterReplicationConfig; + return this; + } + + /** + * @param crossClusterReplicationConfig Cross cluster replication config + * + * @return builder + * + */ + public Builder crossClusterReplicationConfig(ClusterCrossClusterReplicationConfigArgs crossClusterReplicationConfig) { + return crossClusterReplicationConfig(Output.of(crossClusterReplicationConfig)); + } + /** * @param deletionProtectionEnabled Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster * operation will fail. Default value is true. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigArgs.java new file mode 100644 index 0000000000..c16c78e625 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigArgs.java @@ -0,0 +1,298 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigMembershipArgs; +import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigPrimaryClusterArgs; +import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigSecondaryClusterArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterCrossClusterReplicationConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterCrossClusterReplicationConfigArgs Empty = new ClusterCrossClusterReplicationConfigArgs(); + + /** + * The role of the cluster in cross cluster replication. Supported values are: + * 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + * 2. `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. + * 3. `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. + * 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + * Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + * + */ + @Import(name="clusterRole") + private @Nullable Output clusterRole; + + /** + * @return The role of the cluster in cross cluster replication. Supported values are: + * 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + * 2. `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. + * 3. `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. + * 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + * Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + * + */ + public Optional> clusterRole() { + return Optional.ofNullable(this.clusterRole); + } + + /** + * (Output) + * An 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. + * Structure is documented below. + * + */ + @Import(name="memberships") + private @Nullable Output> memberships; + + /** + * @return (Output) + * An 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. + * Structure is documented below. + * + */ + public Optional>> memberships() { + return Optional.ofNullable(this.memberships); + } + + /** + * 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`. + * Structure is documented below. + * + */ + @Import(name="primaryCluster") + private @Nullable Output primaryCluster; + + /** + * @return 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`. + * Structure is documented below. + * + */ + public Optional> primaryCluster() { + return Optional.ofNullable(this.primaryCluster); + } + + /** + * 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`. + * Structure is documented below. + * + */ + @Import(name="secondaryClusters") + private @Nullable Output> secondaryClusters; + + /** + * @return 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`. + * Structure is documented below. + * + */ + public Optional>> secondaryClusters() { + return Optional.ofNullable(this.secondaryClusters); + } + + /** + * (Output) + * The last time cross cluster replication config was updated. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return (Output) + * The last time cross cluster replication config was updated. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private ClusterCrossClusterReplicationConfigArgs() {} + + private ClusterCrossClusterReplicationConfigArgs(ClusterCrossClusterReplicationConfigArgs $) { + this.clusterRole = $.clusterRole; + this.memberships = $.memberships; + this.primaryCluster = $.primaryCluster; + this.secondaryClusters = $.secondaryClusters; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterCrossClusterReplicationConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterCrossClusterReplicationConfigArgs $; + + public Builder() { + $ = new ClusterCrossClusterReplicationConfigArgs(); + } + + public Builder(ClusterCrossClusterReplicationConfigArgs defaults) { + $ = new ClusterCrossClusterReplicationConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param clusterRole The role of the cluster in cross cluster replication. Supported values are: + * 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + * 2. `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. + * 3. `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. + * 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + * Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + * + * @return builder + * + */ + public Builder clusterRole(@Nullable Output clusterRole) { + $.clusterRole = clusterRole; + return this; + } + + /** + * @param clusterRole The role of the cluster in cross cluster replication. Supported values are: + * 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + * 2. `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. + * 3. `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. + * 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + * Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + * + * @return builder + * + */ + public Builder clusterRole(String clusterRole) { + return clusterRole(Output.of(clusterRole)); + } + + /** + * @param memberships (Output) + * An 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. + * Structure is documented below. + * + * @return builder + * + */ + public Builder memberships(@Nullable Output> memberships) { + $.memberships = memberships; + return this; + } + + /** + * @param memberships (Output) + * An 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. + * Structure is documented below. + * + * @return builder + * + */ + public Builder memberships(List memberships) { + return memberships(Output.of(memberships)); + } + + /** + * @param memberships (Output) + * An 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. + * Structure is documented below. + * + * @return builder + * + */ + public Builder memberships(ClusterCrossClusterReplicationConfigMembershipArgs... memberships) { + return memberships(List.of(memberships)); + } + + /** + * @param primaryCluster 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`. + * Structure is documented below. + * + * @return builder + * + */ + public Builder primaryCluster(@Nullable Output primaryCluster) { + $.primaryCluster = primaryCluster; + return this; + } + + /** + * @param primaryCluster 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`. + * Structure is documented below. + * + * @return builder + * + */ + public Builder primaryCluster(ClusterCrossClusterReplicationConfigPrimaryClusterArgs primaryCluster) { + return primaryCluster(Output.of(primaryCluster)); + } + + /** + * @param secondaryClusters 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`. + * Structure is documented below. + * + * @return builder + * + */ + public Builder secondaryClusters(@Nullable Output> secondaryClusters) { + $.secondaryClusters = secondaryClusters; + return this; + } + + /** + * @param secondaryClusters 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`. + * Structure is documented below. + * + * @return builder + * + */ + public Builder secondaryClusters(List secondaryClusters) { + return secondaryClusters(Output.of(secondaryClusters)); + } + + /** + * @param secondaryClusters 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`. + * Structure is documented below. + * + * @return builder + * + */ + public Builder secondaryClusters(ClusterCrossClusterReplicationConfigSecondaryClusterArgs... secondaryClusters) { + return secondaryClusters(List.of(secondaryClusters)); + } + + /** + * @param updateTime (Output) + * The last time cross cluster replication config was updated. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime (Output) + * The last time cross cluster replication config was updated. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public ClusterCrossClusterReplicationConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigMembershipArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigMembershipArgs.java new file mode 100644 index 0000000000..c495696b88 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigMembershipArgs.java @@ -0,0 +1,142 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs; +import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterCrossClusterReplicationConfigMembershipArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterCrossClusterReplicationConfigMembershipArgs Empty = new ClusterCrossClusterReplicationConfigMembershipArgs(); + + /** + * Details of the primary cluster that is used as the replication source for all the secondary clusters. + * + */ + @Import(name="primaryClusters") + private @Nullable Output> primaryClusters; + + /** + * @return Details of the primary cluster that is used as the replication source for all the secondary clusters. + * + */ + public Optional>> primaryClusters() { + return Optional.ofNullable(this.primaryClusters); + } + + /** + * List of secondary clusters that are replicating from the primary cluster. + * + */ + @Import(name="secondaryClusters") + private @Nullable Output> secondaryClusters; + + /** + * @return List of secondary clusters that are replicating from the primary cluster. + * + */ + public Optional>> secondaryClusters() { + return Optional.ofNullable(this.secondaryClusters); + } + + private ClusterCrossClusterReplicationConfigMembershipArgs() {} + + private ClusterCrossClusterReplicationConfigMembershipArgs(ClusterCrossClusterReplicationConfigMembershipArgs $) { + this.primaryClusters = $.primaryClusters; + this.secondaryClusters = $.secondaryClusters; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterCrossClusterReplicationConfigMembershipArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterCrossClusterReplicationConfigMembershipArgs $; + + public Builder() { + $ = new ClusterCrossClusterReplicationConfigMembershipArgs(); + } + + public Builder(ClusterCrossClusterReplicationConfigMembershipArgs defaults) { + $ = new ClusterCrossClusterReplicationConfigMembershipArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param primaryClusters Details of the primary cluster that is used as the replication source for all the secondary clusters. + * + * @return builder + * + */ + public Builder primaryClusters(@Nullable Output> primaryClusters) { + $.primaryClusters = primaryClusters; + return this; + } + + /** + * @param primaryClusters Details of the primary cluster that is used as the replication source for all the secondary clusters. + * + * @return builder + * + */ + public Builder primaryClusters(List primaryClusters) { + return primaryClusters(Output.of(primaryClusters)); + } + + /** + * @param primaryClusters Details of the primary cluster that is used as the replication source for all the secondary clusters. + * + * @return builder + * + */ + public Builder primaryClusters(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs... primaryClusters) { + return primaryClusters(List.of(primaryClusters)); + } + + /** + * @param secondaryClusters List of secondary clusters that are replicating from the primary cluster. + * + * @return builder + * + */ + public Builder secondaryClusters(@Nullable Output> secondaryClusters) { + $.secondaryClusters = secondaryClusters; + return this; + } + + /** + * @param secondaryClusters List of secondary clusters that are replicating from the primary cluster. + * + * @return builder + * + */ + public Builder secondaryClusters(List secondaryClusters) { + return secondaryClusters(Output.of(secondaryClusters)); + } + + /** + * @param secondaryClusters List of secondary clusters that are replicating from the primary cluster. + * + * @return builder + * + */ + public Builder secondaryClusters(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs... secondaryClusters) { + return secondaryClusters(List.of(secondaryClusters)); + } + + public ClusterCrossClusterReplicationConfigMembershipArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs.java new file mode 100644 index 0000000000..b9cdae1f44 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs.java @@ -0,0 +1,124 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs Empty = new ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs(); + + /** + * The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + @Import(name="cluster") + private @Nullable Output cluster; + + /** + * @return The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + public Optional> cluster() { + return Optional.ofNullable(this.cluster); + } + + /** + * (Output) + * The unique id of the primary cluster. + * + */ + @Import(name="uid") + private @Nullable Output uid; + + /** + * @return (Output) + * The unique id of the primary cluster. + * + */ + public Optional> uid() { + return Optional.ofNullable(this.uid); + } + + private ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs() {} + + private ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs $) { + this.cluster = $.cluster; + this.uid = $.uid; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs $; + + public Builder() { + $ = new ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs(); + } + + public Builder(ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs defaults) { + $ = new ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param cluster The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + * @return builder + * + */ + public Builder cluster(@Nullable Output cluster) { + $.cluster = cluster; + return this; + } + + /** + * @param cluster The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + * @return builder + * + */ + public Builder cluster(String cluster) { + return cluster(Output.of(cluster)); + } + + /** + * @param uid (Output) + * The unique id of the primary cluster. + * + * @return builder + * + */ + public Builder uid(@Nullable Output uid) { + $.uid = uid; + return this; + } + + /** + * @param uid (Output) + * The unique id of the primary cluster. + * + * @return builder + * + */ + public Builder uid(String uid) { + return uid(Output.of(uid)); + } + + public ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs.java new file mode 100644 index 0000000000..317447aeba --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs.java @@ -0,0 +1,128 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs Empty = new ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs(); + + /** + * (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + @Import(name="cluster") + private @Nullable Output cluster; + + /** + * @return (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + public Optional> cluster() { + return Optional.ofNullable(this.cluster); + } + + /** + * (Output) + * The unique id of the secondary cluster. + * + */ + @Import(name="uid") + private @Nullable Output uid; + + /** + * @return (Output) + * The unique id of the secondary cluster. + * + */ + public Optional> uid() { + return Optional.ofNullable(this.uid); + } + + private ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs() {} + + private ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs $) { + this.cluster = $.cluster; + this.uid = $.uid; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs $; + + public Builder() { + $ = new ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs(); + } + + public Builder(ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs defaults) { + $ = new ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param cluster (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + * @return builder + * + */ + public Builder cluster(@Nullable Output cluster) { + $.cluster = cluster; + return this; + } + + /** + * @param cluster (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + * @return builder + * + */ + public Builder cluster(String cluster) { + return cluster(Output.of(cluster)); + } + + /** + * @param uid (Output) + * The unique id of the secondary cluster. + * + * @return builder + * + */ + public Builder uid(@Nullable Output uid) { + $.uid = uid; + return this; + } + + /** + * @param uid (Output) + * The unique id of the secondary cluster. + * + * @return builder + * + */ + public Builder uid(String uid) { + return uid(Output.of(uid)); + } + + public ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigPrimaryClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigPrimaryClusterArgs.java new file mode 100644 index 0000000000..b1868c3539 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigPrimaryClusterArgs.java @@ -0,0 +1,124 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterCrossClusterReplicationConfigPrimaryClusterArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterCrossClusterReplicationConfigPrimaryClusterArgs Empty = new ClusterCrossClusterReplicationConfigPrimaryClusterArgs(); + + /** + * The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + @Import(name="cluster") + private @Nullable Output cluster; + + /** + * @return The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + public Optional> cluster() { + return Optional.ofNullable(this.cluster); + } + + /** + * (Output) + * The unique id of the primary cluster. + * + */ + @Import(name="uid") + private @Nullable Output uid; + + /** + * @return (Output) + * The unique id of the primary cluster. + * + */ + public Optional> uid() { + return Optional.ofNullable(this.uid); + } + + private ClusterCrossClusterReplicationConfigPrimaryClusterArgs() {} + + private ClusterCrossClusterReplicationConfigPrimaryClusterArgs(ClusterCrossClusterReplicationConfigPrimaryClusterArgs $) { + this.cluster = $.cluster; + this.uid = $.uid; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterCrossClusterReplicationConfigPrimaryClusterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterCrossClusterReplicationConfigPrimaryClusterArgs $; + + public Builder() { + $ = new ClusterCrossClusterReplicationConfigPrimaryClusterArgs(); + } + + public Builder(ClusterCrossClusterReplicationConfigPrimaryClusterArgs defaults) { + $ = new ClusterCrossClusterReplicationConfigPrimaryClusterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param cluster The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + * @return builder + * + */ + public Builder cluster(@Nullable Output cluster) { + $.cluster = cluster; + return this; + } + + /** + * @param cluster The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + * @return builder + * + */ + public Builder cluster(String cluster) { + return cluster(Output.of(cluster)); + } + + /** + * @param uid (Output) + * The unique id of the primary cluster. + * + * @return builder + * + */ + public Builder uid(@Nullable Output uid) { + $.uid = uid; + return this; + } + + /** + * @param uid (Output) + * The unique id of the primary cluster. + * + * @return builder + * + */ + public Builder uid(String uid) { + return uid(Output.of(uid)); + } + + public ClusterCrossClusterReplicationConfigPrimaryClusterArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigSecondaryClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigSecondaryClusterArgs.java new file mode 100644 index 0000000000..d5589acefe --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterCrossClusterReplicationConfigSecondaryClusterArgs.java @@ -0,0 +1,128 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterCrossClusterReplicationConfigSecondaryClusterArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterCrossClusterReplicationConfigSecondaryClusterArgs Empty = new ClusterCrossClusterReplicationConfigSecondaryClusterArgs(); + + /** + * (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + @Import(name="cluster") + private @Nullable Output cluster; + + /** + * @return (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + public Optional> cluster() { + return Optional.ofNullable(this.cluster); + } + + /** + * (Output) + * The unique id of the secondary cluster. + * + */ + @Import(name="uid") + private @Nullable Output uid; + + /** + * @return (Output) + * The unique id of the secondary cluster. + * + */ + public Optional> uid() { + return Optional.ofNullable(this.uid); + } + + private ClusterCrossClusterReplicationConfigSecondaryClusterArgs() {} + + private ClusterCrossClusterReplicationConfigSecondaryClusterArgs(ClusterCrossClusterReplicationConfigSecondaryClusterArgs $) { + this.cluster = $.cluster; + this.uid = $.uid; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterCrossClusterReplicationConfigSecondaryClusterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterCrossClusterReplicationConfigSecondaryClusterArgs $; + + public Builder() { + $ = new ClusterCrossClusterReplicationConfigSecondaryClusterArgs(); + } + + public Builder(ClusterCrossClusterReplicationConfigSecondaryClusterArgs defaults) { + $ = new ClusterCrossClusterReplicationConfigSecondaryClusterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param cluster (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + * @return builder + * + */ + public Builder cluster(@Nullable Output cluster) { + $.cluster = cluster; + return this; + } + + /** + * @param cluster (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + * @return builder + * + */ + public Builder cluster(String cluster) { + return cluster(Output.of(cluster)); + } + + /** + * @param uid (Output) + * The unique id of the secondary cluster. + * + * @return builder + * + */ + public Builder uid(@Nullable Output uid) { + $.uid = uid; + return this; + } + + /** + * @param uid (Output) + * The unique id of the secondary cluster. + * + * @return builder + * + */ + public Builder uid(String uid) { + return uid(Output.of(uid)); + } + + public ClusterCrossClusterReplicationConfigSecondaryClusterArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterPersistenceConfigAofConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterPersistenceConfigAofConfigArgs.java index 496f97c446..eaee4a5537 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterPersistenceConfigAofConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterPersistenceConfigAofConfigArgs.java @@ -17,7 +17,7 @@ public final class ClusterPersistenceConfigAofConfigArgs extends com.pulumi.reso /** * Optional. Available fsync modes. - * - NO - Do not explicilty call fsync(). Rely on OS defaults. + * - NO - Do not explicitly call fsync(). Rely on OS defaults. * - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. * - ALWAYS - Call fsync() for earch write command. * Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -28,7 +28,7 @@ public final class ClusterPersistenceConfigAofConfigArgs extends com.pulumi.reso /** * @return Optional. Available fsync modes. - * - NO - Do not explicilty call fsync(). Rely on OS defaults. + * - NO - Do not explicitly call fsync(). Rely on OS defaults. * - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. * - ALWAYS - Call fsync() for earch write command. * Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -64,7 +64,7 @@ public Builder(ClusterPersistenceConfigAofConfigArgs defaults) { /** * @param appendFsync Optional. Available fsync modes. - * - NO - Do not explicilty call fsync(). Rely on OS defaults. + * - NO - Do not explicitly call fsync(). Rely on OS defaults. * - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. * - ALWAYS - Call fsync() for earch write command. * Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -79,7 +79,7 @@ public Builder appendFsync(@Nullable Output appendFsync) { /** * @param appendFsync Optional. Available fsync modes. - * - NO - Do not explicilty call fsync(). Rely on OS defaults. + * - NO - Do not explicitly call fsync(). Rely on OS defaults. * - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. * - ALWAYS - Call fsync() for earch write command. * Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterState.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterState.java index 372a5e7b0e..8f0c87ec39 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/ClusterState.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.redis.inputs.ClusterCrossClusterReplicationConfigArgs; import com.pulumi.gcp.redis.inputs.ClusterDiscoveryEndpointArgs; import com.pulumi.gcp.redis.inputs.ClusterMaintenancePolicyArgs; import com.pulumi.gcp.redis.inputs.ClusterMaintenanceScheduleArgs; @@ -66,6 +67,21 @@ public Optional> createTime() { return Optional.ofNullable(this.createTime); } + /** + * Cross cluster replication config + * + */ + @Import(name="crossClusterReplicationConfig") + private @Nullable Output crossClusterReplicationConfig; + + /** + * @return Cross cluster replication config + * + */ + public Optional> crossClusterReplicationConfig() { + return Optional.ofNullable(this.crossClusterReplicationConfig); + } + /** * Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster * operation will fail. Default value is true. @@ -410,6 +426,7 @@ private ClusterState() {} private ClusterState(ClusterState $) { this.authorizationMode = $.authorizationMode; this.createTime = $.createTime; + this.crossClusterReplicationConfig = $.crossClusterReplicationConfig; this.deletionProtectionEnabled = $.deletionProtectionEnabled; this.discoveryEndpoints = $.discoveryEndpoints; this.maintenancePolicy = $.maintenancePolicy; @@ -501,6 +518,27 @@ public Builder createTime(String createTime) { return createTime(Output.of(createTime)); } + /** + * @param crossClusterReplicationConfig Cross cluster replication config + * + * @return builder + * + */ + public Builder crossClusterReplicationConfig(@Nullable Output crossClusterReplicationConfig) { + $.crossClusterReplicationConfig = crossClusterReplicationConfig; + return this; + } + + /** + * @param crossClusterReplicationConfig Cross cluster replication config + * + * @return builder + * + */ + public Builder crossClusterReplicationConfig(ClusterCrossClusterReplicationConfigArgs crossClusterReplicationConfig) { + return crossClusterReplicationConfig(Output.of(crossClusterReplicationConfig)); + } + /** * @param deletionProtectionEnabled Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster * operation will fail. Default value is true. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfig.java new file mode 100644 index 0000000000..9c24336f49 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfig.java @@ -0,0 +1,171 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.redis.outputs.ClusterCrossClusterReplicationConfigMembership; +import com.pulumi.gcp.redis.outputs.ClusterCrossClusterReplicationConfigPrimaryCluster; +import com.pulumi.gcp.redis.outputs.ClusterCrossClusterReplicationConfigSecondaryCluster; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterCrossClusterReplicationConfig { + /** + * @return The role of the cluster in cross cluster replication. Supported values are: + * 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + * 2. `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. + * 3. `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. + * 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + * Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + * + */ + private @Nullable String clusterRole; + /** + * @return (Output) + * An 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. + * Structure is documented below. + * + */ + private @Nullable List memberships; + /** + * @return 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`. + * Structure is documented below. + * + */ + private @Nullable ClusterCrossClusterReplicationConfigPrimaryCluster primaryCluster; + /** + * @return 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`. + * Structure is documented below. + * + */ + private @Nullable List secondaryClusters; + /** + * @return (Output) + * The last time cross cluster replication config was updated. + * + */ + private @Nullable String updateTime; + + private ClusterCrossClusterReplicationConfig() {} + /** + * @return The role of the cluster in cross cluster replication. Supported values are: + * 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + * 2. `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. + * 3. `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. + * 4. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + * Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + * + */ + public Optional clusterRole() { + return Optional.ofNullable(this.clusterRole); + } + /** + * @return (Output) + * An 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. + * Structure is documented below. + * + */ + public List memberships() { + return this.memberships == null ? List.of() : this.memberships; + } + /** + * @return 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`. + * Structure is documented below. + * + */ + public Optional primaryCluster() { + return Optional.ofNullable(this.primaryCluster); + } + /** + * @return 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`. + * Structure is documented below. + * + */ + public List secondaryClusters() { + return this.secondaryClusters == null ? List.of() : this.secondaryClusters; + } + /** + * @return (Output) + * The last time cross cluster replication config was updated. + * + */ + public Optional updateTime() { + return Optional.ofNullable(this.updateTime); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterCrossClusterReplicationConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String clusterRole; + private @Nullable List memberships; + private @Nullable ClusterCrossClusterReplicationConfigPrimaryCluster primaryCluster; + private @Nullable List secondaryClusters; + private @Nullable String updateTime; + public Builder() {} + public Builder(ClusterCrossClusterReplicationConfig defaults) { + Objects.requireNonNull(defaults); + this.clusterRole = defaults.clusterRole; + this.memberships = defaults.memberships; + this.primaryCluster = defaults.primaryCluster; + this.secondaryClusters = defaults.secondaryClusters; + this.updateTime = defaults.updateTime; + } + + @CustomType.Setter + public Builder clusterRole(@Nullable String clusterRole) { + + this.clusterRole = clusterRole; + return this; + } + @CustomType.Setter + public Builder memberships(@Nullable List memberships) { + + this.memberships = memberships; + return this; + } + public Builder memberships(ClusterCrossClusterReplicationConfigMembership... memberships) { + return memberships(List.of(memberships)); + } + @CustomType.Setter + public Builder primaryCluster(@Nullable ClusterCrossClusterReplicationConfigPrimaryCluster primaryCluster) { + + this.primaryCluster = primaryCluster; + return this; + } + @CustomType.Setter + public Builder secondaryClusters(@Nullable List secondaryClusters) { + + this.secondaryClusters = secondaryClusters; + return this; + } + public Builder secondaryClusters(ClusterCrossClusterReplicationConfigSecondaryCluster... secondaryClusters) { + return secondaryClusters(List.of(secondaryClusters)); + } + @CustomType.Setter + public Builder updateTime(@Nullable String updateTime) { + + this.updateTime = updateTime; + return this; + } + public ClusterCrossClusterReplicationConfig build() { + final var _resultValue = new ClusterCrossClusterReplicationConfig(); + _resultValue.clusterRole = clusterRole; + _resultValue.memberships = memberships; + _resultValue.primaryCluster = primaryCluster; + _resultValue.secondaryClusters = secondaryClusters; + _resultValue.updateTime = updateTime; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigMembership.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigMembership.java new file mode 100644 index 0000000000..642b7d0906 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigMembership.java @@ -0,0 +1,85 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.redis.outputs.ClusterCrossClusterReplicationConfigMembershipPrimaryCluster; +import com.pulumi.gcp.redis.outputs.ClusterCrossClusterReplicationConfigMembershipSecondaryCluster; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterCrossClusterReplicationConfigMembership { + /** + * @return Details of the primary cluster that is used as the replication source for all the secondary clusters. + * + */ + private @Nullable List primaryClusters; + /** + * @return List of secondary clusters that are replicating from the primary cluster. + * + */ + private @Nullable List secondaryClusters; + + private ClusterCrossClusterReplicationConfigMembership() {} + /** + * @return Details of the primary cluster that is used as the replication source for all the secondary clusters. + * + */ + public List primaryClusters() { + return this.primaryClusters == null ? List.of() : this.primaryClusters; + } + /** + * @return List of secondary clusters that are replicating from the primary cluster. + * + */ + public List secondaryClusters() { + return this.secondaryClusters == null ? List.of() : this.secondaryClusters; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterCrossClusterReplicationConfigMembership defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List primaryClusters; + private @Nullable List secondaryClusters; + public Builder() {} + public Builder(ClusterCrossClusterReplicationConfigMembership defaults) { + Objects.requireNonNull(defaults); + this.primaryClusters = defaults.primaryClusters; + this.secondaryClusters = defaults.secondaryClusters; + } + + @CustomType.Setter + public Builder primaryClusters(@Nullable List primaryClusters) { + + this.primaryClusters = primaryClusters; + return this; + } + public Builder primaryClusters(ClusterCrossClusterReplicationConfigMembershipPrimaryCluster... primaryClusters) { + return primaryClusters(List.of(primaryClusters)); + } + @CustomType.Setter + public Builder secondaryClusters(@Nullable List secondaryClusters) { + + this.secondaryClusters = secondaryClusters; + return this; + } + public Builder secondaryClusters(ClusterCrossClusterReplicationConfigMembershipSecondaryCluster... secondaryClusters) { + return secondaryClusters(List.of(secondaryClusters)); + } + public ClusterCrossClusterReplicationConfigMembership build() { + final var _resultValue = new ClusterCrossClusterReplicationConfigMembership(); + _resultValue.primaryClusters = primaryClusters; + _resultValue.secondaryClusters = secondaryClusters; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigMembershipPrimaryCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigMembershipPrimaryCluster.java new file mode 100644 index 0000000000..ed94f21069 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigMembershipPrimaryCluster.java @@ -0,0 +1,80 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterCrossClusterReplicationConfigMembershipPrimaryCluster { + /** + * @return The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + private @Nullable String cluster; + /** + * @return (Output) + * The unique id of the primary cluster. + * + */ + private @Nullable String uid; + + private ClusterCrossClusterReplicationConfigMembershipPrimaryCluster() {} + /** + * @return The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + public Optional cluster() { + return Optional.ofNullable(this.cluster); + } + /** + * @return (Output) + * The unique id of the primary cluster. + * + */ + public Optional uid() { + return Optional.ofNullable(this.uid); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterCrossClusterReplicationConfigMembershipPrimaryCluster defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String cluster; + private @Nullable String uid; + public Builder() {} + public Builder(ClusterCrossClusterReplicationConfigMembershipPrimaryCluster defaults) { + Objects.requireNonNull(defaults); + this.cluster = defaults.cluster; + this.uid = defaults.uid; + } + + @CustomType.Setter + public Builder cluster(@Nullable String cluster) { + + this.cluster = cluster; + return this; + } + @CustomType.Setter + public Builder uid(@Nullable String uid) { + + this.uid = uid; + return this; + } + public ClusterCrossClusterReplicationConfigMembershipPrimaryCluster build() { + final var _resultValue = new ClusterCrossClusterReplicationConfigMembershipPrimaryCluster(); + _resultValue.cluster = cluster; + _resultValue.uid = uid; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigMembershipSecondaryCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigMembershipSecondaryCluster.java new file mode 100644 index 0000000000..7d3e7de045 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigMembershipSecondaryCluster.java @@ -0,0 +1,82 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterCrossClusterReplicationConfigMembershipSecondaryCluster { + /** + * @return (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + private @Nullable String cluster; + /** + * @return (Output) + * The unique id of the secondary cluster. + * + */ + private @Nullable String uid; + + private ClusterCrossClusterReplicationConfigMembershipSecondaryCluster() {} + /** + * @return (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + public Optional cluster() { + return Optional.ofNullable(this.cluster); + } + /** + * @return (Output) + * The unique id of the secondary cluster. + * + */ + public Optional uid() { + return Optional.ofNullable(this.uid); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterCrossClusterReplicationConfigMembershipSecondaryCluster defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String cluster; + private @Nullable String uid; + public Builder() {} + public Builder(ClusterCrossClusterReplicationConfigMembershipSecondaryCluster defaults) { + Objects.requireNonNull(defaults); + this.cluster = defaults.cluster; + this.uid = defaults.uid; + } + + @CustomType.Setter + public Builder cluster(@Nullable String cluster) { + + this.cluster = cluster; + return this; + } + @CustomType.Setter + public Builder uid(@Nullable String uid) { + + this.uid = uid; + return this; + } + public ClusterCrossClusterReplicationConfigMembershipSecondaryCluster build() { + final var _resultValue = new ClusterCrossClusterReplicationConfigMembershipSecondaryCluster(); + _resultValue.cluster = cluster; + _resultValue.uid = uid; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigPrimaryCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigPrimaryCluster.java new file mode 100644 index 0000000000..eccb3a4310 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigPrimaryCluster.java @@ -0,0 +1,80 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterCrossClusterReplicationConfigPrimaryCluster { + /** + * @return The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + private @Nullable String cluster; + /** + * @return (Output) + * The unique id of the primary cluster. + * + */ + private @Nullable String uid; + + private ClusterCrossClusterReplicationConfigPrimaryCluster() {} + /** + * @return The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + public Optional cluster() { + return Optional.ofNullable(this.cluster); + } + /** + * @return (Output) + * The unique id of the primary cluster. + * + */ + public Optional uid() { + return Optional.ofNullable(this.uid); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterCrossClusterReplicationConfigPrimaryCluster defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String cluster; + private @Nullable String uid; + public Builder() {} + public Builder(ClusterCrossClusterReplicationConfigPrimaryCluster defaults) { + Objects.requireNonNull(defaults); + this.cluster = defaults.cluster; + this.uid = defaults.uid; + } + + @CustomType.Setter + public Builder cluster(@Nullable String cluster) { + + this.cluster = cluster; + return this; + } + @CustomType.Setter + public Builder uid(@Nullable String uid) { + + this.uid = uid; + return this; + } + public ClusterCrossClusterReplicationConfigPrimaryCluster build() { + final var _resultValue = new ClusterCrossClusterReplicationConfigPrimaryCluster(); + _resultValue.cluster = cluster; + _resultValue.uid = uid; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigSecondaryCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigSecondaryCluster.java new file mode 100644 index 0000000000..d9afddc680 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterCrossClusterReplicationConfigSecondaryCluster.java @@ -0,0 +1,82 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.redis.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterCrossClusterReplicationConfigSecondaryCluster { + /** + * @return (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + private @Nullable String cluster; + /** + * @return (Output) + * The unique id of the secondary cluster. + * + */ + private @Nullable String uid; + + private ClusterCrossClusterReplicationConfigSecondaryCluster() {} + /** + * @return (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + * + */ + public Optional cluster() { + return Optional.ofNullable(this.cluster); + } + /** + * @return (Output) + * The unique id of the secondary cluster. + * + */ + public Optional uid() { + return Optional.ofNullable(this.uid); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterCrossClusterReplicationConfigSecondaryCluster defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String cluster; + private @Nullable String uid; + public Builder() {} + public Builder(ClusterCrossClusterReplicationConfigSecondaryCluster defaults) { + Objects.requireNonNull(defaults); + this.cluster = defaults.cluster; + this.uid = defaults.uid; + } + + @CustomType.Setter + public Builder cluster(@Nullable String cluster) { + + this.cluster = cluster; + return this; + } + @CustomType.Setter + public Builder uid(@Nullable String uid) { + + this.uid = uid; + return this; + } + public ClusterCrossClusterReplicationConfigSecondaryCluster build() { + final var _resultValue = new ClusterCrossClusterReplicationConfigSecondaryCluster(); + _resultValue.cluster = cluster; + _resultValue.uid = uid; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterPersistenceConfigAofConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterPersistenceConfigAofConfig.java index 48d3f1ac72..ca902bdaa4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterPersistenceConfigAofConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/ClusterPersistenceConfigAofConfig.java @@ -13,7 +13,7 @@ public final class ClusterPersistenceConfigAofConfig { /** * @return Optional. Available fsync modes. - * - NO - Do not explicilty call fsync(). Rely on OS defaults. + * - NO - Do not explicitly call fsync(). Rely on OS defaults. * - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. * - ALWAYS - Call fsync() for earch write command. * Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -24,7 +24,7 @@ public final class ClusterPersistenceConfigAofConfig { private ClusterPersistenceConfigAofConfig() {} /** * @return Optional. Available fsync modes. - * - NO - Do not explicilty call fsync(). Rely on OS defaults. + * - NO - Do not explicitly call fsync(). Rely on OS defaults. * - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. * - ALWAYS - Call fsync() for earch write command. * Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/ServiceaccountFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/ServiceaccountFunctions.java index 76849bb6a2..6c43a989d1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/ServiceaccountFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/ServiceaccountFunctions.java @@ -850,7 +850,7 @@ public static CompletableFuture getAccountAccessTok * <!--End PulumiCodeChooser --> * * ### Service Account Impersonation. - * `gcp.serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. + * `gcp.serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. * * Note: to use the following, you must grant `target_service_account` the * `roles/iam.serviceAccountTokenCreator` role on itself. @@ -997,7 +997,7 @@ public static Output getAccountIdToken(GetAccountIdToke * <!--End PulumiCodeChooser --> * * ### Service Account Impersonation. - * `gcp.serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. + * `gcp.serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. * * Note: to use the following, you must grant `target_service_account` the * `roles/iam.serviceAccountTokenCreator` role on itself. @@ -1144,7 +1144,7 @@ public static CompletableFuture getAccountIdTokenPlain( * <!--End PulumiCodeChooser --> * * ### Service Account Impersonation. - * `gcp.serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. + * `gcp.serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. * * Note: to use the following, you must grant `target_service_account` the * `roles/iam.serviceAccountTokenCreator` role on itself. @@ -1291,7 +1291,7 @@ public static Output getAccountIdToken(GetAccountIdToke * <!--End PulumiCodeChooser --> * * ### Service Account Impersonation. - * `gcp.serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. + * `gcp.serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. * * Note: to use the following, you must grant `target_service_account` the * `roles/iam.serviceAccountTokenCreator` role on itself. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/inputs/GetAccountKeyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/inputs/GetAccountKeyArgs.java index 0cb9e6ee92..85392db54f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/inputs/GetAccountKeyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/inputs/GetAccountKeyArgs.java @@ -36,7 +36,7 @@ public Output name() { } /** - * The ID of the project that the service account will be created in. + * The ID of the project that the service account is present in. * Defaults to the provider project configuration. * */ @@ -44,7 +44,7 @@ public Output name() { private @Nullable Output project; /** - * @return The ID of the project that the service account will be created in. + * @return The ID of the project that the service account is present in. * Defaults to the provider project configuration. * */ @@ -119,7 +119,7 @@ public Builder name(String name) { } /** - * @param project The ID of the project that the service account will be created in. + * @param project The ID of the project that the service account is present in. * Defaults to the provider project configuration. * * @return builder @@ -131,7 +131,7 @@ public Builder project(@Nullable Output project) { } /** - * @param project The ID of the project that the service account will be created in. + * @param project The ID of the project that the service account is present in. * Defaults to the provider project configuration. * * @return builder diff --git a/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/inputs/GetAccountKeyPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/inputs/GetAccountKeyPlainArgs.java index f4216420e9..dd22dcec6c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/inputs/GetAccountKeyPlainArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/serviceaccount/inputs/GetAccountKeyPlainArgs.java @@ -35,7 +35,7 @@ public String name() { } /** - * The ID of the project that the service account will be created in. + * The ID of the project that the service account is present in. * Defaults to the provider project configuration. * */ @@ -43,7 +43,7 @@ public String name() { private @Nullable String project; /** - * @return The ID of the project that the service account will be created in. + * @return The ID of the project that the service account is present in. * Defaults to the provider project configuration. * */ @@ -106,7 +106,7 @@ public Builder name(String name) { } /** - * @param project The ID of the project that the service account will be created in. + * @param project The ID of the project that the service account is present in. * Defaults to the provider project configuration. * * @return builder diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java index e3d25cad17..f8148109e1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java @@ -686,7 +686,7 @@ public static CompletableFuture getBucketObjectPlain(GetB * and * [API](https://cloud.google.com/storage/docs/json_api/v1/objects). * - * > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + * > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. * * ## Example Usage * @@ -737,7 +737,7 @@ public static Output getBucketObjectContent(GetBuc * and * [API](https://cloud.google.com/storage/docs/json_api/v1/objects). * - * > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + * > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. * * ## Example Usage * @@ -788,7 +788,7 @@ public static CompletableFuture getBucketObjectCon * and * [API](https://cloud.google.com/storage/docs/json_api/v1/objects). * - * > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + * > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. * * ## Example Usage * @@ -839,7 +839,7 @@ public static Output getBucketObjectContent(GetBuc * and * [API](https://cloud.google.com/storage/docs/json_api/v1/objects). * - * > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + * > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. * * ## Example Usage * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketArgs.java index f2b32489c4..e97144670c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketArgs.java @@ -32,14 +32,14 @@ public Output name() { } /** - * 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. + * 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. * */ @Import(name="project") private @Nullable Output project; /** - * @return 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. + * @return 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. * */ public Optional> project() { @@ -93,7 +93,7 @@ public Builder name(String name) { } /** - * @param project 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. + * @param project 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. * * @return builder * @@ -104,7 +104,7 @@ public Builder project(@Nullable Output project) { } /** - * @param project 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. + * @param project 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketPlainArgs.java index 53a170848f..f65ee5ef20 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketPlainArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/GetBucketPlainArgs.java @@ -31,14 +31,14 @@ public String name() { } /** - * 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. + * 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. * */ @Import(name="project") private @Nullable String project; /** - * @return 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. + * @return 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. * */ public Optional project() { @@ -82,7 +82,7 @@ public Builder name(String name) { } /** - * @param project 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. + * @param project 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. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/V2QueuedResource.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/V2QueuedResource.java new file mode 100644 index 0000000000..41f28fe909 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/V2QueuedResource.java @@ -0,0 +1,223 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tpu; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.tpu.V2QueuedResourceArgs; +import com.pulumi.gcp.tpu.inputs.V2QueuedResourceState; +import com.pulumi.gcp.tpu.outputs.V2QueuedResourceTpu; +import java.lang.String; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## Example Usage + * + * ### Tpu V2 Queued Resource Basic + * + * <!--Start PulumiCodeChooser --> + *
+ * {@code
+ * package generated_program;
+ * 
+ * import com.pulumi.Context;
+ * import com.pulumi.Pulumi;
+ * import com.pulumi.core.Output;
+ * import com.pulumi.gcp.tpu.V2QueuedResource;
+ * import com.pulumi.gcp.tpu.V2QueuedResourceArgs;
+ * import com.pulumi.gcp.tpu.inputs.V2QueuedResourceTpuArgs;
+ * import java.util.List;
+ * import java.util.ArrayList;
+ * import java.util.Map;
+ * import java.io.File;
+ * import java.nio.file.Files;
+ * import java.nio.file.Paths;
+ * 
+ * public class App {
+ *     public static void main(String[] args) {
+ *         Pulumi.run(App::stack);
+ *     }
+ * 
+ *     public static void stack(Context ctx) {
+ *         var qr = new V2QueuedResource("qr", V2QueuedResourceArgs.builder()
+ *             .name("test-qr")
+ *             .zone("us-central1-c")
+ *             .project("my-project-name")
+ *             .tpu(V2QueuedResourceTpuArgs.builder()
+ *                 .nodeSpecs(V2QueuedResourceTpuNodeSpecArgs.builder()
+ *                     .parent("projects/my-project-name/locations/us-central1-c")
+ *                     .nodeId("test-tpu")
+ *                     .node(V2QueuedResourceTpuNodeSpecNodeArgs.builder()
+ *                         .runtimeVersion("tpu-vm-tf-2.13.0")
+ *                         .acceleratorType("v2-8")
+ *                         .description("Text description of the TPU.")
+ *                         .build())
+ *                     .build())
+ *                 .build())
+ *             .build());
+ * 
+ *     }
+ * }
+ * }
+ * 
+ * <!--End PulumiCodeChooser --> + * + * ## Import + * + * QueuedResource can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{zone}}/queuedResources/{{name}}` + * + * * `{{project}}/{{zone}}/{{name}}` + * + * * `{{zone}}/{{name}}` + * + * * `{{name}}` + * + * When using the `pulumi import` command, QueuedResource can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default projects/{{project}}/locations/{{zone}}/queuedResources/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{project}}/{{zone}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{zone}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{name}} + * ``` + * + */ +@ResourceType(type="gcp:tpu/v2QueuedResource:V2QueuedResource") +public class V2QueuedResource extends com.pulumi.resources.CustomResource { + /** + * The immutable name of the Queued Resource. + * + * *** + * + */ + @Export(name="name", refs={String.class}, tree="[0]") + private Output name; + + /** + * @return The immutable name of the Queued Resource. + * + * *** + * + */ + public Output name() { + return this.name; + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", refs={String.class}, tree="[0]") + private Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Output project() { + return this.project; + } + /** + * Defines a TPU resource. + * Structure is documented below. + * + */ + @Export(name="tpu", refs={V2QueuedResourceTpu.class}, tree="[0]") + private Output tpu; + + /** + * @return Defines a TPU resource. + * Structure is documented below. + * + */ + public Output> tpu() { + return Codegen.optional(this.tpu); + } + /** + * The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + */ + @Export(name="zone", refs={String.class}, tree="[0]") + private Output zone; + + /** + * @return The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + */ + public Output zone() { + return this.zone; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public V2QueuedResource(java.lang.String name) { + this(name, V2QueuedResourceArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public V2QueuedResource(java.lang.String name, @Nullable V2QueuedResourceArgs args) { + this(name, args, null); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + * @param options A bag of options that control this resource's behavior. + */ + public V2QueuedResource(java.lang.String name, @Nullable V2QueuedResourceArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:tpu/v2QueuedResource:V2QueuedResource", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false); + } + + private V2QueuedResource(java.lang.String name, Output id, @Nullable V2QueuedResourceState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:tpu/v2QueuedResource:V2QueuedResource", name, state, makeResourceOptions(options, id), false); + } + + private static V2QueuedResourceArgs makeArgs(@Nullable V2QueuedResourceArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + if (options != null && options.getUrn().isPresent()) { + return null; + } + return args == null ? V2QueuedResourceArgs.Empty : args; + } + + private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) { + var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder() + .version(Utilities.getVersion()) + .build(); + return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); + } + + /** + * Get an existing Host resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state + * @param options Optional settings to control the behavior of the CustomResource. + */ + public static V2QueuedResource get(java.lang.String name, Output id, @Nullable V2QueuedResourceState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new V2QueuedResource(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/V2QueuedResourceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/V2QueuedResourceArgs.java new file mode 100644 index 0000000000..831a757213 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/V2QueuedResourceArgs.java @@ -0,0 +1,211 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tpu; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.tpu.inputs.V2QueuedResourceTpuArgs; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class V2QueuedResourceArgs extends com.pulumi.resources.ResourceArgs { + + public static final V2QueuedResourceArgs Empty = new V2QueuedResourceArgs(); + + /** + * The immutable name of the Queued Resource. + * + * *** + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The immutable name of the Queued Resource. + * + * *** + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Defines a TPU resource. + * Structure is documented below. + * + */ + @Import(name="tpu") + private @Nullable Output tpu; + + /** + * @return Defines a TPU resource. + * Structure is documented below. + * + */ + public Optional> tpu() { + return Optional.ofNullable(this.tpu); + } + + /** + * The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + */ + @Import(name="zone") + private @Nullable Output zone; + + /** + * @return The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + */ + public Optional> zone() { + return Optional.ofNullable(this.zone); + } + + private V2QueuedResourceArgs() {} + + private V2QueuedResourceArgs(V2QueuedResourceArgs $) { + this.name = $.name; + this.project = $.project; + this.tpu = $.tpu; + this.zone = $.zone; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(V2QueuedResourceArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private V2QueuedResourceArgs $; + + public Builder() { + $ = new V2QueuedResourceArgs(); + } + + public Builder(V2QueuedResourceArgs defaults) { + $ = new V2QueuedResourceArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param name The immutable name of the Queued Resource. + * + * *** + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The immutable name of the Queued Resource. + * + * *** + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param tpu Defines a TPU resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder tpu(@Nullable Output tpu) { + $.tpu = tpu; + return this; + } + + /** + * @param tpu Defines a TPU resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder tpu(V2QueuedResourceTpuArgs tpu) { + return tpu(Output.of(tpu)); + } + + /** + * @param zone The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + * @return builder + * + */ + public Builder zone(@Nullable Output zone) { + $.zone = zone; + return this; + } + + /** + * @param zone The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + * @return builder + * + */ + public Builder zone(String zone) { + return zone(Output.of(zone)); + } + + public V2QueuedResourceArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceState.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceState.java new file mode 100644 index 0000000000..9d5dbc2d5f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceState.java @@ -0,0 +1,211 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tpu.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.tpu.inputs.V2QueuedResourceTpuArgs; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class V2QueuedResourceState extends com.pulumi.resources.ResourceArgs { + + public static final V2QueuedResourceState Empty = new V2QueuedResourceState(); + + /** + * The immutable name of the Queued Resource. + * + * *** + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The immutable name of the Queued Resource. + * + * *** + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Defines a TPU resource. + * Structure is documented below. + * + */ + @Import(name="tpu") + private @Nullable Output tpu; + + /** + * @return Defines a TPU resource. + * Structure is documented below. + * + */ + public Optional> tpu() { + return Optional.ofNullable(this.tpu); + } + + /** + * The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + */ + @Import(name="zone") + private @Nullable Output zone; + + /** + * @return The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + */ + public Optional> zone() { + return Optional.ofNullable(this.zone); + } + + private V2QueuedResourceState() {} + + private V2QueuedResourceState(V2QueuedResourceState $) { + this.name = $.name; + this.project = $.project; + this.tpu = $.tpu; + this.zone = $.zone; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(V2QueuedResourceState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private V2QueuedResourceState $; + + public Builder() { + $ = new V2QueuedResourceState(); + } + + public Builder(V2QueuedResourceState defaults) { + $ = new V2QueuedResourceState(Objects.requireNonNull(defaults)); + } + + /** + * @param name The immutable name of the Queued Resource. + * + * *** + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The immutable name of the Queued Resource. + * + * *** + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param tpu Defines a TPU resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder tpu(@Nullable Output tpu) { + $.tpu = tpu; + return this; + } + + /** + * @param tpu Defines a TPU resource. + * Structure is documented below. + * + * @return builder + * + */ + public Builder tpu(V2QueuedResourceTpuArgs tpu) { + return tpu(Output.of(tpu)); + } + + /** + * @param zone The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + * @return builder + * + */ + public Builder zone(@Nullable Output zone) { + $.zone = zone; + return this; + } + + /** + * @param zone The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + * + * @return builder + * + */ + public Builder zone(String zone) { + return zone(Output.of(zone)); + } + + public V2QueuedResourceState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceTpuArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceTpuArgs.java new file mode 100644 index 0000000000..50bb9b6cf8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceTpuArgs.java @@ -0,0 +1,99 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tpu.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.tpu.inputs.V2QueuedResourceTpuNodeSpecArgs; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class V2QueuedResourceTpuArgs extends com.pulumi.resources.ResourceArgs { + + public static final V2QueuedResourceTpuArgs Empty = new V2QueuedResourceTpuArgs(); + + /** + * The TPU node(s) being requested. + * Structure is documented below. + * + */ + @Import(name="nodeSpecs") + private @Nullable Output> nodeSpecs; + + /** + * @return The TPU node(s) being requested. + * Structure is documented below. + * + */ + public Optional>> nodeSpecs() { + return Optional.ofNullable(this.nodeSpecs); + } + + private V2QueuedResourceTpuArgs() {} + + private V2QueuedResourceTpuArgs(V2QueuedResourceTpuArgs $) { + this.nodeSpecs = $.nodeSpecs; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(V2QueuedResourceTpuArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private V2QueuedResourceTpuArgs $; + + public Builder() { + $ = new V2QueuedResourceTpuArgs(); + } + + public Builder(V2QueuedResourceTpuArgs defaults) { + $ = new V2QueuedResourceTpuArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param nodeSpecs The TPU node(s) being requested. + * Structure is documented below. + * + * @return builder + * + */ + public Builder nodeSpecs(@Nullable Output> nodeSpecs) { + $.nodeSpecs = nodeSpecs; + return this; + } + + /** + * @param nodeSpecs The TPU node(s) being requested. + * Structure is documented below. + * + * @return builder + * + */ + public Builder nodeSpecs(List nodeSpecs) { + return nodeSpecs(Output.of(nodeSpecs)); + } + + /** + * @param nodeSpecs The TPU node(s) being requested. + * Structure is documented below. + * + * @return builder + * + */ + public Builder nodeSpecs(V2QueuedResourceTpuNodeSpecArgs... nodeSpecs) { + return nodeSpecs(List.of(nodeSpecs)); + } + + public V2QueuedResourceTpuArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceTpuNodeSpecArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceTpuNodeSpecArgs.java new file mode 100644 index 0000000000..81c1365175 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceTpuNodeSpecArgs.java @@ -0,0 +1,169 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tpu.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.tpu.inputs.V2QueuedResourceTpuNodeSpecNodeArgs; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class V2QueuedResourceTpuNodeSpecArgs extends com.pulumi.resources.ResourceArgs { + + public static final V2QueuedResourceTpuNodeSpecArgs Empty = new V2QueuedResourceTpuNodeSpecArgs(); + + /** + * The node. + * Structure is documented below. + * + */ + @Import(name="node", required=true) + private Output node; + + /** + * @return The node. + * Structure is documented below. + * + */ + public Output node() { + return this.node; + } + + /** + * Unqualified node identifier used to identify the node in the project once provisioned. + * + */ + @Import(name="nodeId") + private @Nullable Output nodeId; + + /** + * @return Unqualified node identifier used to identify the node in the project once provisioned. + * + */ + public Optional> nodeId() { + return Optional.ofNullable(this.nodeId); + } + + /** + * The parent resource name. + * + */ + @Import(name="parent", required=true) + private Output parent; + + /** + * @return The parent resource name. + * + */ + public Output parent() { + return this.parent; + } + + private V2QueuedResourceTpuNodeSpecArgs() {} + + private V2QueuedResourceTpuNodeSpecArgs(V2QueuedResourceTpuNodeSpecArgs $) { + this.node = $.node; + this.nodeId = $.nodeId; + this.parent = $.parent; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(V2QueuedResourceTpuNodeSpecArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private V2QueuedResourceTpuNodeSpecArgs $; + + public Builder() { + $ = new V2QueuedResourceTpuNodeSpecArgs(); + } + + public Builder(V2QueuedResourceTpuNodeSpecArgs defaults) { + $ = new V2QueuedResourceTpuNodeSpecArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param node The node. + * Structure is documented below. + * + * @return builder + * + */ + public Builder node(Output node) { + $.node = node; + return this; + } + + /** + * @param node The node. + * Structure is documented below. + * + * @return builder + * + */ + public Builder node(V2QueuedResourceTpuNodeSpecNodeArgs node) { + return node(Output.of(node)); + } + + /** + * @param nodeId Unqualified node identifier used to identify the node in the project once provisioned. + * + * @return builder + * + */ + public Builder nodeId(@Nullable Output nodeId) { + $.nodeId = nodeId; + return this; + } + + /** + * @param nodeId Unqualified node identifier used to identify the node in the project once provisioned. + * + * @return builder + * + */ + public Builder nodeId(String nodeId) { + return nodeId(Output.of(nodeId)); + } + + /** + * @param parent The parent resource name. + * + * @return builder + * + */ + public Builder parent(Output parent) { + $.parent = parent; + return this; + } + + /** + * @param parent The parent resource name. + * + * @return builder + * + */ + public Builder parent(String parent) { + return parent(Output.of(parent)); + } + + public V2QueuedResourceTpuNodeSpecArgs build() { + if ($.node == null) { + throw new MissingRequiredPropertyException("V2QueuedResourceTpuNodeSpecArgs", "node"); + } + if ($.parent == null) { + throw new MissingRequiredPropertyException("V2QueuedResourceTpuNodeSpecArgs", "parent"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceTpuNodeSpecNodeArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceTpuNodeSpecNodeArgs.java new file mode 100644 index 0000000000..6ba653730d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2QueuedResourceTpuNodeSpecNodeArgs.java @@ -0,0 +1,161 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tpu.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class V2QueuedResourceTpuNodeSpecNodeArgs extends com.pulumi.resources.ResourceArgs { + + public static final V2QueuedResourceTpuNodeSpecNodeArgs Empty = new V2QueuedResourceTpuNodeSpecNodeArgs(); + + /** + * TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + * + */ + @Import(name="acceleratorType") + private @Nullable Output acceleratorType; + + /** + * @return TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + * + */ + public Optional> acceleratorType() { + return Optional.ofNullable(this.acceleratorType); + } + + /** + * Text description of the TPU. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return Text description of the TPU. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * Runtime version for the TPU. + * + */ + @Import(name="runtimeVersion", required=true) + private Output runtimeVersion; + + /** + * @return Runtime version for the TPU. + * + */ + public Output runtimeVersion() { + return this.runtimeVersion; + } + + private V2QueuedResourceTpuNodeSpecNodeArgs() {} + + private V2QueuedResourceTpuNodeSpecNodeArgs(V2QueuedResourceTpuNodeSpecNodeArgs $) { + this.acceleratorType = $.acceleratorType; + this.description = $.description; + this.runtimeVersion = $.runtimeVersion; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(V2QueuedResourceTpuNodeSpecNodeArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private V2QueuedResourceTpuNodeSpecNodeArgs $; + + public Builder() { + $ = new V2QueuedResourceTpuNodeSpecNodeArgs(); + } + + public Builder(V2QueuedResourceTpuNodeSpecNodeArgs defaults) { + $ = new V2QueuedResourceTpuNodeSpecNodeArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param acceleratorType TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + * + * @return builder + * + */ + public Builder acceleratorType(@Nullable Output acceleratorType) { + $.acceleratorType = acceleratorType; + return this; + } + + /** + * @param acceleratorType TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + * + * @return builder + * + */ + public Builder acceleratorType(String acceleratorType) { + return acceleratorType(Output.of(acceleratorType)); + } + + /** + * @param description Text description of the TPU. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description Text description of the TPU. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param runtimeVersion Runtime version for the TPU. + * + * @return builder + * + */ + public Builder runtimeVersion(Output runtimeVersion) { + $.runtimeVersion = runtimeVersion; + return this; + } + + /** + * @param runtimeVersion Runtime version for the TPU. + * + * @return builder + * + */ + public Builder runtimeVersion(String runtimeVersion) { + return runtimeVersion(Output.of(runtimeVersion)); + } + + public V2QueuedResourceTpuNodeSpecNodeArgs build() { + if ($.runtimeVersion == null) { + throw new MissingRequiredPropertyException("V2QueuedResourceTpuNodeSpecNodeArgs", "runtimeVersion"); + } + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2VmAcceleratorConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2VmAcceleratorConfigArgs.java index d99a960444..4273e8e760 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2VmAcceleratorConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/inputs/V2VmAcceleratorConfigArgs.java @@ -30,16 +30,14 @@ public Output topology() { } /** - * Type of TPU. - * Possible values are: `V2`, `V3`, `V4`, `V5P`. + * Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type * */ @Import(name="type", required=true) private Output type; /** - * @return Type of TPU. - * Possible values are: `V2`, `V3`, `V4`, `V5P`. + * @return Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type * */ public Output type() { @@ -93,8 +91,7 @@ public Builder topology(String topology) { } /** - * @param type Type of TPU. - * Possible values are: `V2`, `V3`, `V4`, `V5P`. + * @param type Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type * * @return builder * @@ -105,8 +102,7 @@ public Builder type(Output type) { } /** - * @param type Type of TPU. - * Possible values are: `V2`, `V3`, `V4`, `V5P`. + * @param type Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2QueuedResourceTpu.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2QueuedResourceTpu.java new file mode 100644 index 0000000000..f5debadd54 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2QueuedResourceTpu.java @@ -0,0 +1,62 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tpu.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.tpu.outputs.V2QueuedResourceTpuNodeSpec; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; + +@CustomType +public final class V2QueuedResourceTpu { + /** + * @return The TPU node(s) being requested. + * Structure is documented below. + * + */ + private @Nullable List nodeSpecs; + + private V2QueuedResourceTpu() {} + /** + * @return The TPU node(s) being requested. + * Structure is documented below. + * + */ + public List nodeSpecs() { + return this.nodeSpecs == null ? List.of() : this.nodeSpecs; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(V2QueuedResourceTpu defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List nodeSpecs; + public Builder() {} + public Builder(V2QueuedResourceTpu defaults) { + Objects.requireNonNull(defaults); + this.nodeSpecs = defaults.nodeSpecs; + } + + @CustomType.Setter + public Builder nodeSpecs(@Nullable List nodeSpecs) { + + this.nodeSpecs = nodeSpecs; + return this; + } + public Builder nodeSpecs(V2QueuedResourceTpuNodeSpec... nodeSpecs) { + return nodeSpecs(List.of(nodeSpecs)); + } + public V2QueuedResourceTpu build() { + final var _resultValue = new V2QueuedResourceTpu(); + _resultValue.nodeSpecs = nodeSpecs; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2QueuedResourceTpuNodeSpec.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2QueuedResourceTpuNodeSpec.java new file mode 100644 index 0000000000..4273265421 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2QueuedResourceTpuNodeSpec.java @@ -0,0 +1,107 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tpu.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import com.pulumi.gcp.tpu.outputs.V2QueuedResourceTpuNodeSpecNode; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class V2QueuedResourceTpuNodeSpec { + /** + * @return The node. + * Structure is documented below. + * + */ + private V2QueuedResourceTpuNodeSpecNode node; + /** + * @return Unqualified node identifier used to identify the node in the project once provisioned. + * + */ + private @Nullable String nodeId; + /** + * @return The parent resource name. + * + */ + private String parent; + + private V2QueuedResourceTpuNodeSpec() {} + /** + * @return The node. + * Structure is documented below. + * + */ + public V2QueuedResourceTpuNodeSpecNode node() { + return this.node; + } + /** + * @return Unqualified node identifier used to identify the node in the project once provisioned. + * + */ + public Optional nodeId() { + return Optional.ofNullable(this.nodeId); + } + /** + * @return The parent resource name. + * + */ + public String parent() { + return this.parent; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(V2QueuedResourceTpuNodeSpec defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private V2QueuedResourceTpuNodeSpecNode node; + private @Nullable String nodeId; + private String parent; + public Builder() {} + public Builder(V2QueuedResourceTpuNodeSpec defaults) { + Objects.requireNonNull(defaults); + this.node = defaults.node; + this.nodeId = defaults.nodeId; + this.parent = defaults.parent; + } + + @CustomType.Setter + public Builder node(V2QueuedResourceTpuNodeSpecNode node) { + if (node == null) { + throw new MissingRequiredPropertyException("V2QueuedResourceTpuNodeSpec", "node"); + } + this.node = node; + return this; + } + @CustomType.Setter + public Builder nodeId(@Nullable String nodeId) { + + this.nodeId = nodeId; + return this; + } + @CustomType.Setter + public Builder parent(String parent) { + if (parent == null) { + throw new MissingRequiredPropertyException("V2QueuedResourceTpuNodeSpec", "parent"); + } + this.parent = parent; + return this; + } + public V2QueuedResourceTpuNodeSpec build() { + final var _resultValue = new V2QueuedResourceTpuNodeSpec(); + _resultValue.node = node; + _resultValue.nodeId = nodeId; + _resultValue.parent = parent; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2QueuedResourceTpuNodeSpecNode.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2QueuedResourceTpuNodeSpecNode.java new file mode 100644 index 0000000000..0f5fbb11da --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2QueuedResourceTpuNodeSpecNode.java @@ -0,0 +1,102 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tpu.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.exceptions.MissingRequiredPropertyException; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class V2QueuedResourceTpuNodeSpecNode { + /** + * @return TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + * + */ + private @Nullable String acceleratorType; + /** + * @return Text description of the TPU. + * + */ + private @Nullable String description; + /** + * @return Runtime version for the TPU. + * + */ + private String runtimeVersion; + + private V2QueuedResourceTpuNodeSpecNode() {} + /** + * @return TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + * + */ + public Optional acceleratorType() { + return Optional.ofNullable(this.acceleratorType); + } + /** + * @return Text description of the TPU. + * + */ + public Optional description() { + return Optional.ofNullable(this.description); + } + /** + * @return Runtime version for the TPU. + * + */ + public String runtimeVersion() { + return this.runtimeVersion; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(V2QueuedResourceTpuNodeSpecNode defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String acceleratorType; + private @Nullable String description; + private String runtimeVersion; + public Builder() {} + public Builder(V2QueuedResourceTpuNodeSpecNode defaults) { + Objects.requireNonNull(defaults); + this.acceleratorType = defaults.acceleratorType; + this.description = defaults.description; + this.runtimeVersion = defaults.runtimeVersion; + } + + @CustomType.Setter + public Builder acceleratorType(@Nullable String acceleratorType) { + + this.acceleratorType = acceleratorType; + return this; + } + @CustomType.Setter + public Builder description(@Nullable String description) { + + this.description = description; + return this; + } + @CustomType.Setter + public Builder runtimeVersion(String runtimeVersion) { + if (runtimeVersion == null) { + throw new MissingRequiredPropertyException("V2QueuedResourceTpuNodeSpecNode", "runtimeVersion"); + } + this.runtimeVersion = runtimeVersion; + return this; + } + public V2QueuedResourceTpuNodeSpecNode build() { + final var _resultValue = new V2QueuedResourceTpuNodeSpecNode(); + _resultValue.acceleratorType = acceleratorType; + _resultValue.description = description; + _resultValue.runtimeVersion = runtimeVersion; + return _resultValue; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2VmAcceleratorConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2VmAcceleratorConfig.java index 0660f57224..db4b2aaa03 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2VmAcceleratorConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/outputs/V2VmAcceleratorConfig.java @@ -16,8 +16,7 @@ public final class V2VmAcceleratorConfig { */ private String topology; /** - * @return Type of TPU. - * Possible values are: `V2`, `V3`, `V4`, `V5P`. + * @return Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type * */ private String type; @@ -31,8 +30,7 @@ public String topology() { return this.topology; } /** - * @return Type of TPU. - * Possible values are: `V2`, `V3`, `V4`, `V5P`. + * @return Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type * */ public String type() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiEndpoint.java b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiEndpoint.java index 4924c8fa22..a995d86217 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiEndpoint.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiEndpoint.java @@ -170,7 +170,7 @@ * final var project = OrganizationsFunctions.getProject(); * * var endpoint = new AiEndpoint("endpoint", AiEndpointArgs.builder() - * .name("endpoint-name_69391") + * .name("endpoint-name_8270") * .displayName("sample-endpoint") * .description("A sample vertex endpoint") * .location("us-central1") @@ -216,7 +216,7 @@ * * public static void stack(Context ctx) { * var endpoint = new AiEndpoint("endpoint", AiEndpointArgs.builder() - * .name("endpoint-name_8270") + * .name("endpoint-name_41150") * .displayName("sample-endpoint") * .description("A sample vertex endpoint") * .location("us-central1") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiFeatureOnlineStoreFeatureview.java b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiFeatureOnlineStoreFeatureview.java index 68be101850..b70e3906cf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiFeatureOnlineStoreFeatureview.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiFeatureOnlineStoreFeatureview.java @@ -328,8 +328,8 @@ * final var testProject = OrganizationsFunctions.getProject(); * * var project = new Project("project", ProjectArgs.builder() - * .projectId("tf-test_41150") - * .name("tf-test_89313") + * .projectId("tf-test_89313") + * .name("tf-test_60646") * .orgId("123456789") * .billingAccount("000000-0000000-0000000-000000") * .deletionPolicy("DELETE") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiIndexEndpoint.java b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiIndexEndpoint.java index ee3d2b8ee1..a8590a9854 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiIndexEndpoint.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/vertex/AiIndexEndpoint.java @@ -133,7 +133,7 @@ * .labels(Map.of("label-one", "value-one")) * .privateServiceConnectConfig(AiIndexEndpointPrivateServiceConnectConfigArgs.builder() * .enablePrivateServiceConnect(true) - * .projectAllowlists(project.applyValue(getProjectResult -> getProjectResult.number())) + * .projectAllowlists(project.applyValue(getProjectResult -> getProjectResult.name())) * .build()) * .build()); * diff --git a/sdk/nodejs/accesscontextmanager/servicePerimeter.ts b/sdk/nodejs/accesscontextmanager/servicePerimeter.ts index 6815b53adf..06de392fc8 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeter.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeter.ts @@ -256,6 +256,12 @@ export class ServicePerimeter extends pulumi.CustomResource { * behavior. */ public readonly description!: pulumi.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 /*out*/ readonly etag!: pulumi.Output; /** * Resource name for the ServicePerimeter. The shortName component must * begin with a letter and only include alphanumeric and '_'. @@ -340,6 +346,7 @@ export class ServicePerimeter extends pulumi.CustomResource { const state = argsOrState as ServicePerimeterState | undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; resourceInputs["description"] = state ? state.description : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; resourceInputs["name"] = state ? state.name : undefined; resourceInputs["parent"] = state ? state.parent : undefined; resourceInputs["perimeterType"] = state ? state.perimeterType : undefined; @@ -365,6 +372,7 @@ export class ServicePerimeter extends pulumi.CustomResource { resourceInputs["title"] = args ? args.title : undefined; resourceInputs["useExplicitDryRunSpec"] = args ? args.useExplicitDryRunSpec : undefined; resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["etag"] = undefined /*out*/; resourceInputs["updateTime"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); @@ -385,6 +393,12 @@ export interface ServicePerimeterState { * behavior. */ description?: pulumi.Input; + /** + * 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. + */ + etag?: pulumi.Input; /** * Resource name for the ServicePerimeter. The shortName component must * begin with a letter and only include alphanumeric and '_'. diff --git a/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunEgressPolicy.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunEgressPolicy.ts index bd38c3a225..a1296c11d5 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunEgressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunEgressPolicy.ts @@ -19,6 +19,9 @@ import * as utilities from "../utilities"; * > **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 `createBeforeDestroy = 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 `ignoreChanges = [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/nodejs/accesscontextmanager/servicePerimeterDryRunIngressPolicy.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunIngressPolicy.ts index f1ad91d07c..f4ab3f3e07 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunIngressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterDryRunIngressPolicy.ts @@ -20,6 +20,9 @@ import * as utilities from "../utilities"; * > **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 `createBeforeDestroy = 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 `ignoreChanges = [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/nodejs/accesscontextmanager/servicePerimeterEgressPolicy.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterEgressPolicy.ts index f98a1bb3f9..95b28a884e 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterEgressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterEgressPolicy.ts @@ -19,6 +19,9 @@ import * as utilities from "../utilities"; * > **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 `createBeforeDestroy = 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 `ignoreChanges = [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/nodejs/accesscontextmanager/servicePerimeterIngressPolicy.ts b/sdk/nodejs/accesscontextmanager/servicePerimeterIngressPolicy.ts index d845293b07..d7e9cee7a7 100644 --- a/sdk/nodejs/accesscontextmanager/servicePerimeterIngressPolicy.ts +++ b/sdk/nodejs/accesscontextmanager/servicePerimeterIngressPolicy.ts @@ -20,6 +20,9 @@ import * as utilities from "../utilities"; * > **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 `createBeforeDestroy = 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 `ignoreChanges = [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/nodejs/apigee/appGroup.ts b/sdk/nodejs/apigee/appGroup.ts index 92f100ddd2..fb99a12331 100644 --- a/sdk/nodejs/apigee/appGroup.ts +++ b/sdk/nodejs/apigee/appGroup.ts @@ -172,7 +172,7 @@ export class AppGroup extends pulumi.CustomResource { */ public readonly attributes!: pulumi.Output; /** - * Channel identifier identifies the owner maintaing this grouping. + * Channel identifier identifies the owner maintaining this grouping. */ public readonly channelId!: pulumi.Output; /** @@ -273,7 +273,7 @@ export interface AppGroupState { */ attributes?: pulumi.Input[]>; /** - * Channel identifier identifies the owner maintaing this grouping. + * Channel identifier identifies the owner maintaining this grouping. */ channelId?: pulumi.Input; /** @@ -325,7 +325,7 @@ export interface AppGroupArgs { */ attributes?: pulumi.Input[]>; /** - * Channel identifier identifies the owner maintaing this grouping. + * Channel identifier identifies the owner maintaining this grouping. */ channelId?: pulumi.Input; /** diff --git a/sdk/nodejs/applicationintegration/client.ts b/sdk/nodejs/applicationintegration/client.ts index 4d94d25646..6adc049a65 100644 --- a/sdk/nodejs/applicationintegration/client.ts +++ b/sdk/nodejs/applicationintegration/client.ts @@ -31,6 +31,7 @@ import * as utilities from "../utilities"; * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; + * import * as std from "@pulumi/std"; * * const testProject = gcp.organizations.getProject({}); * const keyring = new gcp.kms.KeyRing("keyring", { @@ -53,9 +54,15 @@ import * as utilities from "../utilities"; * runAsServiceAccount: serviceAccount.email, * cloudKmsConfig: { * kmsLocation: "us-east1", - * kmsRing: keyring.id, - * key: cryptokey.id, - * keyVersion: testKey.id, + * kmsRing: std.basenameOutput({ + * input: keyring.id, + * }).apply(invoke => invoke.result), + * key: std.basenameOutput({ + * input: cryptokey.id, + * }).apply(invoke => invoke.result), + * keyVersion: std.basenameOutput({ + * input: testKey.id, + * }).apply(invoke => invoke.result), * kmsProjectId: testProject.then(testProject => testProject.projectId), * }, * }); diff --git a/sdk/nodejs/artifactregistry/repository.ts b/sdk/nodejs/artifactregistry/repository.ts index d28922d407..1c56a8ed1b 100644 --- a/sdk/nodejs/artifactregistry/repository.ts +++ b/sdk/nodejs/artifactregistry/repository.ts @@ -475,6 +475,76 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Artifact Registry Repository Remote Common Repository With Artifact Registry Uri + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const project = gcp.organizations.getProject({}); + * const upstreamRepo = new gcp.artifactregistry.Repository("upstream_repo", { + * location: "us-central1", + * repositoryId: "example-upstream-repo", + * description: "example upstream repository", + * format: "DOCKER", + * }); + * const my_repo = new gcp.artifactregistry.Repository("my-repo", { + * location: "us-central1", + * repositoryId: "example-common-remote", + * description: "example remote common repository with docker upstream", + * format: "DOCKER", + * mode: "REMOTE_REPOSITORY", + * remoteRepositoryConfig: { + * description: "pull-through cache of another Artifact Registry repository by URL", + * commonRepository: { + * uri: "https://us-central1-docker.pkg.dev//example-upstream-repo", + * }, + * }, + * }); + * ``` + * ### Artifact Registry Repository Remote Common Repository With Custom Upstream + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const project = gcp.organizations.getProject({}); + * const example_remote_secret = new gcp.secretmanager.Secret("example-remote-secret", { + * secretId: "example-secret", + * replication: { + * auto: {}, + * }, + * }); + * const example_remote_secretVersion = new gcp.secretmanager.SecretVersion("example-remote-secret_version", { + * secret: example_remote_secret.id, + * secretData: "remote-password", + * }); + * const secret_access = new gcp.secretmanager.SecretIamMember("secret-access", { + * secretId: example_remote_secret.id, + * role: "roles/secretmanager.secretAccessor", + * member: project.then(project => `serviceAccount:service-${project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com`), + * }); + * const my_repo = new gcp.artifactregistry.Repository("my-repo", { + * location: "us-central1", + * repositoryId: "example-docker-custom-remote", + * description: "example remote custom docker repository with credentials", + * format: "DOCKER", + * mode: "REMOTE_REPOSITORY", + * remoteRepositoryConfig: { + * description: "custom common docker remote with credentials", + * disableUpstreamValidation: true, + * commonRepository: { + * uri: "https://registry-1.docker.io", + * }, + * upstreamCredentials: { + * usernamePasswordCredentials: { + * username: "remote-username", + * passwordSecretVersion: example_remote_secretVersion.name, + * }, + * }, + * }, + * }); + * ``` * * ## Import * diff --git a/sdk/nodejs/assuredworkloads/workload.ts b/sdk/nodejs/assuredworkloads/workload.ts index 21ae64289c..caf5c676ec 100644 --- a/sdk/nodejs/assuredworkloads/workload.ts +++ b/sdk/nodejs/assuredworkloads/workload.ts @@ -173,7 +173,7 @@ export class Workload extends pulumi.CustomResource { */ public readonly billingAccount!: pulumi.Output; /** - * 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 */ public readonly complianceRegime!: pulumi.Output; /** @@ -370,7 +370,7 @@ export interface WorkloadState { */ billingAccount?: pulumi.Input; /** - * 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 */ complianceRegime?: pulumi.Input; /** @@ -483,7 +483,7 @@ export interface WorkloadArgs { */ billingAccount?: pulumi.Input; /** - * 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 */ complianceRegime: pulumi.Input; /** diff --git a/sdk/nodejs/backupdisasterrecovery/backupPlan.ts b/sdk/nodejs/backupdisasterrecovery/backupPlan.ts index 331126f21a..0e32d22a69 100644 --- a/sdk/nodejs/backupdisasterrecovery/backupPlan.ts +++ b/sdk/nodejs/backupdisasterrecovery/backupPlan.ts @@ -17,7 +17,7 @@ import * as utilities from "../utilities"; * * const myBackupVault = new gcp.backupdisasterrecovery.BackupVault("my_backup_vault", { * location: "us-central1", - * backupVaultId: "bv-bp-test", + * backupVaultId: "backup-vault-simple-test", * backupMinimumEnforcedRetentionDuration: "100000s", * }); * const my_backup_plan_1 = new gcp.backupdisasterrecovery.BackupPlan("my-backup-plan-1", { diff --git a/sdk/nodejs/backupdisasterrecovery/backupVault.ts b/sdk/nodejs/backupdisasterrecovery/backupVault.ts index aac40ea537..f993521ad5 100644 --- a/sdk/nodejs/backupdisasterrecovery/backupVault.ts +++ b/sdk/nodejs/backupdisasterrecovery/backupVault.ts @@ -5,6 +5,8 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** + * Container to store and organize immutable and indelible backups. + * * ## Example Usage * * ### Backup Dr Backup Vault Full @@ -18,14 +20,14 @@ import * as utilities from "../utilities"; * 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/nodejs/backupdisasterrecovery/getBackup.ts b/sdk/nodejs/backupdisasterrecovery/getBackup.ts new file mode 100644 index 0000000000..5ff54ac829 --- /dev/null +++ b/sdk/nodejs/backupdisasterrecovery/getBackup.ts @@ -0,0 +1,62 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +export function getBackup(args: GetBackupArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("gcp:backupdisasterrecovery/getBackup:getBackup", { + "backupVaultId": args.backupVaultId, + "dataSourceId": args.dataSourceId, + "location": args.location, + "project": args.project, + }, opts); +} + +/** + * A collection of arguments for invoking getBackup. + */ +export interface GetBackupArgs { + backupVaultId: string; + dataSourceId: string; + location: string; + project: string; +} + +/** + * A collection of values returned by getBackup. + */ +export interface GetBackupResult { + readonly backupVaultId: string; + readonly backups: outputs.backupdisasterrecovery.GetBackupBackup[]; + readonly dataSourceId: string; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + readonly location: string; + readonly name: string; + readonly project: string; +} +export function getBackupOutput(args: GetBackupOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("gcp:backupdisasterrecovery/getBackup:getBackup", { + "backupVaultId": args.backupVaultId, + "dataSourceId": args.dataSourceId, + "location": args.location, + "project": args.project, + }, opts); +} + +/** + * A collection of arguments for invoking getBackup. + */ +export interface GetBackupOutputArgs { + backupVaultId: pulumi.Input; + dataSourceId: pulumi.Input; + location: pulumi.Input; + project: pulumi.Input; +} diff --git a/sdk/nodejs/backupdisasterrecovery/getBackupVault.ts b/sdk/nodejs/backupdisasterrecovery/getBackupVault.ts new file mode 100644 index 0000000000..b2df7e4070 --- /dev/null +++ b/sdk/nodejs/backupdisasterrecovery/getBackupVault.ts @@ -0,0 +1,131 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * A Backup and DRBackupVault. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const my-backup-vault = gcp.backupdisasterrecovery.getBackupVault({ + * location: "us-central1", + * backupVaultId: "bv-1", + * }); + * ``` + */ +export function getBackupVault(args: GetBackupVaultArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("gcp:backupdisasterrecovery/getBackupVault:getBackupVault", { + "backupVaultId": args.backupVaultId, + "location": args.location, + "project": args.project, + }, opts); +} + +/** + * A collection of arguments for invoking getBackupVault. + */ +export interface GetBackupVaultArgs { + /** + * The id of Backup Vault resource. + * + * - - - + */ + backupVaultId: string; + /** + * The location in which the Backup Vault resource belongs. + */ + location: string; + /** + * The project in which the resource belongs. If it + * is not provided, the provider project is used. + */ + project?: string; +} + +/** + * A collection of values returned by getBackupVault. + */ +export interface GetBackupVaultResult { + readonly accessRestriction: string; + readonly allowMissing: boolean; + readonly annotations: {[key: string]: string}; + readonly backupCount: string; + readonly backupMinimumEnforcedRetentionDuration: string; + readonly backupVaultId: string; + readonly createTime: string; + readonly deletable: boolean; + readonly description: string; + readonly effectiveAnnotations: {[key: string]: string}; + readonly effectiveLabels: {[key: string]: string}; + readonly effectiveTime: string; + readonly etag: string; + readonly forceDelete: boolean; + readonly forceUpdate: boolean; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + readonly ignoreBackupPlanReferences: boolean; + readonly ignoreInactiveDatasources: boolean; + readonly labels: {[key: string]: string}; + readonly location: string; + readonly name: string; + readonly project?: string; + readonly pulumiLabels: {[key: string]: string}; + readonly serviceAccount: string; + readonly state: string; + readonly totalStoredBytes: string; + readonly uid: string; + readonly updateTime: string; +} +/** + * A Backup and DRBackupVault. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const my-backup-vault = gcp.backupdisasterrecovery.getBackupVault({ + * location: "us-central1", + * backupVaultId: "bv-1", + * }); + * ``` + */ +export function getBackupVaultOutput(args: GetBackupVaultOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("gcp:backupdisasterrecovery/getBackupVault:getBackupVault", { + "backupVaultId": args.backupVaultId, + "location": args.location, + "project": args.project, + }, opts); +} + +/** + * A collection of arguments for invoking getBackupVault. + */ +export interface GetBackupVaultOutputArgs { + /** + * The id of Backup Vault resource. + * + * - - - + */ + backupVaultId: pulumi.Input; + /** + * The location in which the Backup Vault resource belongs. + */ + location: pulumi.Input; + /** + * The project in which the resource belongs. If it + * is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/backupdisasterrecovery/index.ts b/sdk/nodejs/backupdisasterrecovery/index.ts index 6c25d5caf0..8aa1375841 100644 --- a/sdk/nodejs/backupdisasterrecovery/index.ts +++ b/sdk/nodejs/backupdisasterrecovery/index.ts @@ -20,6 +20,11 @@ export type BackupVault = import("./backupVault").BackupVault; export const BackupVault: typeof import("./backupVault").BackupVault = null as any; utilities.lazyLoad(exports, ["BackupVault"], () => require("./backupVault")); +export { GetBackupArgs, GetBackupResult, GetBackupOutputArgs } from "./getBackup"; +export const getBackup: typeof import("./getBackup").getBackup = null as any; +export const getBackupOutput: typeof import("./getBackup").getBackupOutput = null as any; +utilities.lazyLoad(exports, ["getBackup","getBackupOutput"], () => require("./getBackup")); + export { GetBackupPlanArgs, GetBackupPlanResult, GetBackupPlanOutputArgs } from "./getBackupPlan"; export const getBackupPlan: typeof import("./getBackupPlan").getBackupPlan = null as any; export const getBackupPlanOutput: typeof import("./getBackupPlan").getBackupPlanOutput = null as any; @@ -30,6 +35,11 @@ export const getBackupPlanAssociation: typeof import("./getBackupPlanAssociation export const getBackupPlanAssociationOutput: typeof import("./getBackupPlanAssociation").getBackupPlanAssociationOutput = null as any; utilities.lazyLoad(exports, ["getBackupPlanAssociation","getBackupPlanAssociationOutput"], () => require("./getBackupPlanAssociation")); +export { GetBackupVaultArgs, GetBackupVaultResult, GetBackupVaultOutputArgs } from "./getBackupVault"; +export const getBackupVault: typeof import("./getBackupVault").getBackupVault = null as any; +export const getBackupVaultOutput: typeof import("./getBackupVault").getBackupVaultOutput = null as any; +utilities.lazyLoad(exports, ["getBackupVault","getBackupVaultOutput"], () => require("./getBackupVault")); + export { GetDataSourceArgs, GetDataSourceResult, GetDataSourceOutputArgs } from "./getDataSource"; export const getDataSource: typeof import("./getDataSource").getDataSource = null as any; export const getDataSourceOutput: typeof import("./getDataSource").getDataSourceOutput = null as any; diff --git a/sdk/nodejs/bigquery/appProfile.ts b/sdk/nodejs/bigquery/appProfile.ts index 7c1b9c3830..e5b4531dfc 100644 --- a/sdk/nodejs/bigquery/appProfile.ts +++ b/sdk/nodejs/bigquery/appProfile.ts @@ -245,6 +245,14 @@ export class AppProfile extends pulumi.CustomResource { * If it is not provided, the provider project is used. */ public readonly project!: pulumi.Output; + /** + * 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. + */ + public readonly rowAffinity!: pulumi.Output; /** * Use a single-cluster routing policy. * Structure is documented below. @@ -278,6 +286,7 @@ export class AppProfile extends pulumi.CustomResource { resourceInputs["multiClusterRoutingUseAny"] = state ? state.multiClusterRoutingUseAny : undefined; resourceInputs["name"] = state ? state.name : undefined; resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["rowAffinity"] = state ? state.rowAffinity : undefined; resourceInputs["singleClusterRouting"] = state ? state.singleClusterRouting : undefined; resourceInputs["standardIsolation"] = state ? state.standardIsolation : undefined; } else { @@ -293,6 +302,7 @@ export class AppProfile extends pulumi.CustomResource { resourceInputs["multiClusterRoutingClusterIds"] = args ? args.multiClusterRoutingClusterIds : undefined; resourceInputs["multiClusterRoutingUseAny"] = args ? args.multiClusterRoutingUseAny : undefined; resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["rowAffinity"] = args ? args.rowAffinity : undefined; resourceInputs["singleClusterRouting"] = args ? args.singleClusterRouting : undefined; resourceInputs["standardIsolation"] = args ? args.standardIsolation : undefined; resourceInputs["name"] = undefined /*out*/; @@ -350,6 +360,14 @@ export interface AppProfileState { * If it is not provided, the provider project is used. */ project?: pulumi.Input; + /** + * 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. + */ + rowAffinity?: pulumi.Input; /** * Use a single-cluster routing policy. * Structure is documented below. @@ -406,6 +424,14 @@ export interface AppProfileArgs { * If it is not provided, the provider project is used. */ project?: pulumi.Input; + /** + * 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. + */ + rowAffinity?: pulumi.Input; /** * Use a single-cluster routing policy. * Structure is documented below. diff --git a/sdk/nodejs/cloudbuild/workerPool.ts b/sdk/nodejs/cloudbuild/workerPool.ts index 194eeab9ee..078be16d80 100644 --- a/sdk/nodejs/cloudbuild/workerPool.ts +++ b/sdk/nodejs/cloudbuild/workerPool.ts @@ -159,6 +159,10 @@ export class WorkerPool extends pulumi.CustomResource { * Network configuration for the `WorkerPool`. Structure is documented below. */ public readonly networkConfig!: pulumi.Output; + /** + * Private Service Connect configuration for the pool. + */ + public readonly privateServiceConnect!: pulumi.Output; /** * The project for the resource */ @@ -201,6 +205,7 @@ export class WorkerPool extends pulumi.CustomResource { resourceInputs["location"] = state ? state.location : undefined; resourceInputs["name"] = state ? state.name : undefined; resourceInputs["networkConfig"] = state ? state.networkConfig : undefined; + resourceInputs["privateServiceConnect"] = state ? state.privateServiceConnect : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["state"] = state ? state.state : undefined; resourceInputs["uid"] = state ? state.uid : undefined; @@ -216,6 +221,7 @@ export class WorkerPool extends pulumi.CustomResource { resourceInputs["location"] = args ? args.location : undefined; resourceInputs["name"] = args ? args.name : undefined; resourceInputs["networkConfig"] = args ? args.networkConfig : undefined; + resourceInputs["privateServiceConnect"] = args ? args.privateServiceConnect : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["workerConfig"] = args ? args.workerConfig : undefined; resourceInputs["createTime"] = undefined /*out*/; @@ -268,6 +274,10 @@ export interface WorkerPoolState { * Network configuration for the `WorkerPool`. Structure is documented below. */ networkConfig?: pulumi.Input; + /** + * Private Service Connect configuration for the pool. + */ + privateServiceConnect?: pulumi.Input; /** * The project for the resource */ @@ -319,6 +329,10 @@ export interface WorkerPoolArgs { * Network configuration for the `WorkerPool`. Structure is documented below. */ networkConfig?: pulumi.Input; + /** + * Private Service Connect configuration for the pool. + */ + privateServiceConnect?: pulumi.Input; /** * The project for the resource */ diff --git a/sdk/nodejs/clouddeploy/target.ts b/sdk/nodejs/clouddeploy/target.ts index b2a470945e..e5a7b602eb 100644 --- a/sdk/nodejs/clouddeploy/target.ts +++ b/sdk/nodejs/clouddeploy/target.ts @@ -172,6 +172,10 @@ export class Target extends pulumi.CustomResource { * Information specifying an Anthos Cluster. */ public readonly anthosCluster!: pulumi.Output; + /** + * 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 readonly associatedEntities!: pulumi.Output; /** * Output only. Time at which the `Target` was created. */ @@ -272,6 +276,7 @@ export class Target extends pulumi.CustomResource { const state = argsOrState as TargetState | undefined; resourceInputs["annotations"] = state ? state.annotations : undefined; resourceInputs["anthosCluster"] = state ? state.anthosCluster : undefined; + resourceInputs["associatedEntities"] = state ? state.associatedEntities : undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; resourceInputs["customTarget"] = state ? state.customTarget : undefined; resourceInputs["deployParameters"] = state ? state.deployParameters : undefined; @@ -299,6 +304,7 @@ export class Target extends pulumi.CustomResource { } resourceInputs["annotations"] = args ? args.annotations : undefined; resourceInputs["anthosCluster"] = args ? args.anthosCluster : undefined; + resourceInputs["associatedEntities"] = args ? args.associatedEntities : undefined; resourceInputs["customTarget"] = args ? args.customTarget : undefined; resourceInputs["deployParameters"] = args ? args.deployParameters : undefined; resourceInputs["description"] = args ? args.description : undefined; @@ -342,6 +348,10 @@ export interface TargetState { * Information specifying an Anthos Cluster. */ anthosCluster?: pulumi.Input; + /** + * 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?$`. + */ + associatedEntities?: pulumi.Input[]>; /** * Output only. Time at which the `Target` was created. */ @@ -443,6 +453,10 @@ export interface TargetArgs { * Information specifying an Anthos Cluster. */ anthosCluster?: pulumi.Input; + /** + * 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?$`. + */ + associatedEntities?: pulumi.Input[]>; /** * Optional. Information specifying a Custom Target. */ diff --git a/sdk/nodejs/cloudrunv2/job.ts b/sdk/nodejs/cloudrunv2/job.ts index 575a9cca34..45d4b444c0 100644 --- a/sdk/nodejs/cloudrunv2/job.ts +++ b/sdk/nodejs/cloudrunv2/job.ts @@ -423,7 +423,7 @@ export class Job extends pulumi.CustomResource { */ public /*out*/ readonly executionCount!: pulumi.Output; /** - * 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. */ public /*out*/ readonly expireTime!: pulumi.Output; /** @@ -664,7 +664,7 @@ export interface JobState { */ executionCount?: pulumi.Input; /** - * 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. */ expireTime?: pulumi.Input; /** diff --git a/sdk/nodejs/cloudrunv2/service.ts b/sdk/nodejs/cloudrunv2/service.ts index eba348ebc6..c1aa788579 100644 --- a/sdk/nodejs/cloudrunv2/service.ts +++ b/sdk/nodejs/cloudrunv2/service.ts @@ -622,7 +622,7 @@ export class Service extends pulumi.CustomResource { */ public /*out*/ readonly etag!: pulumi.Output; /** - * 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. */ public /*out*/ readonly expireTime!: pulumi.Output; /** @@ -914,7 +914,7 @@ export interface ServiceState { */ etag?: pulumi.Input; /** - * 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. */ expireTime?: pulumi.Input; /** diff --git a/sdk/nodejs/composer/getUserWorkloadsConfigMap.ts b/sdk/nodejs/composer/getUserWorkloadsConfigMap.ts index 5a36d599ad..ba99e2760e 100644 --- a/sdk/nodejs/composer/getUserWorkloadsConfigMap.ts +++ b/sdk/nodejs/composer/getUserWorkloadsConfigMap.ts @@ -5,6 +5,8 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** + * Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment. + * * ## Example Usage * * ```typescript @@ -86,6 +88,8 @@ export interface GetUserWorkloadsConfigMapResult { readonly region?: string; } /** + * Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment. + * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/composer/getUserWorkloadsSecret.ts b/sdk/nodejs/composer/getUserWorkloadsSecret.ts index 4a1878fc20..2e7c04b493 100644 --- a/sdk/nodejs/composer/getUserWorkloadsSecret.ts +++ b/sdk/nodejs/composer/getUserWorkloadsSecret.ts @@ -5,6 +5,8 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** + * Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment. + * * ## Example Usage * * ```typescript @@ -87,6 +89,8 @@ export interface GetUserWorkloadsSecretResult { readonly region?: string; } /** + * Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment. + * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/composer/userWorkloadsConfigMap.ts b/sdk/nodejs/composer/userWorkloadsConfigMap.ts index 909ffd828f..ab432de258 100644 --- a/sdk/nodejs/composer/userWorkloadsConfigMap.ts +++ b/sdk/nodejs/composer/userWorkloadsConfigMap.ts @@ -5,6 +5,13 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** + * 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/nodejs/composer/userWorkloadsSecret.ts b/sdk/nodejs/composer/userWorkloadsSecret.ts index 9a941f0dc6..54b98b6410 100644 --- a/sdk/nodejs/composer/userWorkloadsSecret.ts +++ b/sdk/nodejs/composer/userWorkloadsSecret.ts @@ -5,6 +5,9 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** + * User workloads Secret used by Airflow tasks that run with Kubernetes Executor or KubernetesPodOperator. + * Intended for Composer 3 Environments. + * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/compute/disk.ts b/sdk/nodejs/compute/disk.ts index 026e466514..3c7bd83f8b 100644 --- a/sdk/nodejs/compute/disk.ts +++ b/sdk/nodejs/compute/disk.ts @@ -387,10 +387,12 @@ export class Disk extends pulumi.CustomResource { */ public /*out*/ readonly sourceSnapshotId!: pulumi.Output; /** - * 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 storagePool!: pulumi.Output; /** @@ -739,10 +741,12 @@ export interface DiskState { */ sourceSnapshotId?: pulumi.Input; /** - * 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} */ storagePool?: pulumi.Input; /** @@ -938,10 +942,12 @@ export interface DiskArgs { */ sourceSnapshotEncryptionKey?: pulumi.Input; /** - * 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} */ storagePool?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/firewallPolicyRule.ts b/sdk/nodejs/compute/firewallPolicyRule.ts index 328d169667..0861f8ab98 100644 --- a/sdk/nodejs/compute/firewallPolicyRule.ts +++ b/sdk/nodejs/compute/firewallPolicyRule.ts @@ -7,6 +7,12 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** + * 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/nodejs/compute/getForwardingRules.ts b/sdk/nodejs/compute/getForwardingRules.ts index 4b4a0dece1..ee3fb6a4a9 100644 --- a/sdk/nodejs/compute/getForwardingRules.ts +++ b/sdk/nodejs/compute/getForwardingRules.ts @@ -41,7 +41,7 @@ export interface GetForwardingRulesArgs { /** * 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. */ region?: string; } @@ -102,7 +102,7 @@ export interface GetForwardingRulesOutputArgs { /** * 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. */ region?: pulumi.Input; } diff --git a/sdk/nodejs/compute/getGlobalForwardingRule.ts b/sdk/nodejs/compute/getGlobalForwardingRule.ts index 3e57ca27de..9ca9ea2487 100644 --- a/sdk/nodejs/compute/getGlobalForwardingRule.ts +++ b/sdk/nodejs/compute/getGlobalForwardingRule.ts @@ -53,6 +53,7 @@ export interface GetGlobalForwardingRuleResult { readonly baseForwardingRule: string; readonly description: string; readonly effectiveLabels: {[key: string]: string}; + readonly forwardingRuleId: number; /** * The provider-assigned unique ID for this managed resource. */ diff --git a/sdk/nodejs/compute/getInstanceGroupManager.ts b/sdk/nodejs/compute/getInstanceGroupManager.ts index e62b2e2e0a..d93b91e31f 100644 --- a/sdk/nodejs/compute/getInstanceGroupManager.ts +++ b/sdk/nodejs/compute/getInstanceGroupManager.ts @@ -74,6 +74,7 @@ export interface GetInstanceGroupManagerResult { */ readonly id: string; readonly instanceGroup: string; + readonly instanceGroupManagerId: number; readonly instanceLifecyclePolicies: outputs.compute.GetInstanceGroupManagerInstanceLifecyclePolicy[]; readonly listManagedInstancesResults: string; readonly name?: string; diff --git a/sdk/nodejs/compute/getNetwork.ts b/sdk/nodejs/compute/getNetwork.ts index ff945e83d9..22ae73e869 100644 --- a/sdk/nodejs/compute/getNetwork.ts +++ b/sdk/nodejs/compute/getNetwork.ts @@ -22,6 +22,7 @@ export function getNetwork(args: GetNetworkArgs, opts?: pulumi.InvokeOptions): P opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); return pulumi.runtime.invoke("gcp:compute/getNetwork:getNetwork", { "name": args.name, + "networkProfile": args.networkProfile, "project": args.project, }, opts); } @@ -37,6 +38,10 @@ export interface GetNetworkArgs { * - - - */ name: string; + /** + * Beta A full or partial URL of the network profile to apply to this network. + */ + networkProfile?: string; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. @@ -65,6 +70,14 @@ export interface GetNetworkResult { */ readonly internalIpv6Range: string; readonly name: string; + /** + * Beta A full or partial URL of the network profile to apply to this network. + */ + readonly networkProfile?: string; + /** + * The numeric unique identifier for the resource. + */ + readonly numericId: string; readonly project?: string; /** * The URI of the resource. @@ -93,6 +106,7 @@ export function getNetworkOutput(args: GetNetworkOutputArgs, opts?: pulumi.Invok opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); return pulumi.runtime.invokeOutput("gcp:compute/getNetwork:getNetwork", { "name": args.name, + "networkProfile": args.networkProfile, "project": args.project, }, opts); } @@ -108,6 +122,10 @@ export interface GetNetworkOutputArgs { * - - - */ name: pulumi.Input; + /** + * Beta A full or partial URL of the network profile to apply to this network. + */ + networkProfile?: pulumi.Input; /** * The ID of the project in which the resource belongs. If it * is not provided, the provider project is used. diff --git a/sdk/nodejs/compute/getRegionInstanceGroupManager.ts b/sdk/nodejs/compute/getRegionInstanceGroupManager.ts index f4bdd10387..14ca73e8c0 100644 --- a/sdk/nodejs/compute/getRegionInstanceGroupManager.ts +++ b/sdk/nodejs/compute/getRegionInstanceGroupManager.ts @@ -73,6 +73,7 @@ export interface GetRegionInstanceGroupManagerResult { readonly id: string; readonly instanceFlexibilityPolicies: outputs.compute.GetRegionInstanceGroupManagerInstanceFlexibilityPolicy[]; readonly instanceGroup: string; + readonly instanceGroupManagerId: number; readonly instanceLifecyclePolicies: outputs.compute.GetRegionInstanceGroupManagerInstanceLifecyclePolicy[]; readonly listManagedInstancesResults: string; readonly name?: string; diff --git a/sdk/nodejs/compute/getRegionNetworkEndpointGroup.ts b/sdk/nodejs/compute/getRegionNetworkEndpointGroup.ts index 89a22b67d7..0682432379 100644 --- a/sdk/nodejs/compute/getRegionNetworkEndpointGroup.ts +++ b/sdk/nodejs/compute/getRegionNetworkEndpointGroup.ts @@ -84,6 +84,7 @@ export interface GetRegionNetworkEndpointGroupResult { */ readonly networkEndpointType: string; readonly project?: string; + readonly pscDatas: outputs.compute.GetRegionNetworkEndpointGroupPscData[]; /** * The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. */ diff --git a/sdk/nodejs/compute/globalForwardingRule.ts b/sdk/nodejs/compute/globalForwardingRule.ts index d422ecdf5b..055878b463 100644 --- a/sdk/nodejs/compute/globalForwardingRule.ts +++ b/sdk/nodejs/compute/globalForwardingRule.ts @@ -460,6 +460,10 @@ export class GlobalForwardingRule extends pulumi.CustomResource { * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. */ public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + public /*out*/ readonly forwardingRuleId!: pulumi.Output; /** * IP address for which this forwarding rule accepts traffic. When a client * sends traffic to this IP address, the forwarding rule directs the traffic @@ -673,6 +677,7 @@ export class GlobalForwardingRule extends pulumi.CustomResource { resourceInputs["baseForwardingRule"] = state ? state.baseForwardingRule : undefined; resourceInputs["description"] = state ? state.description : undefined; resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["forwardingRuleId"] = state ? state.forwardingRuleId : undefined; resourceInputs["ipAddress"] = state ? state.ipAddress : undefined; resourceInputs["ipProtocol"] = state ? state.ipProtocol : undefined; resourceInputs["ipVersion"] = state ? state.ipVersion : undefined; @@ -717,6 +722,7 @@ export class GlobalForwardingRule extends pulumi.CustomResource { resourceInputs["target"] = args ? args.target : undefined; resourceInputs["baseForwardingRule"] = undefined /*out*/; resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["forwardingRuleId"] = undefined /*out*/; resourceInputs["labelFingerprint"] = undefined /*out*/; resourceInputs["pscConnectionId"] = undefined /*out*/; resourceInputs["pscConnectionStatus"] = undefined /*out*/; @@ -751,6 +757,10 @@ export interface GlobalForwardingRuleState { * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. */ effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + forwardingRuleId?: pulumi.Input; /** * 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/nodejs/compute/instanceGroupManager.ts b/sdk/nodejs/compute/instanceGroupManager.ts index 354a143935..17e85532df 100644 --- a/sdk/nodejs/compute/instanceGroupManager.ts +++ b/sdk/nodejs/compute/instanceGroupManager.ts @@ -205,6 +205,10 @@ export class InstanceGroupManager extends pulumi.CustomResource { * The full URL of the instance group created by the manager. */ public /*out*/ readonly instanceGroup!: pulumi.Output; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + public /*out*/ readonly instanceGroupManagerId!: pulumi.Output; /** * The instance lifecycle policy for this managed instance group. */ @@ -336,6 +340,7 @@ export class InstanceGroupManager extends pulumi.CustomResource { resourceInputs["description"] = state ? state.description : undefined; resourceInputs["fingerprint"] = state ? state.fingerprint : undefined; resourceInputs["instanceGroup"] = state ? state.instanceGroup : undefined; + resourceInputs["instanceGroupManagerId"] = state ? state.instanceGroupManagerId : undefined; resourceInputs["instanceLifecyclePolicy"] = state ? state.instanceLifecyclePolicy : undefined; resourceInputs["listManagedInstancesResults"] = state ? state.listManagedInstancesResults : undefined; resourceInputs["name"] = state ? state.name : undefined; @@ -392,6 +397,7 @@ export class InstanceGroupManager extends pulumi.CustomResource { resourceInputs["creationTimestamp"] = undefined /*out*/; resourceInputs["fingerprint"] = undefined /*out*/; resourceInputs["instanceGroup"] = undefined /*out*/; + resourceInputs["instanceGroupManagerId"] = undefined /*out*/; resourceInputs["operation"] = undefined /*out*/; resourceInputs["selfLink"] = undefined /*out*/; resourceInputs["statuses"] = undefined /*out*/; @@ -442,6 +448,10 @@ export interface InstanceGroupManagerState { * The full URL of the instance group created by the manager. */ instanceGroup?: pulumi.Input; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + instanceGroupManagerId?: pulumi.Input; /** * The instance lifecycle policy for this managed instance group. */ diff --git a/sdk/nodejs/compute/network.ts b/sdk/nodejs/compute/network.ts index f305c37f18..403619173b 100644 --- a/sdk/nodejs/compute/network.ts +++ b/sdk/nodejs/compute/network.ts @@ -220,6 +220,14 @@ export class Network extends pulumi.CustomResource { * Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. */ public readonly networkFirewallPolicyEnforcementOrder!: pulumi.Output; + /** + * 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} + */ + public readonly networkProfile!: pulumi.Output; /** * The unique identifier for the resource. This identifier is defined by the server. */ @@ -268,6 +276,7 @@ export class Network extends pulumi.CustomResource { resourceInputs["mtu"] = state ? state.mtu : undefined; resourceInputs["name"] = state ? state.name : undefined; resourceInputs["networkFirewallPolicyEnforcementOrder"] = state ? state.networkFirewallPolicyEnforcementOrder : undefined; + resourceInputs["networkProfile"] = state ? state.networkProfile : undefined; resourceInputs["numericId"] = state ? state.numericId : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["routingMode"] = state ? state.routingMode : undefined; @@ -285,6 +294,7 @@ export class Network extends pulumi.CustomResource { resourceInputs["mtu"] = args ? args.mtu : undefined; resourceInputs["name"] = args ? args.name : undefined; resourceInputs["networkFirewallPolicyEnforcementOrder"] = args ? args.networkFirewallPolicyEnforcementOrder : undefined; + resourceInputs["networkProfile"] = args ? args.networkProfile : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["routingMode"] = args ? args.routingMode : undefined; resourceInputs["gatewayIpv4"] = undefined /*out*/; @@ -378,6 +388,14 @@ export interface NetworkState { * Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. */ networkFirewallPolicyEnforcementOrder?: pulumi.Input; + /** + * 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} + */ + networkProfile?: pulumi.Input; /** * The unique identifier for the resource. This identifier is defined by the server. */ @@ -479,6 +497,14 @@ export interface NetworkArgs { * Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. */ networkFirewallPolicyEnforcementOrder?: pulumi.Input; + /** + * 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} + */ + networkProfile?: pulumi.Input; /** * The ID of the project in which the resource belongs. * If it is not provided, the provider project is used. diff --git a/sdk/nodejs/compute/regionHealthCheck.ts b/sdk/nodejs/compute/regionHealthCheck.ts index 7ac1290f18..58d50e9593 100644 --- a/sdk/nodejs/compute/regionHealthCheck.ts +++ b/sdk/nodejs/compute/regionHealthCheck.ts @@ -343,6 +343,10 @@ export class RegionHealthCheck extends pulumi.CustomResource { * Structure is documented below. */ public readonly grpcHealthCheck!: pulumi.Output; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + public /*out*/ readonly healthCheckId!: pulumi.Output; /** * A so-far unhealthy instance will be marked healthy after this many * consecutive successes. The default value is 2. @@ -438,6 +442,7 @@ export class RegionHealthCheck extends pulumi.CustomResource { resourceInputs["creationTimestamp"] = state ? state.creationTimestamp : undefined; resourceInputs["description"] = state ? state.description : undefined; resourceInputs["grpcHealthCheck"] = state ? state.grpcHealthCheck : undefined; + resourceInputs["healthCheckId"] = state ? state.healthCheckId : undefined; resourceInputs["healthyThreshold"] = state ? state.healthyThreshold : undefined; resourceInputs["http2HealthCheck"] = state ? state.http2HealthCheck : undefined; resourceInputs["httpHealthCheck"] = state ? state.httpHealthCheck : undefined; @@ -470,6 +475,7 @@ export class RegionHealthCheck extends pulumi.CustomResource { resourceInputs["timeoutSec"] = args ? args.timeoutSec : undefined; resourceInputs["unhealthyThreshold"] = args ? args.unhealthyThreshold : undefined; resourceInputs["creationTimestamp"] = undefined /*out*/; + resourceInputs["healthCheckId"] = undefined /*out*/; resourceInputs["selfLink"] = undefined /*out*/; resourceInputs["type"] = undefined /*out*/; } @@ -501,6 +507,10 @@ export interface RegionHealthCheckState { * Structure is documented below. */ grpcHealthCheck?: pulumi.Input; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + healthCheckId?: pulumi.Input; /** * A so-far unhealthy instance will be marked healthy after this many * consecutive successes. The default value is 2. diff --git a/sdk/nodejs/compute/regionInstanceGroupManager.ts b/sdk/nodejs/compute/regionInstanceGroupManager.ts index a5d078df3b..419b5f4c54 100644 --- a/sdk/nodejs/compute/regionInstanceGroupManager.ts +++ b/sdk/nodejs/compute/regionInstanceGroupManager.ts @@ -208,6 +208,10 @@ export class RegionInstanceGroupManager extends pulumi.CustomResource { * The full URL of the instance group created by the manager. */ public /*out*/ readonly instanceGroup!: pulumi.Output; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + public /*out*/ readonly instanceGroupManagerId!: pulumi.Output; /** * The instance lifecycle policy for this managed instance group. */ @@ -338,6 +342,7 @@ export class RegionInstanceGroupManager extends pulumi.CustomResource { resourceInputs["fingerprint"] = state ? state.fingerprint : undefined; resourceInputs["instanceFlexibilityPolicy"] = state ? state.instanceFlexibilityPolicy : undefined; resourceInputs["instanceGroup"] = state ? state.instanceGroup : undefined; + resourceInputs["instanceGroupManagerId"] = state ? state.instanceGroupManagerId : undefined; resourceInputs["instanceLifecyclePolicy"] = state ? state.instanceLifecyclePolicy : undefined; resourceInputs["listManagedInstancesResults"] = state ? state.listManagedInstancesResults : undefined; resourceInputs["name"] = state ? state.name : undefined; @@ -396,6 +401,7 @@ export class RegionInstanceGroupManager extends pulumi.CustomResource { resourceInputs["creationTimestamp"] = undefined /*out*/; resourceInputs["fingerprint"] = undefined /*out*/; resourceInputs["instanceGroup"] = undefined /*out*/; + resourceInputs["instanceGroupManagerId"] = undefined /*out*/; resourceInputs["selfLink"] = undefined /*out*/; resourceInputs["statuses"] = undefined /*out*/; } @@ -459,6 +465,10 @@ export interface RegionInstanceGroupManagerState { * The full URL of the instance group created by the manager. */ instanceGroup?: pulumi.Input; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + instanceGroupManagerId?: pulumi.Input; /** * The instance lifecycle policy for this managed instance group. */ diff --git a/sdk/nodejs/compute/regionNetworkEndpoint.ts b/sdk/nodejs/compute/regionNetworkEndpoint.ts index d85eed0be1..070d85f8a7 100644 --- a/sdk/nodejs/compute/regionNetworkEndpoint.ts +++ b/sdk/nodejs/compute/regionNetworkEndpoint.ts @@ -193,6 +193,10 @@ export class RegionNetworkEndpoint extends pulumi.CustomResource { * This can only be specified when networkEndpointType of the NEG is INTERNET_IP_PORT. */ public readonly ipAddress!: pulumi.Output; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + public /*out*/ readonly networkEndpointId!: pulumi.Output; /** * Port number of network endpoint. */ @@ -231,6 +235,7 @@ export class RegionNetworkEndpoint extends pulumi.CustomResource { resourceInputs["fqdn"] = state ? state.fqdn : undefined; resourceInputs["instance"] = state ? state.instance : undefined; resourceInputs["ipAddress"] = state ? state.ipAddress : undefined; + resourceInputs["networkEndpointId"] = state ? state.networkEndpointId : undefined; resourceInputs["port"] = state ? state.port : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["region"] = state ? state.region : undefined; @@ -251,6 +256,7 @@ export class RegionNetworkEndpoint extends pulumi.CustomResource { resourceInputs["project"] = args ? args.project : undefined; resourceInputs["region"] = args ? args.region : undefined; resourceInputs["regionNetworkEndpointGroup"] = args ? args.regionNetworkEndpointGroup : undefined; + resourceInputs["networkEndpointId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(RegionNetworkEndpoint.__pulumiType, name, resourceInputs, opts); @@ -280,6 +286,10 @@ export interface RegionNetworkEndpointState { * This can only be specified when networkEndpointType of the NEG is INTERNET_IP_PORT. */ ipAddress?: pulumi.Input; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + networkEndpointId?: pulumi.Input; /** * Port number of network endpoint. */ diff --git a/sdk/nodejs/compute/regionNetworkEndpointGroup.ts b/sdk/nodejs/compute/regionNetworkEndpointGroup.ts index 33e429ef62..42e21a3bc0 100644 --- a/sdk/nodejs/compute/regionNetworkEndpointGroup.ts +++ b/sdk/nodejs/compute/regionNetworkEndpointGroup.ts @@ -221,7 +221,11 @@ import * as utilities from "../utilities"; * region: "europe-west4", * loadBalancingScheme: "INTERNAL", * backendService: defaultRegionBackendService.id, - * allPorts: true, + * ports: [ + * "80", + * "88", + * "443", + * ], * network: _default.name, * subnetwork: defaultSubnetwork.name, * }); @@ -239,6 +243,9 @@ import * as utilities from "../utilities"; * region: "europe-west4", * networkEndpointType: "PRIVATE_SERVICE_CONNECT", * pscTargetService: defaultServiceAttachment.selfLink, + * pscData: { + * producerPort: "88", + * }, * network: _default.selfLink, * subnetwork: defaultSubnetwork.selfLink, * }); @@ -401,6 +408,11 @@ export class RegionNetworkEndpointGroup extends pulumi.CustomResource { * If it is not provided, the provider project is used. */ public readonly project!: pulumi.Output; + /** + * This field is only used for PSC NEGs. + * Structure is documented below. + */ + public readonly pscData!: pulumi.Output; /** * This field is only used for PSC and INTERNET NEGs. * The target service url used to set up private service connection to @@ -451,6 +463,7 @@ export class RegionNetworkEndpointGroup extends pulumi.CustomResource { resourceInputs["network"] = state ? state.network : undefined; resourceInputs["networkEndpointType"] = state ? state.networkEndpointType : undefined; resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pscData"] = state ? state.pscData : undefined; resourceInputs["pscTargetService"] = state ? state.pscTargetService : undefined; resourceInputs["region"] = state ? state.region : undefined; resourceInputs["selfLink"] = state ? state.selfLink : undefined; @@ -469,6 +482,7 @@ export class RegionNetworkEndpointGroup extends pulumi.CustomResource { resourceInputs["network"] = args ? args.network : undefined; resourceInputs["networkEndpointType"] = args ? args.networkEndpointType : undefined; resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["pscData"] = args ? args.pscData : undefined; resourceInputs["pscTargetService"] = args ? args.pscTargetService : undefined; resourceInputs["region"] = args ? args.region : undefined; resourceInputs["serverlessDeployment"] = args ? args.serverlessDeployment : undefined; @@ -534,6 +548,11 @@ export interface RegionNetworkEndpointGroupState { * If it is not provided, the provider project is used. */ project?: pulumi.Input; + /** + * This field is only used for PSC NEGs. + * Structure is documented below. + */ + pscData?: pulumi.Input; /** * This field is only used for PSC and INTERNET NEGs. * The target service url used to set up private service connection to @@ -618,6 +637,11 @@ export interface RegionNetworkEndpointGroupArgs { * If it is not provided, the provider project is used. */ project?: pulumi.Input; + /** + * This field is only used for PSC NEGs. + * Structure is documented below. + */ + pscData?: pulumi.Input; /** * 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/nodejs/compute/subnetwork.ts b/sdk/nodejs/compute/subnetwork.ts index e5c103a291..703517673d 100644 --- a/sdk/nodejs/compute/subnetwork.ts +++ b/sdk/nodejs/compute/subnetwork.ts @@ -447,6 +447,10 @@ export class Subnetwork extends pulumi.CustomResource { * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. */ public readonly stackType!: pulumi.Output; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + public /*out*/ readonly subnetworkId!: pulumi.Output; /** * Create a Subnetwork resource with the given unique name, arguments, and options. @@ -485,6 +489,7 @@ export class Subnetwork extends pulumi.CustomResource { resourceInputs["selfLink"] = state ? state.selfLink : undefined; resourceInputs["sendSecondaryIpRangeIfEmpty"] = state ? state.sendSecondaryIpRangeIfEmpty : undefined; resourceInputs["stackType"] = state ? state.stackType : undefined; + resourceInputs["subnetworkId"] = state ? state.subnetworkId : undefined; } else { const args = argsOrState as SubnetworkArgs | undefined; if ((!args || args.network === undefined) && !opts.urn) { @@ -514,6 +519,7 @@ export class Subnetwork extends pulumi.CustomResource { resourceInputs["internalIpv6Prefix"] = undefined /*out*/; resourceInputs["ipv6CidrRange"] = undefined /*out*/; resourceInputs["selfLink"] = undefined /*out*/; + resourceInputs["subnetworkId"] = undefined /*out*/; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(Subnetwork.__pulumiType, name, resourceInputs, opts); @@ -674,6 +680,10 @@ export interface SubnetworkState { * Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. */ stackType?: pulumi.Input; + /** + * The unique identifier number for the resource. This identifier is defined by the server. + */ + subnetworkId?: pulumi.Input; } /** diff --git a/sdk/nodejs/compute/urlmap.ts b/sdk/nodejs/compute/urlmap.ts index eaa641403e..f0853930fc 100644 --- a/sdk/nodejs/compute/urlmap.ts +++ b/sdk/nodejs/compute/urlmap.ts @@ -761,7 +761,7 @@ export class URLMap extends pulumi.CustomResource { */ public /*out*/ readonly creationTimestamp!: pulumi.Output; /** - * 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 @@ -912,7 +912,7 @@ export interface URLMapState { */ creationTimestamp?: pulumi.Input; /** - * 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 @@ -1009,7 +1009,7 @@ export interface URLMapState { */ export interface URLMapArgs { /** - * 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/nodejs/config/vars.ts b/sdk/nodejs/config/vars.ts index 4577850f64..07d8f04122 100644 --- a/sdk/nodejs/config/vars.ts +++ b/sdk/nodejs/config/vars.ts @@ -729,6 +729,14 @@ Object.defineProperty(exports, "firestoreCustomEndpoint", { enumerable: true, }); +export declare const geminiCustomEndpoint: string | undefined; +Object.defineProperty(exports, "geminiCustomEndpoint", { + get() { + return __config.get("geminiCustomEndpoint"); + }, + enumerable: true, +}); + export declare const gkeBackupCustomEndpoint: string | undefined; Object.defineProperty(exports, "gkeBackupCustomEndpoint", { get() { diff --git a/sdk/nodejs/container/cluster.ts b/sdk/nodejs/container/cluster.ts index f176094153..8517f412ee 100644 --- a/sdk/nodejs/container/cluster.ts +++ b/sdk/nodejs/container/cluster.ts @@ -310,6 +310,13 @@ export class Cluster extends pulumi.CustomResource { * The IP address of this cluster's Kubernetes master. */ public /*out*/ readonly endpoint!: pulumi.Output; + /** + * Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + * + * + * The `defaultSnatStatus` block supports + */ + public readonly enterpriseConfig!: pulumi.Output; /** * Fleet configuration for the cluster. Structure is documented below. */ @@ -616,8 +623,6 @@ export class Cluster extends pulumi.CustomResource { public readonly verticalPodAutoscaling!: pulumi.Output; /** * 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. - * - * The `defaultSnatStatus` block supports */ public readonly workloadAltsConfig!: pulumi.Output; /** @@ -670,6 +675,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["enableShieldedNodes"] = state ? state.enableShieldedNodes : undefined; resourceInputs["enableTpu"] = state ? state.enableTpu : undefined; resourceInputs["endpoint"] = state ? state.endpoint : undefined; + resourceInputs["enterpriseConfig"] = state ? state.enterpriseConfig : undefined; resourceInputs["fleet"] = state ? state.fleet : undefined; resourceInputs["gatewayApiConfig"] = state ? state.gatewayApiConfig : undefined; resourceInputs["identityServiceConfig"] = state ? state.identityServiceConfig : undefined; @@ -751,6 +757,7 @@ export class Cluster extends pulumi.CustomResource { resourceInputs["enableMultiNetworking"] = args ? args.enableMultiNetworking : undefined; resourceInputs["enableShieldedNodes"] = args ? args.enableShieldedNodes : undefined; resourceInputs["enableTpu"] = args ? args.enableTpu : undefined; + resourceInputs["enterpriseConfig"] = args ? args.enterpriseConfig : undefined; resourceInputs["fleet"] = args ? args.fleet : undefined; resourceInputs["gatewayApiConfig"] = args ? args.gatewayApiConfig : undefined; resourceInputs["identityServiceConfig"] = args ? args.identityServiceConfig : undefined; @@ -964,6 +971,13 @@ export interface ClusterState { * The IP address of this cluster's Kubernetes master. */ endpoint?: pulumi.Input; + /** + * Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + * + * + * The `defaultSnatStatus` block supports + */ + enterpriseConfig?: pulumi.Input; /** * Fleet configuration for the cluster. Structure is documented below. */ @@ -1270,8 +1284,6 @@ export interface ClusterState { verticalPodAutoscaling?: pulumi.Input; /** * 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. - * - * The `defaultSnatStatus` block supports */ workloadAltsConfig?: pulumi.Input; /** @@ -1426,6 +1438,13 @@ export interface ClusterArgs { * See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). */ enableTpu?: pulumi.Input; + /** + * Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + * + * + * The `defaultSnatStatus` block supports + */ + enterpriseConfig?: pulumi.Input; /** * Fleet configuration for the cluster. Structure is documented below. */ @@ -1700,8 +1719,6 @@ export interface ClusterArgs { verticalPodAutoscaling?: pulumi.Input; /** * 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. - * - * The `defaultSnatStatus` block supports */ workloadAltsConfig?: pulumi.Input; /** diff --git a/sdk/nodejs/container/getCluster.ts b/sdk/nodejs/container/getCluster.ts index 9d83b4beae..f37cc3967d 100644 --- a/sdk/nodejs/container/getCluster.ts +++ b/sdk/nodejs/container/getCluster.ts @@ -89,6 +89,7 @@ export interface GetClusterResult { readonly enableShieldedNodes: boolean; readonly enableTpu: boolean; readonly endpoint: string; + readonly enterpriseConfigs: outputs.container.GetClusterEnterpriseConfig[]; readonly fleets: outputs.container.GetClusterFleet[]; readonly gatewayApiConfigs: outputs.container.GetClusterGatewayApiConfig[]; /** diff --git a/sdk/nodejs/dataproc/batch.ts b/sdk/nodejs/dataproc/batch.ts index 2ab64ae3c8..33e61e488f 100644 --- a/sdk/nodejs/dataproc/batch.ts +++ b/sdk/nodejs/dataproc/batch.ts @@ -248,6 +248,45 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Dataproc Batch Autotuning + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const exampleBatchAutotuning = new gcp.dataproc.Batch("example_batch_autotuning", { + * batchId: "tf-test-batch_16511", + * location: "us-central1", + * labels: { + * batch_test: "terraform", + * }, + * runtimeConfig: { + * version: "2.2", + * properties: { + * "spark.dynamicAllocation.enabled": "false", + * "spark.executor.instances": "2", + * }, + * cohort: "tf-dataproc-batch-example", + * autotuningConfig: { + * scenarios: [ + * "SCALING", + * "MEMORY", + * ], + * }, + * }, + * environmentConfig: { + * executionConfig: { + * subnetworkUri: "default", + * ttl: "3600s", + * }, + * }, + * sparkBatch: { + * mainClass: "org.apache.spark.examples.SparkPi", + * args: ["10"], + * jarFileUris: ["file:///usr/lib/spark/examples/jars/spark-examples.jar"], + * }, + * }); + * ``` * * ## Import * diff --git a/sdk/nodejs/discoveryengine/searchEngine.ts b/sdk/nodejs/discoveryengine/searchEngine.ts index b89a22a28a..37eead04a3 100644 --- a/sdk/nodejs/discoveryengine/searchEngine.ts +++ b/sdk/nodejs/discoveryengine/searchEngine.ts @@ -121,7 +121,7 @@ export class SearchEngine extends 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"] */ public readonly industryVertical!: pulumi.Output; /** @@ -240,7 +240,7 @@ export interface SearchEngineState { /** * 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"] */ industryVertical?: pulumi.Input; /** @@ -293,7 +293,7 @@ export interface SearchEngineArgs { /** * 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"] */ industryVertical?: pulumi.Input; /** diff --git a/sdk/nodejs/firebaserules/release.ts b/sdk/nodejs/firebaserules/release.ts index 64836759fd..75b0b7f360 100644 --- a/sdk/nodejs/firebaserules/release.ts +++ b/sdk/nodejs/firebaserules/release.ts @@ -9,6 +9,48 @@ import * as utilities from "../utilities"; * * [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 + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const firestore = new gcp.firebaserules.Ruleset("firestore", { + * project: "my-project-name", + * source: { + * files: [{ + * content: "service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }", + * name: "firestore.rules", + * }], + * }, + * }); + * const primary = new gcp.firebaserules.Release("primary", { + * name: "cloud.firestore", + * project: "my-project-name", + * rulesetName: pulumi.interpolate`projects/my-project-name/rulesets/${firestore.name}`, + * }); + * ``` + * ### Firestore_release_additional + * Creates a Firebase Rules Release to an additional Cloud Firestore instance + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const firestore = new gcp.firebaserules.Ruleset("firestore", { + * project: "my-project-name", + * source: { + * files: [{ + * content: "service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }", + * name: "firestore.rules", + * }], + * }, + * }); + * const primary = new gcp.firebaserules.Release("primary", { + * name: "cloud.firestore/database", + * project: "my-project-name", + * rulesetName: pulumi.interpolate`projects/my-project-name/rulesets/${firestore.name}`, + * }); + * ``` * ## Import * * Release can be imported using any of these accepted formats: diff --git a/sdk/nodejs/firestore/field.ts b/sdk/nodejs/firestore/field.ts index 849c038f8d..946f51da04 100644 --- a/sdk/nodejs/firestore/field.ts +++ b/sdk/nodejs/firestore/field.ts @@ -41,7 +41,7 @@ import * as utilities from "../utilities"; * const basic = new gcp.firestore.Field("basic", { * project: "my-project-name", * database: database.name, - * collection: "chatrooms__16511", + * collection: "chatrooms__8493", * field: "basic", * indexConfig: { * indexes: [ @@ -96,7 +96,7 @@ import * as utilities from "../utilities"; * const matchOverride = new gcp.firestore.Field("match_override", { * project: "my-project-name", * database: database.name, - * collection: "chatrooms__8493", + * collection: "chatrooms__9106", * field: "field_with_same_configuration_as_ancestor", * indexConfig: { * indexes: [ diff --git a/sdk/nodejs/gemini/codeRepositoryIndex.ts b/sdk/nodejs/gemini/codeRepositoryIndex.ts new file mode 100644 index 0000000000..76074dd529 --- /dev/null +++ b/sdk/nodejs/gemini/codeRepositoryIndex.ts @@ -0,0 +1,280 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Gemini Code Repository Index Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const example = new gcp.gemini.CodeRepositoryIndex("example", { + * 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}} + * ``` + */ +export class CodeRepositoryIndex extends pulumi.CustomResource { + /** + * Get an existing CodeRepositoryIndex resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: CodeRepositoryIndexState, opts?: pulumi.CustomResourceOptions): CodeRepositoryIndex { + return new CodeRepositoryIndex(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex'; + + /** + * Returns true if the given object is an instance of CodeRepositoryIndex. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is CodeRepositoryIndex { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === CodeRepositoryIndex.__pulumiType; + } + + /** + * Required. Id of the Code Repository Index. + * + * + * - - - + */ + public readonly codeRepositoryIndexId!: pulumi.Output; + /** + * Output only. Create time stamp. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + */ + public readonly kmsKey!: pulumi.Output; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * The location of the Code Repository Index, for example `us-central1`. + */ + public readonly location!: pulumi.Output; + /** + * Immutable. Identifier. Name of Code Repository Index. + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Output only. Code Repository Index instance State. + * Possible values: + * STATE_UNSPECIFIED + * CREATING + * ACTIVE + * DELETING + * SUSPENDED + */ + public /*out*/ readonly state!: pulumi.Output; + /** + * Output only. Update time stamp. + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a CodeRepositoryIndex resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: CodeRepositoryIndexArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: CodeRepositoryIndexArgs | CodeRepositoryIndexState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as CodeRepositoryIndexState | undefined; + resourceInputs["codeRepositoryIndexId"] = state ? state.codeRepositoryIndexId : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["kmsKey"] = state ? state.kmsKey : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["state"] = state ? state.state : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as CodeRepositoryIndexArgs | undefined; + if ((!args || args.codeRepositoryIndexId === undefined) && !opts.urn) { + throw new Error("Missing required property 'codeRepositoryIndexId'"); + } + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + resourceInputs["codeRepositoryIndexId"] = args ? args.codeRepositoryIndexId : undefined; + resourceInputs["kmsKey"] = args ? args.kmsKey : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["state"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(CodeRepositoryIndex.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering CodeRepositoryIndex resources. + */ +export interface CodeRepositoryIndexState { + /** + * Required. Id of the Code Repository Index. + * + * + * - - - + */ + codeRepositoryIndexId?: pulumi.Input; + /** + * Output only. Create time stamp. + */ + createTime?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + */ + kmsKey?: pulumi.Input; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location of the Code Repository Index, for example `us-central1`. + */ + location?: pulumi.Input; + /** + * Immutable. Identifier. Name of Code Repository Index. + */ + name?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Output only. Code Repository Index instance State. + * Possible values: + * STATE_UNSPECIFIED + * CREATING + * ACTIVE + * DELETING + * SUSPENDED + */ + state?: pulumi.Input; + /** + * Output only. Update time stamp. + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a CodeRepositoryIndex resource. + */ +export interface CodeRepositoryIndexArgs { + /** + * Required. Id of the Code Repository Index. + * + * + * - - - + */ + codeRepositoryIndexId: pulumi.Input; + /** + * Optional. Immutable. Customer-managed encryption key name, in the format + * projects/*/locations/*/keyRings/*/cryptoKeys/*. + */ + kmsKey?: pulumi.Input; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location of the Code Repository Index, for example `us-central1`. + */ + location: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/gemini/getRepositoryGroupIamPolicy.ts b/sdk/nodejs/gemini/getRepositoryGroupIamPolicy.ts new file mode 100644 index 0000000000..068422955d --- /dev/null +++ b/sdk/nodejs/gemini/getRepositoryGroupIamPolicy.ts @@ -0,0 +1,85 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +export function getRepositoryGroupIamPolicy(args: GetRepositoryGroupIamPolicyArgs, opts?: pulumi.InvokeOptions): Promise { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy", { + "codeRepositoryIndex": args.codeRepositoryIndex, + "location": args.location, + "project": args.project, + "repositoryGroupId": args.repositoryGroupId, + }, opts); +} + +/** + * A collection of arguments for invoking getRepositoryGroupIamPolicy. + */ +export interface GetRepositoryGroupIamPolicyArgs { + codeRepositoryIndex: string; + /** + * 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. + */ + location?: string; + /** + * 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. + */ + project?: string; + repositoryGroupId: string; +} + +/** + * A collection of values returned by getRepositoryGroupIamPolicy. + */ +export interface GetRepositoryGroupIamPolicyResult { + readonly codeRepositoryIndex: string; + /** + * (Computed) The etag of the IAM policy. + */ + readonly etag: string; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + readonly location: string; + /** + * (Required only by `gcp.gemini.RepositoryGroupIamPolicy`) The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + */ + readonly policyData: string; + readonly project: string; + readonly repositoryGroupId: string; +} +export function getRepositoryGroupIamPolicyOutput(args: GetRepositoryGroupIamPolicyOutputArgs, opts?: pulumi.InvokeOutputOptions): pulumi.Output { + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invokeOutput("gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy", { + "codeRepositoryIndex": args.codeRepositoryIndex, + "location": args.location, + "project": args.project, + "repositoryGroupId": args.repositoryGroupId, + }, opts); +} + +/** + * A collection of arguments for invoking getRepositoryGroupIamPolicy. + */ +export interface GetRepositoryGroupIamPolicyOutputArgs { + codeRepositoryIndex: pulumi.Input; + /** + * 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. + */ + location?: pulumi.Input; + /** + * 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. + */ + project?: pulumi.Input; + repositoryGroupId: pulumi.Input; +} diff --git a/sdk/nodejs/gemini/index.ts b/sdk/nodejs/gemini/index.ts new file mode 100644 index 0000000000..10952f48d0 --- /dev/null +++ b/sdk/nodejs/gemini/index.ts @@ -0,0 +1,62 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +// Export members: +export { CodeRepositoryIndexArgs, CodeRepositoryIndexState } from "./codeRepositoryIndex"; +export type CodeRepositoryIndex = import("./codeRepositoryIndex").CodeRepositoryIndex; +export const CodeRepositoryIndex: typeof import("./codeRepositoryIndex").CodeRepositoryIndex = null as any; +utilities.lazyLoad(exports, ["CodeRepositoryIndex"], () => require("./codeRepositoryIndex")); + +export { GetRepositoryGroupIamPolicyArgs, GetRepositoryGroupIamPolicyResult, GetRepositoryGroupIamPolicyOutputArgs } from "./getRepositoryGroupIamPolicy"; +export const getRepositoryGroupIamPolicy: typeof import("./getRepositoryGroupIamPolicy").getRepositoryGroupIamPolicy = null as any; +export const getRepositoryGroupIamPolicyOutput: typeof import("./getRepositoryGroupIamPolicy").getRepositoryGroupIamPolicyOutput = null as any; +utilities.lazyLoad(exports, ["getRepositoryGroupIamPolicy","getRepositoryGroupIamPolicyOutput"], () => require("./getRepositoryGroupIamPolicy")); + +export { RepositoryGroupArgs, RepositoryGroupState } from "./repositoryGroup"; +export type RepositoryGroup = import("./repositoryGroup").RepositoryGroup; +export const RepositoryGroup: typeof import("./repositoryGroup").RepositoryGroup = null as any; +utilities.lazyLoad(exports, ["RepositoryGroup"], () => require("./repositoryGroup")); + +export { RepositoryGroupIamBindingArgs, RepositoryGroupIamBindingState } from "./repositoryGroupIamBinding"; +export type RepositoryGroupIamBinding = import("./repositoryGroupIamBinding").RepositoryGroupIamBinding; +export const RepositoryGroupIamBinding: typeof import("./repositoryGroupIamBinding").RepositoryGroupIamBinding = null as any; +utilities.lazyLoad(exports, ["RepositoryGroupIamBinding"], () => require("./repositoryGroupIamBinding")); + +export { RepositoryGroupIamMemberArgs, RepositoryGroupIamMemberState } from "./repositoryGroupIamMember"; +export type RepositoryGroupIamMember = import("./repositoryGroupIamMember").RepositoryGroupIamMember; +export const RepositoryGroupIamMember: typeof import("./repositoryGroupIamMember").RepositoryGroupIamMember = null as any; +utilities.lazyLoad(exports, ["RepositoryGroupIamMember"], () => require("./repositoryGroupIamMember")); + +export { RepositoryGroupIamPolicyArgs, RepositoryGroupIamPolicyState } from "./repositoryGroupIamPolicy"; +export type RepositoryGroupIamPolicy = import("./repositoryGroupIamPolicy").RepositoryGroupIamPolicy; +export const RepositoryGroupIamPolicy: typeof import("./repositoryGroupIamPolicy").RepositoryGroupIamPolicy = null as any; +utilities.lazyLoad(exports, ["RepositoryGroupIamPolicy"], () => require("./repositoryGroupIamPolicy")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex": + return new CodeRepositoryIndex(name, undefined, { urn }) + case "gcp:gemini/repositoryGroup:RepositoryGroup": + return new RepositoryGroup(name, undefined, { urn }) + case "gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding": + return new RepositoryGroupIamBinding(name, undefined, { urn }) + case "gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember": + return new RepositoryGroupIamMember(name, undefined, { urn }) + case "gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy": + return new RepositoryGroupIamPolicy(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("gcp", "gemini/codeRepositoryIndex", _module) +pulumi.runtime.registerResourceModule("gcp", "gemini/repositoryGroup", _module) +pulumi.runtime.registerResourceModule("gcp", "gemini/repositoryGroupIamBinding", _module) +pulumi.runtime.registerResourceModule("gcp", "gemini/repositoryGroupIamMember", _module) +pulumi.runtime.registerResourceModule("gcp", "gemini/repositoryGroupIamPolicy", _module) diff --git a/sdk/nodejs/gemini/repositoryGroup.ts b/sdk/nodejs/gemini/repositoryGroup.ts new file mode 100644 index 0000000000..cd1afd3f87 --- /dev/null +++ b/sdk/nodejs/gemini/repositoryGroup.ts @@ -0,0 +1,243 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## 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}} + * ``` + */ +export class RepositoryGroup extends pulumi.CustomResource { + /** + * Get an existing RepositoryGroup resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: RepositoryGroupState, opts?: pulumi.CustomResourceOptions): RepositoryGroup { + return new RepositoryGroup(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:gemini/repositoryGroup:RepositoryGroup'; + + /** + * Returns true if the given object is an instance of RepositoryGroup. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is RepositoryGroup { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === RepositoryGroup.__pulumiType; + } + + /** + * Required. Id of the Code Repository Index. + */ + public readonly codeRepositoryIndex!: pulumi.Output; + /** + * Output only. Create time stamp + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * 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 readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * The location of the Code Repository Index, for example `us-central1`. + */ + public readonly location!: pulumi.Output; + /** + * Immutable. Identifier. name of resource + */ + public /*out*/ readonly name!: pulumi.Output; + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Required. List of repositories to group + * Structure is documented below. + */ + public readonly repositories!: pulumi.Output; + /** + * Required. Id of the Repository Group. + */ + public readonly repositoryGroupId!: pulumi.Output; + /** + * Output only. Update time stamp + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a RepositoryGroup resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: RepositoryGroupArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RepositoryGroupArgs | RepositoryGroupState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RepositoryGroupState | undefined; + resourceInputs["codeRepositoryIndex"] = state ? state.codeRepositoryIndex : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["repositories"] = state ? state.repositories : undefined; + resourceInputs["repositoryGroupId"] = state ? state.repositoryGroupId : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as RepositoryGroupArgs | undefined; + if ((!args || args.codeRepositoryIndex === undefined) && !opts.urn) { + throw new Error("Missing required property 'codeRepositoryIndex'"); + } + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.repositories === undefined) && !opts.urn) { + throw new Error("Missing required property 'repositories'"); + } + if ((!args || args.repositoryGroupId === undefined) && !opts.urn) { + throw new Error("Missing required property 'repositoryGroupId'"); + } + resourceInputs["codeRepositoryIndex"] = args ? args.codeRepositoryIndex : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["repositories"] = args ? args.repositories : undefined; + resourceInputs["repositoryGroupId"] = args ? args.repositoryGroupId : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(RepositoryGroup.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering RepositoryGroup resources. + */ +export interface RepositoryGroupState { + /** + * Required. Id of the Code Repository Index. + */ + codeRepositoryIndex?: pulumi.Input; + /** + * Output only. Create time stamp + */ + createTime?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location of the Code Repository Index, for example `us-central1`. + */ + location?: pulumi.Input; + /** + * Immutable. Identifier. name of resource + */ + name?: pulumi.Input; + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Required. List of repositories to group + * Structure is documented below. + */ + repositories?: pulumi.Input[]>; + /** + * Required. Id of the Repository Group. + */ + repositoryGroupId?: pulumi.Input; + /** + * Output only. Update time stamp + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a RepositoryGroup resource. + */ +export interface RepositoryGroupArgs { + /** + * Required. Id of the Code Repository Index. + */ + codeRepositoryIndex: pulumi.Input; + /** + * 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. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location of the Code Repository Index, for example `us-central1`. + */ + location: pulumi.Input; + project?: pulumi.Input; + /** + * Required. List of repositories to group + * Structure is documented below. + */ + repositories: pulumi.Input[]>; + /** + * Required. Id of the Repository Group. + */ + repositoryGroupId: pulumi.Input; +} diff --git a/sdk/nodejs/gemini/repositoryGroupIamBinding.ts b/sdk/nodejs/gemini/repositoryGroupIamBinding.ts new file mode 100644 index 0000000000..a9c4bd1b99 --- /dev/null +++ b/sdk/nodejs/gemini/repositoryGroupIamBinding.ts @@ -0,0 +1,246 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## 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`. + */ +export class RepositoryGroupIamBinding extends pulumi.CustomResource { + /** + * Get an existing RepositoryGroupIamBinding resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: RepositoryGroupIamBindingState, opts?: pulumi.CustomResourceOptions): RepositoryGroupIamBinding { + return new RepositoryGroupIamBinding(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding'; + + /** + * Returns true if the given object is an instance of RepositoryGroupIamBinding. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is RepositoryGroupIamBinding { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === RepositoryGroupIamBinding.__pulumiType; + } + + public readonly codeRepositoryIndex!: pulumi.Output; + public readonly condition!: pulumi.Output; + /** + * (Computed) The etag of the IAM policy. + */ + public /*out*/ readonly etag!: pulumi.Output; + /** + * 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. + */ + public readonly location!: pulumi.Output; + /** + * 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 readonly members!: pulumi.Output; + /** + * 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. + */ + public readonly project!: pulumi.Output; + public readonly repositoryGroupId!: pulumi.Output; + /** + * 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}`. + */ + public readonly role!: pulumi.Output; + + /** + * Create a RepositoryGroupIamBinding resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: RepositoryGroupIamBindingArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RepositoryGroupIamBindingArgs | RepositoryGroupIamBindingState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RepositoryGroupIamBindingState | undefined; + resourceInputs["codeRepositoryIndex"] = state ? state.codeRepositoryIndex : undefined; + resourceInputs["condition"] = state ? state.condition : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["members"] = state ? state.members : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["repositoryGroupId"] = state ? state.repositoryGroupId : undefined; + resourceInputs["role"] = state ? state.role : undefined; + } else { + const args = argsOrState as RepositoryGroupIamBindingArgs | undefined; + if ((!args || args.codeRepositoryIndex === undefined) && !opts.urn) { + throw new Error("Missing required property 'codeRepositoryIndex'"); + } + if ((!args || args.members === undefined) && !opts.urn) { + throw new Error("Missing required property 'members'"); + } + if ((!args || args.repositoryGroupId === undefined) && !opts.urn) { + throw new Error("Missing required property 'repositoryGroupId'"); + } + if ((!args || args.role === undefined) && !opts.urn) { + throw new Error("Missing required property 'role'"); + } + resourceInputs["codeRepositoryIndex"] = args ? args.codeRepositoryIndex : undefined; + resourceInputs["condition"] = args ? args.condition : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["members"] = args ? args.members : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["repositoryGroupId"] = args ? args.repositoryGroupId : undefined; + resourceInputs["role"] = args ? args.role : undefined; + resourceInputs["etag"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(RepositoryGroupIamBinding.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering RepositoryGroupIamBinding resources. + */ +export interface RepositoryGroupIamBindingState { + codeRepositoryIndex?: pulumi.Input; + condition?: pulumi.Input; + /** + * (Computed) The etag of the IAM policy. + */ + etag?: pulumi.Input; + /** + * 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. + */ + location?: pulumi.Input; + /** + * 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" + */ + members?: pulumi.Input[]>; + /** + * 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. + */ + project?: pulumi.Input; + repositoryGroupId?: pulumi.Input; + /** + * 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}`. + */ + role?: pulumi.Input; +} + +/** + * The set of arguments for constructing a RepositoryGroupIamBinding resource. + */ +export interface RepositoryGroupIamBindingArgs { + codeRepositoryIndex: pulumi.Input; + condition?: pulumi.Input; + /** + * 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. + */ + location?: pulumi.Input; + /** + * 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" + */ + members: pulumi.Input[]>; + /** + * 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. + */ + project?: pulumi.Input; + repositoryGroupId: pulumi.Input; + /** + * 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}`. + */ + role: pulumi.Input; +} diff --git a/sdk/nodejs/gemini/repositoryGroupIamMember.ts b/sdk/nodejs/gemini/repositoryGroupIamMember.ts new file mode 100644 index 0000000000..4f0d95c9b9 --- /dev/null +++ b/sdk/nodejs/gemini/repositoryGroupIamMember.ts @@ -0,0 +1,246 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## 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`. + */ +export class RepositoryGroupIamMember extends pulumi.CustomResource { + /** + * Get an existing RepositoryGroupIamMember resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: RepositoryGroupIamMemberState, opts?: pulumi.CustomResourceOptions): RepositoryGroupIamMember { + return new RepositoryGroupIamMember(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember'; + + /** + * Returns true if the given object is an instance of RepositoryGroupIamMember. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is RepositoryGroupIamMember { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === RepositoryGroupIamMember.__pulumiType; + } + + public readonly codeRepositoryIndex!: pulumi.Output; + public readonly condition!: pulumi.Output; + /** + * (Computed) The etag of the IAM policy. + */ + public /*out*/ readonly etag!: pulumi.Output; + /** + * 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. + */ + public readonly location!: pulumi.Output; + /** + * 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 readonly member!: pulumi.Output; + /** + * 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. + */ + public readonly project!: pulumi.Output; + public readonly repositoryGroupId!: pulumi.Output; + /** + * 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}`. + */ + public readonly role!: pulumi.Output; + + /** + * Create a RepositoryGroupIamMember resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: RepositoryGroupIamMemberArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RepositoryGroupIamMemberArgs | RepositoryGroupIamMemberState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RepositoryGroupIamMemberState | undefined; + resourceInputs["codeRepositoryIndex"] = state ? state.codeRepositoryIndex : undefined; + resourceInputs["condition"] = state ? state.condition : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["member"] = state ? state.member : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["repositoryGroupId"] = state ? state.repositoryGroupId : undefined; + resourceInputs["role"] = state ? state.role : undefined; + } else { + const args = argsOrState as RepositoryGroupIamMemberArgs | undefined; + if ((!args || args.codeRepositoryIndex === undefined) && !opts.urn) { + throw new Error("Missing required property 'codeRepositoryIndex'"); + } + if ((!args || args.member === undefined) && !opts.urn) { + throw new Error("Missing required property 'member'"); + } + if ((!args || args.repositoryGroupId === undefined) && !opts.urn) { + throw new Error("Missing required property 'repositoryGroupId'"); + } + if ((!args || args.role === undefined) && !opts.urn) { + throw new Error("Missing required property 'role'"); + } + resourceInputs["codeRepositoryIndex"] = args ? args.codeRepositoryIndex : undefined; + resourceInputs["condition"] = args ? args.condition : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["member"] = args ? args.member : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["repositoryGroupId"] = args ? args.repositoryGroupId : undefined; + resourceInputs["role"] = args ? args.role : undefined; + resourceInputs["etag"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(RepositoryGroupIamMember.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering RepositoryGroupIamMember resources. + */ +export interface RepositoryGroupIamMemberState { + codeRepositoryIndex?: pulumi.Input; + condition?: pulumi.Input; + /** + * (Computed) The etag of the IAM policy. + */ + etag?: pulumi.Input; + /** + * 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. + */ + location?: pulumi.Input; + /** + * 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" + */ + member?: pulumi.Input; + /** + * 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. + */ + project?: pulumi.Input; + repositoryGroupId?: pulumi.Input; + /** + * 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}`. + */ + role?: pulumi.Input; +} + +/** + * The set of arguments for constructing a RepositoryGroupIamMember resource. + */ +export interface RepositoryGroupIamMemberArgs { + codeRepositoryIndex: pulumi.Input; + condition?: pulumi.Input; + /** + * 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. + */ + location?: pulumi.Input; + /** + * 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" + */ + member: pulumi.Input; + /** + * 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. + */ + project?: pulumi.Input; + repositoryGroupId: pulumi.Input; + /** + * 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}`. + */ + role: pulumi.Input; +} diff --git a/sdk/nodejs/gemini/repositoryGroupIamPolicy.ts b/sdk/nodejs/gemini/repositoryGroupIamPolicy.ts new file mode 100644 index 0000000000..eb416aee33 --- /dev/null +++ b/sdk/nodejs/gemini/repositoryGroupIamPolicy.ts @@ -0,0 +1,189 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * ## 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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`. + */ +export class RepositoryGroupIamPolicy extends pulumi.CustomResource { + /** + * Get an existing RepositoryGroupIamPolicy resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: RepositoryGroupIamPolicyState, opts?: pulumi.CustomResourceOptions): RepositoryGroupIamPolicy { + return new RepositoryGroupIamPolicy(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy'; + + /** + * Returns true if the given object is an instance of RepositoryGroupIamPolicy. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is RepositoryGroupIamPolicy { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === RepositoryGroupIamPolicy.__pulumiType; + } + + public readonly codeRepositoryIndex!: pulumi.Output; + /** + * (Computed) The etag of the IAM policy. + */ + public /*out*/ readonly etag!: pulumi.Output; + /** + * 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. + */ + public readonly location!: pulumi.Output; + /** + * The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + */ + public readonly policyData!: pulumi.Output; + /** + * 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. + */ + public readonly project!: pulumi.Output; + public readonly repositoryGroupId!: pulumi.Output; + + /** + * Create a RepositoryGroupIamPolicy resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: RepositoryGroupIamPolicyArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RepositoryGroupIamPolicyArgs | RepositoryGroupIamPolicyState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RepositoryGroupIamPolicyState | undefined; + resourceInputs["codeRepositoryIndex"] = state ? state.codeRepositoryIndex : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["policyData"] = state ? state.policyData : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["repositoryGroupId"] = state ? state.repositoryGroupId : undefined; + } else { + const args = argsOrState as RepositoryGroupIamPolicyArgs | undefined; + if ((!args || args.codeRepositoryIndex === undefined) && !opts.urn) { + throw new Error("Missing required property 'codeRepositoryIndex'"); + } + if ((!args || args.policyData === undefined) && !opts.urn) { + throw new Error("Missing required property 'policyData'"); + } + if ((!args || args.repositoryGroupId === undefined) && !opts.urn) { + throw new Error("Missing required property 'repositoryGroupId'"); + } + resourceInputs["codeRepositoryIndex"] = args ? args.codeRepositoryIndex : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["policyData"] = args ? args.policyData : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["repositoryGroupId"] = args ? args.repositoryGroupId : undefined; + resourceInputs["etag"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(RepositoryGroupIamPolicy.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering RepositoryGroupIamPolicy resources. + */ +export interface RepositoryGroupIamPolicyState { + codeRepositoryIndex?: pulumi.Input; + /** + * (Computed) The etag of the IAM policy. + */ + etag?: pulumi.Input; + /** + * 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. + */ + location?: pulumi.Input; + /** + * The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + */ + policyData?: pulumi.Input; + /** + * 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. + */ + project?: pulumi.Input; + repositoryGroupId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a RepositoryGroupIamPolicy resource. + */ +export interface RepositoryGroupIamPolicyArgs { + codeRepositoryIndex: pulumi.Input; + /** + * 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. + */ + location?: pulumi.Input; + /** + * The policy data generated by + * a `gcp.organizations.getIAMPolicy` data source. + */ + policyData: pulumi.Input; + /** + * 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. + */ + project?: pulumi.Input; + repositoryGroupId: pulumi.Input; +} diff --git a/sdk/nodejs/gkehub/membershipBinding.ts b/sdk/nodejs/gkehub/membershipBinding.ts index b9b59914b4..27d5d73693 100644 --- a/sdk/nodejs/gkehub/membershipBinding.ts +++ b/sdk/nodejs/gkehub/membershipBinding.ts @@ -32,7 +32,7 @@ import * as utilities from "../utilities"; * subnetwork: "default", * }); * const membership = new gcp.gkehub.Membership("membership", { - * membershipId: "tf-test-membership_9106", + * membershipId: "tf-test-membership_27169", * endpoint: { * gkeCluster: { * resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`, @@ -41,9 +41,9 @@ import * as utilities from "../utilities"; * }, { * dependsOn: [primary], * }); - * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_27169"}); + * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_75223"}); * const membershipBinding = new gcp.gkehub.MembershipBinding("membership_binding", { - * membershipBindingId: "tf-test-membership-binding_75223", + * membershipBindingId: "tf-test-membership-binding_41819", * scope: scope.name, * membershipId: membership.membershipId, * location: "global", diff --git a/sdk/nodejs/gkehub/membershipRbacRoleBinding.ts b/sdk/nodejs/gkehub/membershipRbacRoleBinding.ts index 9faeb6562d..ccdce6946d 100644 --- a/sdk/nodejs/gkehub/membershipRbacRoleBinding.ts +++ b/sdk/nodejs/gkehub/membershipRbacRoleBinding.ts @@ -24,7 +24,7 @@ import * as utilities from "../utilities"; * subnetwork: "default", * }); * const membership = new gcp.gkehub.Membership("membership", { - * membershipId: "tf-test-membership_41819", + * membershipId: "tf-test-membership_75092", * endpoint: { * gkeCluster: { * resourceLink: pulumi.interpolate`//container.googleapis.com/${primary.id}`, @@ -35,7 +35,7 @@ import * as utilities from "../utilities"; * }); * const project = gcp.organizations.getProject({}); * const membershipRbacRoleBinding = new gcp.gkehub.MembershipRbacRoleBinding("membership_rbac_role_binding", { - * membershipRbacRoleBindingId: "tf-test-membership-rbac-role-binding_75092", + * membershipRbacRoleBindingId: "tf-test-membership-rbac-role-binding_2605", * membershipId: membership.membershipId, * user: project.then(project => `service-${project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com`), * role: { diff --git a/sdk/nodejs/gkehub/namespace.ts b/sdk/nodejs/gkehub/namespace.ts index b0dd976a60..7a8fbffe1c 100644 --- a/sdk/nodejs/gkehub/namespace.ts +++ b/sdk/nodejs/gkehub/namespace.ts @@ -23,9 +23,9 @@ import * as utilities from "../utilities"; * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * - * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_2605"}); + * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_34535"}); * const namespace = new gcp.gkehub.Namespace("namespace", { - * scopeNamespaceId: "tf-test-namespace_34535", + * scopeNamespaceId: "tf-test-namespace_22375", * scopeId: scope.scopeId, * scope: scope.name, * namespaceLabels: { diff --git a/sdk/nodejs/gkehub/scopeRbacRoleBinding.ts b/sdk/nodejs/gkehub/scopeRbacRoleBinding.ts index b9e6312ba3..a180fdaf12 100644 --- a/sdk/nodejs/gkehub/scopeRbacRoleBinding.ts +++ b/sdk/nodejs/gkehub/scopeRbacRoleBinding.ts @@ -23,9 +23,9 @@ import * as utilities from "../utilities"; * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * - * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_22375"}); + * const scope = new gcp.gkehub.Scope("scope", {scopeId: "tf-test-scope_29439"}); * const scopeRbacRoleBinding = new gcp.gkehub.ScopeRbacRoleBinding("scope_rbac_role_binding", { - * scopeRbacRoleBindingId: "tf-test-scope-rbac-role-binding_29439", + * scopeRbacRoleBindingId: "tf-test-scope-rbac-role-binding_87786", * scopeId: scope.scopeId, * user: "test-email@gmail.com", * role: { diff --git a/sdk/nodejs/iam/foldersPolicyBinding.ts b/sdk/nodejs/iam/foldersPolicyBinding.ts index 8f76e82285..07b9413e49 100644 --- a/sdk/nodejs/iam/foldersPolicyBinding.ts +++ b/sdk/nodejs/iam/foldersPolicyBinding.ts @@ -7,6 +7,14 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** + * A policy binding to a folder + * + * To get more information about FoldersPolicyBinding, see: + * + * * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/folders.locations.policyBindings) + * * How-to Guides + * * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + * * ## Example Usage * * ### Iam Folders Policy Binding diff --git a/sdk/nodejs/iam/index.ts b/sdk/nodejs/iam/index.ts index 959893865c..8907123f1f 100644 --- a/sdk/nodejs/iam/index.ts +++ b/sdk/nodejs/iam/index.ts @@ -50,6 +50,11 @@ export type PrincipalAccessBoundaryPolicy = import("./principalAccessBoundaryPol export const PrincipalAccessBoundaryPolicy: typeof import("./principalAccessBoundaryPolicy").PrincipalAccessBoundaryPolicy = null as any; utilities.lazyLoad(exports, ["PrincipalAccessBoundaryPolicy"], () => require("./principalAccessBoundaryPolicy")); +export { ProjectsPolicyBindingArgs, ProjectsPolicyBindingState } from "./projectsPolicyBinding"; +export type ProjectsPolicyBinding = import("./projectsPolicyBinding").ProjectsPolicyBinding; +export const ProjectsPolicyBinding: typeof import("./projectsPolicyBinding").ProjectsPolicyBinding = null as any; +utilities.lazyLoad(exports, ["ProjectsPolicyBinding"], () => require("./projectsPolicyBinding")); + export { WorkforcePoolArgs, WorkforcePoolState } from "./workforcePool"; export type WorkforcePool = import("./workforcePool").WorkforcePool; export const WorkforcePool: typeof import("./workforcePool").WorkforcePool = null as any; @@ -85,6 +90,8 @@ const _module = { return new OrganizationsPolicyBinding(name, undefined, { urn }) case "gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy": return new PrincipalAccessBoundaryPolicy(name, undefined, { urn }) + case "gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding": + return new ProjectsPolicyBinding(name, undefined, { urn }) case "gcp:iam/workforcePool:WorkforcePool": return new WorkforcePool(name, undefined, { urn }) case "gcp:iam/workforcePoolProvider:WorkforcePoolProvider": @@ -103,6 +110,7 @@ pulumi.runtime.registerResourceModule("gcp", "iam/denyPolicy", _module) pulumi.runtime.registerResourceModule("gcp", "iam/foldersPolicyBinding", _module) pulumi.runtime.registerResourceModule("gcp", "iam/organizationsPolicyBinding", _module) pulumi.runtime.registerResourceModule("gcp", "iam/principalAccessBoundaryPolicy", _module) +pulumi.runtime.registerResourceModule("gcp", "iam/projectsPolicyBinding", _module) pulumi.runtime.registerResourceModule("gcp", "iam/workforcePool", _module) pulumi.runtime.registerResourceModule("gcp", "iam/workforcePoolProvider", _module) pulumi.runtime.registerResourceModule("gcp", "iam/workloadIdentityPool", _module) diff --git a/sdk/nodejs/iam/organizationsPolicyBinding.ts b/sdk/nodejs/iam/organizationsPolicyBinding.ts index 30d5734366..410d9b3f3f 100644 --- a/sdk/nodejs/iam/organizationsPolicyBinding.ts +++ b/sdk/nodejs/iam/organizationsPolicyBinding.ts @@ -7,6 +7,14 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** + * A policy binding to an organizations + * + * To get more information about OrganizationsPolicyBinding, see: + * + * * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.policyBindings) + * * How-to Guides + * * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + * * ## Example Usage * * ### Iam Organizations Policy Binding diff --git a/sdk/nodejs/iam/principalAccessBoundaryPolicy.ts b/sdk/nodejs/iam/principalAccessBoundaryPolicy.ts index fcd40f3fec..3866a85112 100644 --- a/sdk/nodejs/iam/principalAccessBoundaryPolicy.ts +++ b/sdk/nodejs/iam/principalAccessBoundaryPolicy.ts @@ -7,6 +7,14 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** + * An IAM Principal Access Boundary Policy resource + * + * To get more information about PrincipalAccessBoundaryPolicy, see: + * + * * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.principalAccessBoundaryPolicies) + * * How-to Guides + * * [Create and apply Principal Access Boundaries](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create) + * * ## Example Usage * * ### Iam Principal Access Boundary Policy diff --git a/sdk/nodejs/iam/projectsPolicyBinding.ts b/sdk/nodejs/iam/projectsPolicyBinding.ts new file mode 100644 index 0000000000..afe640b7a8 --- /dev/null +++ b/sdk/nodejs/iam/projectsPolicyBinding.ts @@ -0,0 +1,365 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * A policy binding to a Project + * + * To get more information about ProjectsPolicyBinding, see: + * + * * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/projects.locations.policyBindings) + * * How-to Guides + * * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + * + * ## Example Usage + * + * ### Iam Projects Policy Binding + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const project = gcp.organizations.getProject({}); + * const pabPolicy = new gcp.iam.PrincipalAccessBoundaryPolicy("pab_policy", { + * organization: "123456789", + * location: "global", + * displayName: "test project binding", + * principalAccessBoundaryPolicyId: "my-pab-policy", + * }); + * const my_project_binding = new gcp.iam.ProjectsPolicyBinding("my-project-binding", { + * project: project.then(project => project.projectId), + * location: "global", + * displayName: "test project binding", + * policyKind: "PRINCIPAL_ACCESS_BOUNDARY", + * policyBindingId: "test-project-binding", + * policy: pulumi.interpolate`organizations/123456789/locations/global/principalAccessBoundaryPolicies/${pabPolicy.principalAccessBoundaryPolicyId}`, + * target: { + * principalSet: project.then(project => `//cloudresourcemanager.googleapis.com/projects/${project.projectId}`), + * }, + * }); + * ``` + * + * ## Import + * + * ProjectsPolicyBinding can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}}` + * + * * `{{project}}/{{location}}/{{policy_binding_id}}` + * + * * `{{location}}/{{policy_binding_id}}` + * + * When using the `pulumi import` command, ProjectsPolicyBinding can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{project}}/{{location}}/{{policy_binding_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{location}}/{{policy_binding_id}} + * ``` + */ +export class ProjectsPolicyBinding extends pulumi.CustomResource { + /** + * Get an existing ProjectsPolicyBinding resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: ProjectsPolicyBindingState, opts?: pulumi.CustomResourceOptions): ProjectsPolicyBinding { + return new ProjectsPolicyBinding(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding'; + + /** + * Returns true if the given object is an instance of ProjectsPolicyBinding. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is ProjectsPolicyBinding { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ProjectsPolicyBinding.__pulumiType; + } + + /** + * Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + */ + public readonly annotations!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + */ + public readonly condition!: pulumi.Output; + /** + * Output only. The time when the policy binding was created. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * Optional. The description of the policy binding. Must be less than or equal to 63 characters. + */ + public readonly displayName!: pulumi.Output; + public /*out*/ readonly effectiveAnnotations!: pulumi.Output<{[key: string]: string}>; + /** + * Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + */ + public /*out*/ readonly etag!: pulumi.Output; + /** + * The location of the Policy Binding + */ + public readonly location!: pulumi.Output; + /** + * The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + */ + public readonly policy!: pulumi.Output; + /** + * The Policy Binding ID. + */ + public readonly policyBindingId!: pulumi.Output; + /** + * Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + */ + public readonly policyKind!: pulumi.Output; + /** + * Output only. The globally unique ID of the policy to be bound. + */ + public /*out*/ readonly policyUid!: pulumi.Output; + public readonly project!: pulumi.Output; + /** + * Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + */ + public readonly target!: pulumi.Output; + /** + * Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + */ + public /*out*/ readonly uid!: pulumi.Output; + /** + * Output only. The time when the policy binding was most recently updated. + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a ProjectsPolicyBinding resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: ProjectsPolicyBindingArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ProjectsPolicyBindingArgs | ProjectsPolicyBindingState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ProjectsPolicyBindingState | undefined; + resourceInputs["annotations"] = state ? state.annotations : undefined; + resourceInputs["condition"] = state ? state.condition : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["displayName"] = state ? state.displayName : undefined; + resourceInputs["effectiveAnnotations"] = state ? state.effectiveAnnotations : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["policy"] = state ? state.policy : undefined; + resourceInputs["policyBindingId"] = state ? state.policyBindingId : undefined; + resourceInputs["policyKind"] = state ? state.policyKind : undefined; + resourceInputs["policyUid"] = state ? state.policyUid : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["target"] = state ? state.target : undefined; + resourceInputs["uid"] = state ? state.uid : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as ProjectsPolicyBindingArgs | undefined; + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.policy === undefined) && !opts.urn) { + throw new Error("Missing required property 'policy'"); + } + if ((!args || args.policyBindingId === undefined) && !opts.urn) { + throw new Error("Missing required property 'policyBindingId'"); + } + if ((!args || args.target === undefined) && !opts.urn) { + throw new Error("Missing required property 'target'"); + } + resourceInputs["annotations"] = args ? args.annotations : undefined; + resourceInputs["condition"] = args ? args.condition : undefined; + resourceInputs["displayName"] = args ? args.displayName : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["policy"] = args ? args.policy : undefined; + resourceInputs["policyBindingId"] = args ? args.policyBindingId : undefined; + resourceInputs["policyKind"] = args ? args.policyKind : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["target"] = args ? args.target : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveAnnotations"] = undefined /*out*/; + resourceInputs["etag"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["policyUid"] = undefined /*out*/; + resourceInputs["uid"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(ProjectsPolicyBinding.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ProjectsPolicyBinding resources. + */ +export interface ProjectsPolicyBindingState { + /** + * Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + */ + annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + */ + condition?: pulumi.Input; + /** + * Output only. The time when the policy binding was created. + */ + createTime?: pulumi.Input; + /** + * Optional. The description of the policy binding. Must be less than or equal to 63 characters. + */ + displayName?: pulumi.Input; + effectiveAnnotations?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + */ + etag?: pulumi.Input; + /** + * The location of the Policy Binding + */ + location?: pulumi.Input; + /** + * The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + */ + name?: pulumi.Input; + /** + * Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + */ + policy?: pulumi.Input; + /** + * The Policy Binding ID. + */ + policyBindingId?: pulumi.Input; + /** + * Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + */ + policyKind?: pulumi.Input; + /** + * Output only. The globally unique ID of the policy to be bound. + */ + policyUid?: pulumi.Input; + project?: pulumi.Input; + /** + * Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + */ + target?: pulumi.Input; + /** + * Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + */ + uid?: pulumi.Input; + /** + * Output only. The time when the policy binding was most recently updated. + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a ProjectsPolicyBinding resource. + */ +export interface ProjectsPolicyBindingArgs { + /** + * Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + * limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + * configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + */ + annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + * syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \"Summary + * size limit\" description: \"Determines if a summary is less than 100 chars\" expression: \"document.summary.size() < + * 100\" Example (Equality): title: \"Requestor is owner\" description: \"Determines if requestor is the document owner\" + * expression: \"document.owner == request.auth.claims.email\" Example (Logic): title: \"Public documents\" description: + * \"Determine whether the document should be publicly visible\" expression: \"document.type != 'private' && document.type + * != 'internal'\" Example (Data Manipulation): title: \"Notification string\" description: \"Create a notification string + * with a timestamp.\" expression: \"'New message received at ' + string(document.create_time)\" The exact variables and + * functions that may be referenced within an expression are determined by the service that evaluates it. See the service + * documentation for additional information. + */ + condition?: pulumi.Input; + /** + * Optional. The description of the policy binding. Must be less than or equal to 63 characters. + */ + displayName?: pulumi.Input; + /** + * The location of the Policy Binding + */ + location: pulumi.Input; + /** + * Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + */ + policy: pulumi.Input; + /** + * The Policy Binding ID. + */ + policyBindingId: pulumi.Input; + /** + * Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + * be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + * PRINCIPAL_ACCESS_BOUNDARY ACCESS + */ + policyKind?: pulumi.Input; + project?: pulumi.Input; + /** + * Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + * Structure is documented below. + */ + target: pulumi.Input; +} diff --git a/sdk/nodejs/iap/tunnelDestGroup.ts b/sdk/nodejs/iap/tunnelDestGroup.ts index 094f618532..d7190bec08 100644 --- a/sdk/nodejs/iap/tunnelDestGroup.ts +++ b/sdk/nodejs/iap/tunnelDestGroup.ts @@ -23,7 +23,7 @@ import * as utilities from "../utilities"; * * const destGroup = new gcp.iap.TunnelDestGroup("dest_group", { * region: "us-central1", - * groupName: "testgroup_87786", + * groupName: "testgroup_2067", * cidrs: [ * "10.1.0.0/16", * "192.168.10.0/24", diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts index cba8a15d8b..ef6d2521a3 100644 --- a/sdk/nodejs/index.ts +++ b/sdk/nodejs/index.ts @@ -79,6 +79,7 @@ import * as firebase from "./firebase"; import * as firebaserules from "./firebaserules"; import * as firestore from "./firestore"; import * as folder from "./folder"; +import * as gemini from "./gemini"; import * as gkebackup from "./gkebackup"; import * as gkehub from "./gkehub"; import * as gkeonprem from "./gkeonprem"; @@ -206,6 +207,7 @@ export { firebaserules, firestore, folder, + gemini, gkebackup, gkehub, gkeonprem, diff --git a/sdk/nodejs/integrationconnectors/managedZone.ts b/sdk/nodejs/integrationconnectors/managedZone.ts index 49c8180066..e1eb4f42d9 100644 --- a/sdk/nodejs/integrationconnectors/managedZone.ts +++ b/sdk/nodejs/integrationconnectors/managedZone.ts @@ -22,8 +22,8 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const targetProject = new gcp.organizations.Project("target_project", { - * projectId: "tf-test_2067", - * name: "tf-test_40785", + * projectId: "tf-test_40785", + * name: "tf-test_79169", * orgId: "123456789", * billingAccount: "000000-0000000-0000000-000000", * deletionPolicy: "DELETE", @@ -50,8 +50,8 @@ import * as utilities from "../utilities"; * dependsOn: [compute], * }); * const zone = new gcp.dns.ManagedZone("zone", { - * name: "tf-test-dns_79169", - * dnsName: "private_56529.example.com.", + * name: "tf-test-dns_56529", + * dnsName: "private_75413.example.com.", * visibility: "private", * privateVisibilityConfig: { * networks: [{ diff --git a/sdk/nodejs/netapp/activeDirectory.ts b/sdk/nodejs/netapp/activeDirectory.ts index a281eca4f9..30e57ad80a 100644 --- a/sdk/nodejs/netapp/activeDirectory.ts +++ b/sdk/nodejs/netapp/activeDirectory.ts @@ -145,7 +145,7 @@ export class ActiveDirectory extends pulumi.CustomResource { */ public readonly encryptDcConnections!: pulumi.Output; /** - * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 */ public readonly kdcHostname!: pulumi.Output; /** @@ -357,7 +357,7 @@ export interface ActiveDirectoryState { */ encryptDcConnections?: pulumi.Input; /** - * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 */ kdcHostname?: pulumi.Input; /** @@ -469,7 +469,7 @@ export interface ActiveDirectoryArgs { */ encryptDcConnections?: pulumi.Input; /** - * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + * Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 */ kdcHostname?: pulumi.Input; /** diff --git a/sdk/nodejs/netapp/volume.ts b/sdk/nodejs/netapp/volume.ts index c517f068e7..fba861279f 100644 --- a/sdk/nodejs/netapp/volume.ts +++ b/sdk/nodejs/netapp/volume.ts @@ -238,7 +238,7 @@ export class Volume extends pulumi.CustomResource { */ public readonly securityStyle!: pulumi.Output; /** - * Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + * Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. */ public /*out*/ readonly serviceLevel!: pulumi.Output; /** @@ -269,7 +269,7 @@ export class Volume extends pulumi.CustomResource { */ public /*out*/ readonly stateDetails!: pulumi.Output; /** - * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. */ public readonly storagePool!: pulumi.Output; /** @@ -551,7 +551,7 @@ export interface VolumeState { */ securityStyle?: pulumi.Input; /** - * Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + * Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. */ serviceLevel?: pulumi.Input; /** @@ -582,7 +582,7 @@ export interface VolumeState { */ stateDetails?: pulumi.Input; /** - * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. */ storagePool?: pulumi.Input; /** @@ -710,7 +710,7 @@ export interface VolumeArgs { */ snapshotPolicy?: pulumi.Input; /** - * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + * Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. */ storagePool: pulumi.Input; /** diff --git a/sdk/nodejs/networkconnectivity/spoke.ts b/sdk/nodejs/networkconnectivity/spoke.ts index 3b9a2f4aee..9a765284e3 100644 --- a/sdk/nodejs/networkconnectivity/spoke.ts +++ b/sdk/nodejs/networkconnectivity/spoke.ts @@ -62,17 +62,17 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const network = new gcp.compute.Network("network", { - * name: "tf-test-network_75413", + * name: "tf-test-network_55138", * autoCreateSubnetworks: false, * }); * const subnetwork = new gcp.compute.Subnetwork("subnetwork", { - * name: "tf-test-subnet_55138", + * name: "tf-test-subnet_37559", * ipCidrRange: "10.0.0.0/28", * region: "us-central1", * network: network.selfLink, * }); * const instance = new gcp.compute.Instance("instance", { - * name: "tf-test-instance_37559", + * name: "tf-test-instance_91980", * machineType: "e2-medium", * canIpForward: true, * zone: "us-central1-a", @@ -90,14 +90,14 @@ import * as utilities from "../utilities"; * }], * }); * const basicHub = new gcp.networkconnectivity.Hub("basic_hub", { - * name: "tf-test-hub_91980", + * name: "tf-test-hub_37118", * description: "A sample hub", * labels: { * "label-two": "value-one", * }, * }); * const primary = new gcp.networkconnectivity.Spoke("primary", { - * name: "tf-test-name_37118", + * name: "tf-test-name_80332", * location: "us-central1", * description: "A sample spoke with a linked routher appliance instance", * labels: { diff --git a/sdk/nodejs/networksecurity/index.ts b/sdk/nodejs/networksecurity/index.ts index 1f010ec971..452f78e52f 100644 --- a/sdk/nodejs/networksecurity/index.ts +++ b/sdk/nodejs/networksecurity/index.ts @@ -60,6 +60,26 @@ export const getAddressGroupIamPolicy: typeof import("./getAddressGroupIamPolicy export const getAddressGroupIamPolicyOutput: typeof import("./getAddressGroupIamPolicy").getAddressGroupIamPolicyOutput = null as any; utilities.lazyLoad(exports, ["getAddressGroupIamPolicy","getAddressGroupIamPolicyOutput"], () => require("./getAddressGroupIamPolicy")); +export { MirroringDeploymentArgs, MirroringDeploymentState } from "./mirroringDeployment"; +export type MirroringDeployment = import("./mirroringDeployment").MirroringDeployment; +export const MirroringDeployment: typeof import("./mirroringDeployment").MirroringDeployment = null as any; +utilities.lazyLoad(exports, ["MirroringDeployment"], () => require("./mirroringDeployment")); + +export { MirroringDeploymentGroupArgs, MirroringDeploymentGroupState } from "./mirroringDeploymentGroup"; +export type MirroringDeploymentGroup = import("./mirroringDeploymentGroup").MirroringDeploymentGroup; +export const MirroringDeploymentGroup: typeof import("./mirroringDeploymentGroup").MirroringDeploymentGroup = null as any; +utilities.lazyLoad(exports, ["MirroringDeploymentGroup"], () => require("./mirroringDeploymentGroup")); + +export { MirroringEndpointGroupArgs, MirroringEndpointGroupState } from "./mirroringEndpointGroup"; +export type MirroringEndpointGroup = import("./mirroringEndpointGroup").MirroringEndpointGroup; +export const MirroringEndpointGroup: typeof import("./mirroringEndpointGroup").MirroringEndpointGroup = null as any; +utilities.lazyLoad(exports, ["MirroringEndpointGroup"], () => require("./mirroringEndpointGroup")); + +export { MirroringEndpointGroupAssociationArgs, MirroringEndpointGroupAssociationState } from "./mirroringEndpointGroupAssociation"; +export type MirroringEndpointGroupAssociation = import("./mirroringEndpointGroupAssociation").MirroringEndpointGroupAssociation; +export const MirroringEndpointGroupAssociation: typeof import("./mirroringEndpointGroupAssociation").MirroringEndpointGroupAssociation = null as any; +utilities.lazyLoad(exports, ["MirroringEndpointGroupAssociation"], () => require("./mirroringEndpointGroupAssociation")); + export { SecurityProfileArgs, SecurityProfileState } from "./securityProfile"; export type SecurityProfile = import("./securityProfile").SecurityProfile; export const SecurityProfile: typeof import("./securityProfile").SecurityProfile = null as any; @@ -110,6 +130,14 @@ const _module = { return new GatewaySecurityPolicy(name, undefined, { urn }) case "gcp:networksecurity/gatewaySecurityPolicyRule:GatewaySecurityPolicyRule": return new GatewaySecurityPolicyRule(name, undefined, { urn }) + case "gcp:networksecurity/mirroringDeployment:MirroringDeployment": + return new MirroringDeployment(name, undefined, { urn }) + case "gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup": + return new MirroringDeploymentGroup(name, undefined, { urn }) + case "gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup": + return new MirroringEndpointGroup(name, undefined, { urn }) + case "gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation": + return new MirroringEndpointGroupAssociation(name, undefined, { urn }) case "gcp:networksecurity/securityProfile:SecurityProfile": return new SecurityProfile(name, undefined, { urn }) case "gcp:networksecurity/securityProfileGroup:SecurityProfileGroup": @@ -135,6 +163,10 @@ pulumi.runtime.registerResourceModule("gcp", "networksecurity/firewallEndpoint", pulumi.runtime.registerResourceModule("gcp", "networksecurity/firewallEndpointAssociation", _module) pulumi.runtime.registerResourceModule("gcp", "networksecurity/gatewaySecurityPolicy", _module) pulumi.runtime.registerResourceModule("gcp", "networksecurity/gatewaySecurityPolicyRule", _module) +pulumi.runtime.registerResourceModule("gcp", "networksecurity/mirroringDeployment", _module) +pulumi.runtime.registerResourceModule("gcp", "networksecurity/mirroringDeploymentGroup", _module) +pulumi.runtime.registerResourceModule("gcp", "networksecurity/mirroringEndpointGroup", _module) +pulumi.runtime.registerResourceModule("gcp", "networksecurity/mirroringEndpointGroupAssociation", _module) pulumi.runtime.registerResourceModule("gcp", "networksecurity/securityProfile", _module) pulumi.runtime.registerResourceModule("gcp", "networksecurity/securityProfileGroup", _module) pulumi.runtime.registerResourceModule("gcp", "networksecurity/serverTlsPolicy", _module) diff --git a/sdk/nodejs/networksecurity/mirroringDeployment.ts b/sdk/nodejs/networksecurity/mirroringDeployment.ts new file mode 100644 index 0000000000..c316b07138 --- /dev/null +++ b/sdk/nodejs/networksecurity/mirroringDeployment.ts @@ -0,0 +1,370 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Network Security Mirroring Deployment Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const network = new gcp.compute.Network("network", { + * name: "example-network", + * autoCreateSubnetworks: false, + * }); + * const subnetwork = new gcp.compute.Subnetwork("subnetwork", { + * name: "example-subnet", + * region: "us-central1", + * ipCidrRange: "10.1.0.0/16", + * network: network.name, + * }); + * const healthCheck = new gcp.compute.RegionHealthCheck("health_check", { + * name: "example-hc", + * region: "us-central1", + * httpHealthCheck: { + * port: 80, + * }, + * }); + * const backendService = new gcp.compute.RegionBackendService("backend_service", { + * name: "example-bs", + * region: "us-central1", + * healthChecks: healthCheck.id, + * protocol: "UDP", + * loadBalancingScheme: "INTERNAL", + * }); + * const forwardingRule = new gcp.compute.ForwardingRule("forwarding_rule", { + * name: "example-fwr", + * region: "us-central1", + * network: network.name, + * subnetwork: subnetwork.name, + * backendService: backendService.id, + * loadBalancingScheme: "INTERNAL", + * ports: ["6081"], + * ipProtocol: "UDP", + * isMirroringCollector: true, + * }); + * const deploymentGroup = new gcp.networksecurity.MirroringDeploymentGroup("deployment_group", { + * mirroringDeploymentGroupId: "example-dg", + * location: "global", + * network: network.id, + * }); + * const _default = new gcp.networksecurity.MirroringDeployment("default", { + * mirroringDeploymentId: "example-deployment", + * location: "us-central1-a", + * forwardingRule: forwardingRule.id, + * mirroringDeploymentGroup: deploymentGroup.id, + * labels: { + * foo: "bar", + * }, + * }); + * ``` + * + * ## Import + * + * MirroringDeployment can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}}` + * + * * `{{project}}/{{location}}/{{mirroring_deployment_id}}` + * + * * `{{location}}/{{mirroring_deployment_id}}` + * + * When using the `pulumi import` command, MirroringDeployment can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{project}}/{{location}}/{{mirroring_deployment_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{location}}/{{mirroring_deployment_id}} + * ``` + */ +export class MirroringDeployment extends pulumi.CustomResource { + /** + * Get an existing MirroringDeployment resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: MirroringDeploymentState, opts?: pulumi.CustomResourceOptions): MirroringDeployment { + return new MirroringDeployment(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:networksecurity/mirroringDeployment:MirroringDeployment'; + + /** + * Returns true if the given object is an instance of MirroringDeployment. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is MirroringDeployment { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === MirroringDeployment.__pulumiType; + } + + /** + * Output only. [Output only] Create time stamp + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + */ + public readonly forwardingRule!: pulumi.Output; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * 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`. + */ + public readonly location!: pulumi.Output; + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + */ + public readonly mirroringDeploymentGroup!: pulumi.Output; + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringDeploymentId from the methodSignature of Create RPC + * + * + * - - - + */ + public readonly mirroringDeploymentId!: pulumi.Output; + /** + * Immutable. Identifier. The name of the MirroringDeployment. + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + */ + public /*out*/ readonly reconciling!: pulumi.Output; + /** + * Output only. Current state of the deployment. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * OUT_OF_SYNC + * DELETE_FAILED + */ + public /*out*/ readonly state!: pulumi.Output; + /** + * Output only. [Output only] Update time stamp + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a MirroringDeployment resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: MirroringDeploymentArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: MirroringDeploymentArgs | MirroringDeploymentState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as MirroringDeploymentState | undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["forwardingRule"] = state ? state.forwardingRule : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["mirroringDeploymentGroup"] = state ? state.mirroringDeploymentGroup : undefined; + resourceInputs["mirroringDeploymentId"] = state ? state.mirroringDeploymentId : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["reconciling"] = state ? state.reconciling : undefined; + resourceInputs["state"] = state ? state.state : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as MirroringDeploymentArgs | undefined; + if ((!args || args.forwardingRule === undefined) && !opts.urn) { + throw new Error("Missing required property 'forwardingRule'"); + } + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.mirroringDeploymentGroup === undefined) && !opts.urn) { + throw new Error("Missing required property 'mirroringDeploymentGroup'"); + } + if ((!args || args.mirroringDeploymentId === undefined) && !opts.urn) { + throw new Error("Missing required property 'mirroringDeploymentId'"); + } + resourceInputs["forwardingRule"] = args ? args.forwardingRule : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["mirroringDeploymentGroup"] = args ? args.mirroringDeploymentGroup : undefined; + resourceInputs["mirroringDeploymentId"] = args ? args.mirroringDeploymentId : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["reconciling"] = undefined /*out*/; + resourceInputs["state"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(MirroringDeployment.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering MirroringDeployment resources. + */ +export interface MirroringDeploymentState { + /** + * Output only. [Output only] Create time stamp + */ + createTime?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + */ + forwardingRule?: pulumi.Input; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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`. + */ + location?: pulumi.Input; + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + */ + mirroringDeploymentGroup?: pulumi.Input; + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringDeploymentId from the methodSignature of Create RPC + * + * + * - - - + */ + mirroringDeploymentId?: pulumi.Input; + /** + * Immutable. Identifier. The name of the MirroringDeployment. + */ + name?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + */ + reconciling?: pulumi.Input; + /** + * Output only. Current state of the deployment. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + * OUT_OF_SYNC + * DELETE_FAILED + */ + state?: pulumi.Input; + /** + * Output only. [Output only] Update time stamp + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a MirroringDeployment resource. + */ +export interface MirroringDeploymentArgs { + /** + * Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + * to. Format is: + * projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + */ + forwardingRule: pulumi.Input; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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`. + */ + location: pulumi.Input; + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + */ + mirroringDeploymentGroup: pulumi.Input; + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringDeploymentId from the methodSignature of Create RPC + * + * + * - - - + */ + mirroringDeploymentId: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/networksecurity/mirroringDeploymentGroup.ts b/sdk/nodejs/networksecurity/mirroringDeploymentGroup.ts new file mode 100644 index 0000000000..d0b58c30a5 --- /dev/null +++ b/sdk/nodejs/networksecurity/mirroringDeploymentGroup.ts @@ -0,0 +1,322 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Network Security Mirroring Deployment Group Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const network = new gcp.compute.Network("network", { + * name: "example-network", + * autoCreateSubnetworks: false, + * }); + * const _default = new gcp.networksecurity.MirroringDeploymentGroup("default", { + * mirroringDeploymentGroupId: "example-dg", + * location: "global", + * network: network.id, + * labels: { + * foo: "bar", + * }, + * }); + * ``` + * + * ## Import + * + * MirroringDeploymentGroup can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}}` + * + * * `{{project}}/{{location}}/{{mirroring_deployment_group_id}}` + * + * * `{{location}}/{{mirroring_deployment_group_id}}` + * + * When using the `pulumi import` command, MirroringDeploymentGroup can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{project}}/{{location}}/{{mirroring_deployment_group_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{location}}/{{mirroring_deployment_group_id}} + * ``` + */ +export class MirroringDeploymentGroup extends pulumi.CustomResource { + /** + * Get an existing MirroringDeploymentGroup resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: MirroringDeploymentGroupState, opts?: pulumi.CustomResourceOptions): MirroringDeploymentGroup { + return new MirroringDeploymentGroup(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup'; + + /** + * Returns true if the given object is an instance of MirroringDeploymentGroup. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is MirroringDeploymentGroup { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === MirroringDeploymentGroup.__pulumiType; + } + + /** + * Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + * Structure is documented below. + */ + public /*out*/ readonly connectedEndpointGroups!: pulumi.Output; + /** + * Output only. [Output only] Create time stamp + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * 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`. + */ + public readonly location!: pulumi.Output; + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringDeploymentGroupId from the methodSignature of Create RPC + * + * + * - - - + */ + public readonly mirroringDeploymentGroupId!: pulumi.Output; + /** + * (Output) + * Output only. A connected mirroring endpoint group. + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + */ + public readonly network!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + */ + public /*out*/ readonly reconciling!: pulumi.Output; + /** + * Output only. Current state of the deployment group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + */ + public /*out*/ readonly state!: pulumi.Output; + /** + * Output only. [Output only] Update time stamp + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a MirroringDeploymentGroup resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: MirroringDeploymentGroupArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: MirroringDeploymentGroupArgs | MirroringDeploymentGroupState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as MirroringDeploymentGroupState | undefined; + resourceInputs["connectedEndpointGroups"] = state ? state.connectedEndpointGroups : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["mirroringDeploymentGroupId"] = state ? state.mirroringDeploymentGroupId : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["network"] = state ? state.network : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["reconciling"] = state ? state.reconciling : undefined; + resourceInputs["state"] = state ? state.state : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as MirroringDeploymentGroupArgs | undefined; + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.mirroringDeploymentGroupId === undefined) && !opts.urn) { + throw new Error("Missing required property 'mirroringDeploymentGroupId'"); + } + if ((!args || args.network === undefined) && !opts.urn) { + throw new Error("Missing required property 'network'"); + } + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["mirroringDeploymentGroupId"] = args ? args.mirroringDeploymentGroupId : undefined; + resourceInputs["network"] = args ? args.network : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["connectedEndpointGroups"] = undefined /*out*/; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["reconciling"] = undefined /*out*/; + resourceInputs["state"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(MirroringDeploymentGroup.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering MirroringDeploymentGroup resources. + */ +export interface MirroringDeploymentGroupState { + /** + * Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + * Structure is documented below. + */ + connectedEndpointGroups?: pulumi.Input[]>; + /** + * Output only. [Output only] Create time stamp + */ + createTime?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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`. + */ + location?: pulumi.Input; + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringDeploymentGroupId from the methodSignature of Create RPC + * + * + * - - - + */ + mirroringDeploymentGroupId?: pulumi.Input; + /** + * (Output) + * Output only. A connected mirroring endpoint group. + */ + name?: pulumi.Input; + /** + * Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + */ + network?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + */ + reconciling?: pulumi.Input; + /** + * Output only. Current state of the deployment group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CREATING + * DELETING + */ + state?: pulumi.Input; + /** + * Output only. [Output only] Update time stamp + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a MirroringDeploymentGroup resource. + */ +export interface MirroringDeploymentGroupArgs { + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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`. + */ + location: pulumi.Input; + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringDeploymentGroupId from the methodSignature of Create RPC + * + * + * - - - + */ + mirroringDeploymentGroupId: pulumi.Input; + /** + * Required. Immutable. The network that is being used for the deployment. Format is: + * projects/{project}/global/networks/{network}. + */ + network: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/networksecurity/mirroringEndpointGroup.ts b/sdk/nodejs/networksecurity/mirroringEndpointGroup.ts new file mode 100644 index 0000000000..743280c358 --- /dev/null +++ b/sdk/nodejs/networksecurity/mirroringEndpointGroup.ts @@ -0,0 +1,318 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Network Security Mirroring Endpoint Group Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const network = new gcp.compute.Network("network", { + * name: "example-network", + * autoCreateSubnetworks: false, + * }); + * const deploymentGroup = new gcp.networksecurity.MirroringDeploymentGroup("deployment_group", { + * mirroringDeploymentGroupId: "example-dg", + * location: "global", + * network: network.id, + * }); + * const _default = new gcp.networksecurity.MirroringEndpointGroup("default", { + * mirroringEndpointGroupId: "example-eg", + * location: "global", + * mirroringDeploymentGroup: deploymentGroup.id, + * labels: { + * foo: "bar", + * }, + * }); + * ``` + * + * ## Import + * + * MirroringEndpointGroup can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}}` + * + * * `{{project}}/{{location}}/{{mirroring_endpoint_group_id}}` + * + * * `{{location}}/{{mirroring_endpoint_group_id}}` + * + * When using the `pulumi import` command, MirroringEndpointGroup can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{project}}/{{location}}/{{mirroring_endpoint_group_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{location}}/{{mirroring_endpoint_group_id}} + * ``` + */ +export class MirroringEndpointGroup extends pulumi.CustomResource { + /** + * Get an existing MirroringEndpointGroup resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: MirroringEndpointGroupState, opts?: pulumi.CustomResourceOptions): MirroringEndpointGroup { + return new MirroringEndpointGroup(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup'; + + /** + * Returns true if the given object is an instance of MirroringEndpointGroup. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is MirroringEndpointGroup { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === MirroringEndpointGroup.__pulumiType; + } + + /** + * Output only. [Output only] Create time stamp + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * 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`. + */ + public readonly location!: pulumi.Output; + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + */ + public readonly mirroringDeploymentGroup!: pulumi.Output; + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringEndpointGroupId from the methodSignature of Create RPC + * + * + * - - - + */ + public readonly mirroringEndpointGroupId!: pulumi.Output; + /** + * Immutable. Identifier. The name of the MirroringEndpointGroup. + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + */ + public /*out*/ readonly reconciling!: pulumi.Output; + /** + * Output only. Current state of the endpoint group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CLOSED + * CREATING + * DELETING + * OUT_OF_SYNC + */ + public /*out*/ readonly state!: pulumi.Output; + /** + * Output only. [Output only] Update time stamp + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a MirroringEndpointGroup resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: MirroringEndpointGroupArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: MirroringEndpointGroupArgs | MirroringEndpointGroupState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as MirroringEndpointGroupState | undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["mirroringDeploymentGroup"] = state ? state.mirroringDeploymentGroup : undefined; + resourceInputs["mirroringEndpointGroupId"] = state ? state.mirroringEndpointGroupId : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["reconciling"] = state ? state.reconciling : undefined; + resourceInputs["state"] = state ? state.state : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as MirroringEndpointGroupArgs | undefined; + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.mirroringDeploymentGroup === undefined) && !opts.urn) { + throw new Error("Missing required property 'mirroringDeploymentGroup'"); + } + if ((!args || args.mirroringEndpointGroupId === undefined) && !opts.urn) { + throw new Error("Missing required property 'mirroringEndpointGroupId'"); + } + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["mirroringDeploymentGroup"] = args ? args.mirroringDeploymentGroup : undefined; + resourceInputs["mirroringEndpointGroupId"] = args ? args.mirroringEndpointGroupId : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["reconciling"] = undefined /*out*/; + resourceInputs["state"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(MirroringEndpointGroup.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering MirroringEndpointGroup resources. + */ +export interface MirroringEndpointGroupState { + /** + * Output only. [Output only] Create time stamp + */ + createTime?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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`. + */ + location?: pulumi.Input; + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + */ + mirroringDeploymentGroup?: pulumi.Input; + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringEndpointGroupId from the methodSignature of Create RPC + * + * + * - - - + */ + mirroringEndpointGroupId?: pulumi.Input; + /** + * Immutable. Identifier. The name of the MirroringEndpointGroup. + */ + name?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + */ + reconciling?: pulumi.Input; + /** + * Output only. Current state of the endpoint group. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * CLOSED + * CREATING + * DELETING + * OUT_OF_SYNC + */ + state?: pulumi.Input; + /** + * Output only. [Output only] Update time stamp + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a MirroringEndpointGroup resource. + */ +export interface MirroringEndpointGroupArgs { + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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`. + */ + location: pulumi.Input; + /** + * Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + */ + mirroringDeploymentGroup: pulumi.Input; + /** + * Required. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringEndpointGroupId from the methodSignature of Create RPC + * + * + * - - - + */ + mirroringEndpointGroupId: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/networksecurity/mirroringEndpointGroupAssociation.ts b/sdk/nodejs/networksecurity/mirroringEndpointGroupAssociation.ts new file mode 100644 index 0000000000..c9d8e8fc58 --- /dev/null +++ b/sdk/nodejs/networksecurity/mirroringEndpointGroupAssociation.ts @@ -0,0 +1,358 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Network Security Mirroring Endpoint Group Association Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const producerNetwork = new gcp.compute.Network("producer_network", { + * name: "example-prod-network", + * autoCreateSubnetworks: false, + * }); + * const consumerNetwork = new gcp.compute.Network("consumer_network", { + * name: "example-cons-network", + * autoCreateSubnetworks: false, + * }); + * const deploymentGroup = new gcp.networksecurity.MirroringDeploymentGroup("deployment_group", { + * mirroringDeploymentGroupId: "example-dg", + * location: "global", + * network: producerNetwork.id, + * }); + * const endpointGroup = new gcp.networksecurity.MirroringEndpointGroup("endpoint_group", { + * mirroringEndpointGroupId: "example-eg", + * location: "global", + * mirroringDeploymentGroup: deploymentGroup.id, + * }); + * const _default = new gcp.networksecurity.MirroringEndpointGroupAssociation("default", { + * mirroringEndpointGroupAssociationId: "example-ega", + * location: "global", + * network: consumerNetwork.id, + * mirroringEndpointGroup: endpointGroup.id, + * labels: { + * foo: "bar", + * }, + * }); + * ``` + * + * ## Import + * + * MirroringEndpointGroupAssociation can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}}` + * + * * `{{project}}/{{location}}/{{mirroring_endpoint_group_association_id}}` + * + * * `{{location}}/{{mirroring_endpoint_group_association_id}}` + * + * When using the `pulumi import` command, MirroringEndpointGroupAssociation can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{project}}/{{location}}/{{mirroring_endpoint_group_association_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{location}}/{{mirroring_endpoint_group_association_id}} + * ``` + */ +export class MirroringEndpointGroupAssociation extends pulumi.CustomResource { + /** + * Get an existing MirroringEndpointGroupAssociation resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: MirroringEndpointGroupAssociationState, opts?: pulumi.CustomResourceOptions): MirroringEndpointGroupAssociation { + return new MirroringEndpointGroupAssociation(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation'; + + /** + * Returns true if the given object is an instance of MirroringEndpointGroupAssociation. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is MirroringEndpointGroupAssociation { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === MirroringEndpointGroupAssociation.__pulumiType; + } + + /** + * Output only. [Output only] Create time stamp + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + public /*out*/ readonly effectiveLabels!: pulumi.Output<{[key: string]: string}>; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * 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`. + * + * + * - - - + */ + public readonly location!: pulumi.Output; + /** + * Output only. The list of locations that this association is in and its details. + * Structure is documented below. + */ + public /*out*/ readonly locationsDetails!: pulumi.Output; + /** + * Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + */ + public readonly mirroringEndpointGroup!: pulumi.Output; + /** + * Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringEndpointGroupAssociationId from the methodSignature of Create + * RPC + */ + public readonly mirroringEndpointGroupAssociationId!: pulumi.Output; + /** + * Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + */ + public readonly network!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + public /*out*/ readonly pulumiLabels!: pulumi.Output<{[key: string]: string}>; + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + */ + public /*out*/ readonly reconciling!: pulumi.Output; + /** + * (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + */ + public /*out*/ readonly state!: pulumi.Output; + /** + * Output only. [Output only] Update time stamp + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a MirroringEndpointGroupAssociation resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: MirroringEndpointGroupAssociationArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: MirroringEndpointGroupAssociationArgs | MirroringEndpointGroupAssociationState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as MirroringEndpointGroupAssociationState | undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["locationsDetails"] = state ? state.locationsDetails : undefined; + resourceInputs["mirroringEndpointGroup"] = state ? state.mirroringEndpointGroup : undefined; + resourceInputs["mirroringEndpointGroupAssociationId"] = state ? state.mirroringEndpointGroupAssociationId : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["network"] = state ? state.network : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["pulumiLabels"] = state ? state.pulumiLabels : undefined; + resourceInputs["reconciling"] = state ? state.reconciling : undefined; + resourceInputs["state"] = state ? state.state : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as MirroringEndpointGroupAssociationArgs | undefined; + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + if ((!args || args.mirroringEndpointGroup === undefined) && !opts.urn) { + throw new Error("Missing required property 'mirroringEndpointGroup'"); + } + if ((!args || args.network === undefined) && !opts.urn) { + throw new Error("Missing required property 'network'"); + } + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["mirroringEndpointGroup"] = args ? args.mirroringEndpointGroup : undefined; + resourceInputs["mirroringEndpointGroupAssociationId"] = args ? args.mirroringEndpointGroupAssociationId : undefined; + resourceInputs["network"] = args ? args.network : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["effectiveLabels"] = undefined /*out*/; + resourceInputs["locationsDetails"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["pulumiLabels"] = undefined /*out*/; + resourceInputs["reconciling"] = undefined /*out*/; + resourceInputs["state"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["effectiveLabels", "pulumiLabels"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(MirroringEndpointGroupAssociation.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering MirroringEndpointGroupAssociation resources. + */ +export interface MirroringEndpointGroupAssociationState { + /** + * Output only. [Output only] Create time stamp + */ + createTime?: pulumi.Input; + /** + * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + */ + effectiveLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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`. + * + * + * - - - + */ + location?: pulumi.Input; + /** + * Output only. The list of locations that this association is in and its details. + * Structure is documented below. + */ + locationsDetails?: pulumi.Input[]>; + /** + * Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + */ + mirroringEndpointGroup?: pulumi.Input; + /** + * Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringEndpointGroupAssociationId from the methodSignature of Create + * RPC + */ + mirroringEndpointGroupAssociationId?: pulumi.Input; + /** + * Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + */ + name?: pulumi.Input; + /** + * Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + */ + network?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The combination of labels configured directly on the resource + * and default labels configured on the provider. + */ + pulumiLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Output only. Whether reconciling is in progress, recommended per + * https://google.aip.dev/128. + */ + reconciling?: pulumi.Input; + /** + * (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + */ + state?: pulumi.Input; + /** + * Output only. [Output only] Update time stamp + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a MirroringEndpointGroupAssociation resource. + */ +export interface MirroringEndpointGroupAssociationArgs { + /** + * 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 `effectiveLabels` for all of the labels present on the resource. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * 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`. + * + * + * - - - + */ + location: pulumi.Input; + /** + * Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + * is: + * `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + */ + mirroringEndpointGroup: pulumi.Input; + /** + * Optional. Id of the requesting object + * If auto-generating Id server-side, remove this field and + * mirroringEndpointGroupAssociationId from the methodSignature of Create + * RPC + */ + mirroringEndpointGroupAssociationId?: pulumi.Input; + /** + * Required. Immutable. The VPC network associated. Format: + * projects/{project}/global/networks/{network}. + */ + network: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/oracledatabase/autonomousDatabase.ts b/sdk/nodejs/oracledatabase/autonomousDatabase.ts index 10b9e2ad07..a6c31b569d 100644 --- a/sdk/nodejs/oracledatabase/autonomousDatabase.ts +++ b/sdk/nodejs/oracledatabase/autonomousDatabase.ts @@ -42,6 +42,7 @@ import * as utilities from "../utilities"; * dbWorkload: "OLTP", * licenseType: "LICENSE_INCLUDED", * }, + * deletionProtection: true, * }); * ``` * ### Oracledatabase Autonomous Database Full @@ -87,6 +88,7 @@ import * as utilities from "../utilities"; * privateEndpointIp: "10.5.0.11", * privateEndpointLabel: "testhost", * }, + * deletionProtection: true, * }); * ``` * @@ -167,6 +169,7 @@ export class AutonomousDatabase extends pulumi.CustomResource { * contain a maximum of 30 alphanumeric characters. */ public readonly database!: pulumi.Output; + public readonly deletionProtection!: pulumi.Output; /** * The display name for the Autonomous Database. The name does not have to be unique within your project. */ @@ -230,6 +233,7 @@ export class AutonomousDatabase extends pulumi.CustomResource { resourceInputs["cidr"] = state ? state.cidr : undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; resourceInputs["database"] = state ? state.database : undefined; + resourceInputs["deletionProtection"] = state ? state.deletionProtection : undefined; resourceInputs["displayName"] = state ? state.displayName : undefined; resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; resourceInputs["entitlementId"] = state ? state.entitlementId : undefined; @@ -264,6 +268,7 @@ export class AutonomousDatabase extends pulumi.CustomResource { resourceInputs["autonomousDatabaseId"] = args ? args.autonomousDatabaseId : undefined; resourceInputs["cidr"] = args ? args.cidr : undefined; resourceInputs["database"] = args ? args.database : undefined; + resourceInputs["deletionProtection"] = args ? args.deletionProtection : undefined; resourceInputs["displayName"] = args ? args.displayName : undefined; resourceInputs["labels"] = args ? args.labels : undefined; resourceInputs["location"] = args ? args.location : undefined; @@ -312,6 +317,7 @@ export interface AutonomousDatabaseState { * contain a maximum of 30 alphanumeric characters. */ database?: pulumi.Input; + deletionProtection?: pulumi.Input; /** * The display name for the Autonomous Database. The name does not have to be unique within your project. */ @@ -383,6 +389,7 @@ export interface AutonomousDatabaseArgs { * contain a maximum of 30 alphanumeric characters. */ database: pulumi.Input; + deletionProtection?: pulumi.Input; /** * The display name for the Autonomous Database. The name does not have to be unique within your project. */ diff --git a/sdk/nodejs/oracledatabase/cloudExadataInfrastructure.ts b/sdk/nodejs/oracledatabase/cloudExadataInfrastructure.ts index cfc54d5d46..bfb4b70f39 100644 --- a/sdk/nodejs/oracledatabase/cloudExadataInfrastructure.ts +++ b/sdk/nodejs/oracledatabase/cloudExadataInfrastructure.ts @@ -33,6 +33,7 @@ import * as utilities from "../utilities"; * computeCount: 2, * storageCount: 3, * }, + * deletionProtection: true, * }); * ``` * ### Oracledatabase Cloud Exadata Infrastructure Full @@ -75,6 +76,7 @@ import * as utilities from "../utilities"; * labels: { * "label-one": "value-one", * }, + * deletionProtection: true, * }); * ``` * @@ -144,6 +146,7 @@ export class CloudExadataInfrastructure extends pulumi.CustomResource { * The date and time that the Exadata Infrastructure was created. */ public /*out*/ readonly createTime!: pulumi.Output; + public readonly deletionProtection!: pulumi.Output; /** * User friendly name for this resource. */ @@ -207,6 +210,7 @@ export class CloudExadataInfrastructure extends pulumi.CustomResource { const state = argsOrState as CloudExadataInfrastructureState | undefined; resourceInputs["cloudExadataInfrastructureId"] = state ? state.cloudExadataInfrastructureId : undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["deletionProtection"] = state ? state.deletionProtection : undefined; resourceInputs["displayName"] = state ? state.displayName : undefined; resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; resourceInputs["entitlementId"] = state ? state.entitlementId : undefined; @@ -226,6 +230,7 @@ export class CloudExadataInfrastructure extends pulumi.CustomResource { throw new Error("Missing required property 'location'"); } resourceInputs["cloudExadataInfrastructureId"] = args ? args.cloudExadataInfrastructureId : undefined; + resourceInputs["deletionProtection"] = args ? args.deletionProtection : undefined; resourceInputs["displayName"] = args ? args.displayName : undefined; resourceInputs["gcpOracleZone"] = args ? args.gcpOracleZone : undefined; resourceInputs["labels"] = args ? args.labels : undefined; @@ -263,6 +268,7 @@ export interface CloudExadataInfrastructureState { * The date and time that the Exadata Infrastructure was created. */ createTime?: pulumi.Input; + deletionProtection?: pulumi.Input; /** * User friendly name for this resource. */ @@ -326,6 +332,7 @@ export interface CloudExadataInfrastructureArgs { * - - - */ cloudExadataInfrastructureId: pulumi.Input; + deletionProtection?: pulumi.Input; /** * User friendly name for this resource. */ diff --git a/sdk/nodejs/oracledatabase/cloudVmCluster.ts b/sdk/nodejs/oracledatabase/cloudVmCluster.ts index fd8bf41e94..be832d7a2a 100644 --- a/sdk/nodejs/oracledatabase/cloudVmCluster.ts +++ b/sdk/nodejs/oracledatabase/cloudVmCluster.ts @@ -33,6 +33,7 @@ import * as utilities from "../utilities"; * computeCount: 2, * storageCount: 3, * }, + * deletionProtection: true, * }); * const default = gcp.compute.getNetwork({ * name: "new", @@ -54,6 +55,7 @@ import * as utilities from "../utilities"; * giVersion: "19.0.0.0", * hostnamePrefix: "hostname1", * }, + * deletionProtection: true, * }); * ``` * ### Oracledatabase Cloud Vmcluster Full @@ -72,6 +74,7 @@ import * as utilities from "../utilities"; * computeCount: 2, * storageCount: 3, * }, + * deletionProtection: true, * }); * const default = gcp.compute.getNetwork({ * name: "new", @@ -122,6 +125,7 @@ import * as utilities from "../utilities"; * }, * memorySizeGb: 60, * }, + * deletionProtection: true, * }); * ``` * @@ -199,6 +203,7 @@ export class CloudVmCluster extends pulumi.CustomResource { * The date and time that the VM cluster was created. */ public /*out*/ readonly createTime!: pulumi.Output; + public readonly deletionProtection!: pulumi.Output; /** * User friendly name for this resource. */ @@ -271,6 +276,7 @@ export class CloudVmCluster extends pulumi.CustomResource { resourceInputs["cidr"] = state ? state.cidr : undefined; resourceInputs["cloudVmClusterId"] = state ? state.cloudVmClusterId : undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["deletionProtection"] = state ? state.deletionProtection : undefined; resourceInputs["displayName"] = state ? state.displayName : undefined; resourceInputs["effectiveLabels"] = state ? state.effectiveLabels : undefined; resourceInputs["exadataInfrastructure"] = state ? state.exadataInfrastructure : undefined; @@ -305,6 +311,7 @@ export class CloudVmCluster extends pulumi.CustomResource { resourceInputs["backupSubnetCidr"] = args ? args.backupSubnetCidr : undefined; resourceInputs["cidr"] = args ? args.cidr : undefined; resourceInputs["cloudVmClusterId"] = args ? args.cloudVmClusterId : undefined; + resourceInputs["deletionProtection"] = args ? args.deletionProtection : undefined; resourceInputs["displayName"] = args ? args.displayName : undefined; resourceInputs["exadataInfrastructure"] = args ? args.exadataInfrastructure : undefined; resourceInputs["labels"] = args ? args.labels : undefined; @@ -351,6 +358,7 @@ export interface CloudVmClusterState { * The date and time that the VM cluster was created. */ createTime?: pulumi.Input; + deletionProtection?: pulumi.Input; /** * User friendly name for this resource. */ @@ -429,6 +437,7 @@ export interface CloudVmClusterArgs { * - - - */ cloudVmClusterId: pulumi.Input; + deletionProtection?: pulumi.Input; /** * User friendly name for this resource. */ diff --git a/sdk/nodejs/oracledatabase/getAutonomousDatabase.ts b/sdk/nodejs/oracledatabase/getAutonomousDatabase.ts index 661e1fdece..bbf0c3b96b 100644 --- a/sdk/nodejs/oracledatabase/getAutonomousDatabase.ts +++ b/sdk/nodejs/oracledatabase/getAutonomousDatabase.ts @@ -63,6 +63,7 @@ export interface GetAutonomousDatabaseResult { readonly cidr: string; readonly createTime: string; readonly database: string; + readonly deletionProtection: boolean; readonly displayName: string; readonly effectiveLabels: {[key: string]: string}; readonly entitlementId: string; diff --git a/sdk/nodejs/oracledatabase/getCloudExadataInfrastructure.ts b/sdk/nodejs/oracledatabase/getCloudExadataInfrastructure.ts index fe069d35bf..76d697b3c0 100644 --- a/sdk/nodejs/oracledatabase/getCloudExadataInfrastructure.ts +++ b/sdk/nodejs/oracledatabase/getCloudExadataInfrastructure.ts @@ -60,6 +60,7 @@ export interface GetCloudExadataInfrastructureArgs { export interface GetCloudExadataInfrastructureResult { readonly cloudExadataInfrastructureId: string; readonly createTime: string; + readonly deletionProtection: boolean; readonly displayName: string; readonly effectiveLabels: {[key: string]: string}; readonly entitlementId: string; diff --git a/sdk/nodejs/oracledatabase/getCloudVmCluster.ts b/sdk/nodejs/oracledatabase/getCloudVmCluster.ts index 4cffc3cc32..cc04a4ac38 100644 --- a/sdk/nodejs/oracledatabase/getCloudVmCluster.ts +++ b/sdk/nodejs/oracledatabase/getCloudVmCluster.ts @@ -62,6 +62,7 @@ export interface GetCloudVmClusterResult { readonly cidr: string; readonly cloudVmClusterId: string; readonly createTime: string; + readonly deletionProtection: boolean; readonly displayName: string; readonly effectiveLabels: {[key: string]: string}; readonly exadataInfrastructure: string; diff --git a/sdk/nodejs/orgpolicy/policy.ts b/sdk/nodejs/orgpolicy/policy.ts index 71e8ccd7c4..14e253ea40 100644 --- a/sdk/nodejs/orgpolicy/policy.ts +++ b/sdk/nodejs/orgpolicy/policy.ts @@ -119,7 +119,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const constraint = new gcp.orgpolicy.CustomConstraint("constraint", { - * name: "custom.disableGkeAutoUpgrade_13293", + * name: "custom.disableGkeAutoUpgrade_40289", * parent: "organizations/123456789", * displayName: "Disable GKE auto upgrade", * description: "Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.", diff --git a/sdk/nodejs/parallelstore/instance.ts b/sdk/nodejs/parallelstore/instance.ts index 829d4e0b3e..486f3f27bb 100644 --- a/sdk/nodejs/parallelstore/instance.ts +++ b/sdk/nodejs/parallelstore/instance.ts @@ -5,6 +5,8 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** + * A Parallelstore Instance. + * * ## Example Usage * * ### Parallelstore Instance Basic diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts index f4eaba8546..cb187c0803 100644 --- a/sdk/nodejs/provider.ts +++ b/sdk/nodejs/provider.ts @@ -113,6 +113,7 @@ export class Provider extends pulumi.ProviderResource { public readonly firebaseStorageCustomEndpoint!: pulumi.Output; public readonly firebaserulesCustomEndpoint!: pulumi.Output; public readonly firestoreCustomEndpoint!: pulumi.Output; + public readonly geminiCustomEndpoint!: pulumi.Output; public readonly gkeBackupCustomEndpoint!: pulumi.Output; public readonly gkeHub2CustomEndpoint!: pulumi.Output; public readonly gkeHubCustomEndpoint!: pulumi.Output; @@ -301,6 +302,7 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["firebaseStorageCustomEndpoint"] = args ? args.firebaseStorageCustomEndpoint : undefined; resourceInputs["firebaserulesCustomEndpoint"] = args ? args.firebaserulesCustomEndpoint : undefined; resourceInputs["firestoreCustomEndpoint"] = args ? args.firestoreCustomEndpoint : undefined; + resourceInputs["geminiCustomEndpoint"] = args ? args.geminiCustomEndpoint : undefined; resourceInputs["gkeBackupCustomEndpoint"] = args ? args.gkeBackupCustomEndpoint : undefined; resourceInputs["gkeHub2CustomEndpoint"] = args ? args.gkeHub2CustomEndpoint : undefined; resourceInputs["gkeHubCustomEndpoint"] = args ? args.gkeHubCustomEndpoint : undefined; @@ -492,6 +494,7 @@ export interface ProviderArgs { firebaseStorageCustomEndpoint?: pulumi.Input; firebaserulesCustomEndpoint?: pulumi.Input; firestoreCustomEndpoint?: pulumi.Input; + geminiCustomEndpoint?: pulumi.Input; gkeBackupCustomEndpoint?: pulumi.Input; gkeHub2CustomEndpoint?: pulumi.Input; gkeHubCustomEndpoint?: pulumi.Input; diff --git a/sdk/nodejs/pubsub/subscription.ts b/sdk/nodejs/pubsub/subscription.ts index 21b02a0e7c..a363d1338f 100644 --- a/sdk/nodejs/pubsub/subscription.ts +++ b/sdk/nodejs/pubsub/subscription.ts @@ -243,7 +243,7 @@ import * as utilities from "../utilities"; * cloudStorageConfig: { * bucket: example.name, * filenamePrefix: "pre-", - * filenameSuffix: "-_40289", + * filenameSuffix: "-_33395", * filenameDatetimeFormat: "YYYY-MM-DD/hh_mm_ssZ", * maxBytes: 1000, * maxDuration: "300s", @@ -280,7 +280,7 @@ import * as utilities from "../utilities"; * cloudStorageConfig: { * bucket: example.name, * filenamePrefix: "pre-", - * filenameSuffix: "-_33395", + * filenameSuffix: "-_76044", * filenameDatetimeFormat: "YYYY-MM-DD/hh_mm_ssZ", * maxBytes: 1000, * maxDuration: "300s", @@ -324,7 +324,7 @@ import * as utilities from "../utilities"; * cloudStorageConfig: { * bucket: example.name, * filenamePrefix: "pre-", - * filenameSuffix: "-_76044", + * filenameSuffix: "-_69391", * filenameDatetimeFormat: "YYYY-MM-DD/hh_mm_ssZ", * maxBytes: 1000, * maxDuration: "300s", diff --git a/sdk/nodejs/redis/cluster.ts b/sdk/nodejs/redis/cluster.ts index ec99cc5969..4f3ac8b7d0 100644 --- a/sdk/nodejs/redis/cluster.ts +++ b/sdk/nodejs/redis/cluster.ts @@ -7,14 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A Google Cloud Redis Cluster instance. - * - * To get more information about Cluster, see: - * - * * [API documentation](https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/memorystore/docs/cluster/) - * * ## Example Usage * * ### Redis Cluster Ha @@ -129,6 +121,135 @@ import * as utilities from "../utilities"; * dependsOn: [_default], * }); * ``` + * ### Redis Cluster Secondary + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const producerNet = new gcp.compute.Network("producer_net", { + * name: "mynetwork", + * autoCreateSubnetworks: false, + * }); + * const primaryClusterProducerSubnet = new gcp.compute.Subnetwork("primary_cluster_producer_subnet", { + * name: "mysubnet-primary-cluster", + * ipCidrRange: "10.0.1.0/29", + * region: "us-east1", + * network: producerNet.id, + * }); + * const primaryClusterRegionScp = new gcp.networkconnectivity.ServiceConnectionPolicy("primary_cluster_region_scp", { + * name: "mypolicy-primary-cluster", + * location: "us-east1", + * serviceClass: "gcp-memorystore-redis", + * description: "Primary cluster service connection policy", + * network: producerNet.id, + * pscConfig: { + * subnetworks: [primaryClusterProducerSubnet.id], + * }, + * }); + * // Primary cluster + * const primaryCluster = new gcp.redis.Cluster("primary_cluster", { + * name: "my-primary-cluster", + * region: "us-east1", + * pscConfigs: [{ + * network: producerNet.id, + * }], + * authorizationMode: "AUTH_MODE_DISABLED", + * transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_DISABLED", + * shardCount: 3, + * redisConfigs: { + * "maxmemory-policy": "volatile-ttl", + * }, + * nodeType: "REDIS_HIGHMEM_MEDIUM", + * persistenceConfig: { + * mode: "RDB", + * rdbConfig: { + * rdbSnapshotPeriod: "ONE_HOUR", + * rdbSnapshotStartTime: "2024-10-02T15:01:23Z", + * }, + * }, + * zoneDistributionConfig: { + * mode: "MULTI_ZONE", + * }, + * replicaCount: 1, + * maintenancePolicy: { + * weeklyMaintenanceWindows: [{ + * day: "MONDAY", + * startTime: { + * hours: 1, + * minutes: 0, + * seconds: 0, + * nanos: 0, + * }, + * }], + * }, + * deletionProtectionEnabled: true, + * }, { + * dependsOn: [primaryClusterRegionScp], + * }); + * const secondaryClusterProducerSubnet = new gcp.compute.Subnetwork("secondary_cluster_producer_subnet", { + * name: "mysubnet-secondary-cluster", + * ipCidrRange: "10.0.2.0/29", + * region: "europe-west1", + * network: producerNet.id, + * }); + * const secondaryClusterRegionScp = new gcp.networkconnectivity.ServiceConnectionPolicy("secondary_cluster_region_scp", { + * name: "mypolicy-secondary-cluster", + * location: "europe-west1", + * serviceClass: "gcp-memorystore-redis", + * description: "Secondary cluster service connection policy", + * network: producerNet.id, + * pscConfig: { + * subnetworks: [secondaryClusterProducerSubnet.id], + * }, + * }); + * // Secondary cluster + * const secondaryCluster = new gcp.redis.Cluster("secondary_cluster", { + * name: "my-secondary-cluster", + * region: "europe-west1", + * pscConfigs: [{ + * network: producerNet.id, + * }], + * authorizationMode: "AUTH_MODE_DISABLED", + * transitEncryptionMode: "TRANSIT_ENCRYPTION_MODE_DISABLED", + * shardCount: 3, + * redisConfigs: { + * "maxmemory-policy": "volatile-ttl", + * }, + * nodeType: "REDIS_HIGHMEM_MEDIUM", + * persistenceConfig: { + * mode: "RDB", + * rdbConfig: { + * rdbSnapshotPeriod: "ONE_HOUR", + * rdbSnapshotStartTime: "2024-10-02T15:01:23Z", + * }, + * }, + * zoneDistributionConfig: { + * mode: "MULTI_ZONE", + * }, + * replicaCount: 2, + * maintenancePolicy: { + * weeklyMaintenanceWindows: [{ + * day: "WEDNESDAY", + * startTime: { + * hours: 1, + * minutes: 0, + * seconds: 0, + * nanos: 0, + * }, + * }], + * }, + * deletionProtectionEnabled: true, + * crossClusterReplicationConfig: { + * clusterRole: "SECONDARY", + * primaryCluster: { + * cluster: primaryCluster.id, + * }, + * }, + * }, { + * dependsOn: [secondaryClusterRegionScp], + * }); + * ``` * ### Redis Cluster Rdb * * ```typescript @@ -331,6 +452,10 @@ export class Cluster extends pulumi.CustomResource { * digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". */ public /*out*/ readonly createTime!: pulumi.Output; + /** + * Cross cluster replication config + */ + public readonly crossClusterReplicationConfig!: pulumi.Output; /** * Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster * operation will fail. Default value is true. @@ -444,6 +569,7 @@ export class Cluster extends pulumi.CustomResource { const state = argsOrState as ClusterState | undefined; resourceInputs["authorizationMode"] = state ? state.authorizationMode : undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["crossClusterReplicationConfig"] = state ? state.crossClusterReplicationConfig : undefined; resourceInputs["deletionProtectionEnabled"] = state ? state.deletionProtectionEnabled : undefined; resourceInputs["discoveryEndpoints"] = state ? state.discoveryEndpoints : undefined; resourceInputs["maintenancePolicy"] = state ? state.maintenancePolicy : undefined; @@ -474,6 +600,7 @@ export class Cluster extends pulumi.CustomResource { throw new Error("Missing required property 'shardCount'"); } resourceInputs["authorizationMode"] = args ? args.authorizationMode : undefined; + resourceInputs["crossClusterReplicationConfig"] = args ? args.crossClusterReplicationConfig : undefined; resourceInputs["deletionProtectionEnabled"] = args ? args.deletionProtectionEnabled : undefined; resourceInputs["maintenancePolicy"] = args ? args.maintenancePolicy : undefined; resourceInputs["name"] = args ? args.name : undefined; @@ -518,6 +645,10 @@ export interface ClusterState { * digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z". */ createTime?: pulumi.Input; + /** + * Cross cluster replication config + */ + crossClusterReplicationConfig?: pulumi.Input; /** * Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster * operation will fail. Default value is true. @@ -627,6 +758,10 @@ export interface ClusterArgs { * "AUTH_MODE_DISABLED"] */ authorizationMode?: pulumi.Input; + /** + * Cross cluster replication config + */ + crossClusterReplicationConfig?: pulumi.Input; /** * Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster * operation will fail. Default value is true. diff --git a/sdk/nodejs/serviceaccount/getAccountIdToken.ts b/sdk/nodejs/serviceaccount/getAccountIdToken.ts index 96c75ffc47..fbd9df55e7 100644 --- a/sdk/nodejs/serviceaccount/getAccountIdToken.ts +++ b/sdk/nodejs/serviceaccount/getAccountIdToken.ts @@ -26,7 +26,7 @@ import * as utilities from "../utilities"; * ``` * * ### Service Account Impersonation. - * `gcp.serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. + * `gcp.serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. * * Note: to use the following, you must grant `targetServiceAccount` the * `roles/iam.serviceAccountTokenCreator` role on itself. @@ -145,7 +145,7 @@ export interface GetAccountIdTokenResult { * ``` * * ### Service Account Impersonation. - * `gcp.serviceaccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. + * `gcp.serviceaccount.getAccountIdToken` will use background impersonated credentials provided by `gcp.serviceaccount.getAccountAccessToken`. * * Note: to use the following, you must grant `targetServiceAccount` the * `roles/iam.serviceAccountTokenCreator` role on itself. diff --git a/sdk/nodejs/serviceaccount/getAccountKey.ts b/sdk/nodejs/serviceaccount/getAccountKey.ts index 839e99b729..2c5d89171d 100644 --- a/sdk/nodejs/serviceaccount/getAccountKey.ts +++ b/sdk/nodejs/serviceaccount/getAccountKey.ts @@ -41,7 +41,7 @@ export interface GetAccountKeyArgs { */ name: string; /** - * The ID of the project that the service account will be created in. + * The ID of the project that the service account is present in. * Defaults to the provider project configuration. */ project?: string; @@ -105,7 +105,7 @@ export interface GetAccountKeyOutputArgs { */ name: pulumi.Input; /** - * The ID of the project that the service account will be created in. + * The ID of the project that the service account is present in. * Defaults to the provider project configuration. */ project?: pulumi.Input; diff --git a/sdk/nodejs/storage/getBucket.ts b/sdk/nodejs/storage/getBucket.ts index 907f6569e5..4d8c46f93a 100644 --- a/sdk/nodejs/storage/getBucket.ts +++ b/sdk/nodejs/storage/getBucket.ts @@ -40,7 +40,7 @@ export interface GetBucketArgs { */ name: string; /** - * 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. + * 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. */ project?: string; } @@ -116,7 +116,7 @@ export interface GetBucketOutputArgs { */ name: pulumi.Input; /** - * 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. + * 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. */ project?: pulumi.Input; } diff --git a/sdk/nodejs/storage/getBucketObjectContent.ts b/sdk/nodejs/storage/getBucketObjectContent.ts index 17ea6c1733..4780bf5aa2 100644 --- a/sdk/nodejs/storage/getBucketObjectContent.ts +++ b/sdk/nodejs/storage/getBucketObjectContent.ts @@ -12,7 +12,7 @@ import * as utilities from "../utilities"; * and * [API](https://cloud.google.com/storage/docs/json_api/v1/objects). * - * > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + * > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. * * ## Example Usage * @@ -97,7 +97,7 @@ export interface GetBucketObjectContentResult { * and * [API](https://cloud.google.com/storage/docs/json_api/v1/objects). * - * > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + * > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. * * ## Example Usage * diff --git a/sdk/nodejs/tpu/index.ts b/sdk/nodejs/tpu/index.ts index c9a2ddbfc9..587fec548f 100644 --- a/sdk/nodejs/tpu/index.ts +++ b/sdk/nodejs/tpu/index.ts @@ -25,6 +25,11 @@ export type Node = import("./node").Node; export const Node: typeof import("./node").Node = null as any; utilities.lazyLoad(exports, ["Node"], () => require("./node")); +export { V2QueuedResourceArgs, V2QueuedResourceState } from "./v2queuedResource"; +export type V2QueuedResource = import("./v2queuedResource").V2QueuedResource; +export const V2QueuedResource: typeof import("./v2queuedResource").V2QueuedResource = null as any; +utilities.lazyLoad(exports, ["V2QueuedResource"], () => require("./v2queuedResource")); + export { V2VmArgs, V2VmState } from "./v2vm"; export type V2Vm = import("./v2vm").V2Vm; export const V2Vm: typeof import("./v2vm").V2Vm = null as any; @@ -37,6 +42,8 @@ const _module = { switch (type) { case "gcp:tpu/node:Node": return new Node(name, undefined, { urn }) + case "gcp:tpu/v2QueuedResource:V2QueuedResource": + return new V2QueuedResource(name, undefined, { urn }) case "gcp:tpu/v2Vm:V2Vm": return new V2Vm(name, undefined, { urn }) default: @@ -45,4 +52,5 @@ const _module = { }, }; pulumi.runtime.registerResourceModule("gcp", "tpu/node", _module) +pulumi.runtime.registerResourceModule("gcp", "tpu/v2QueuedResource", _module) pulumi.runtime.registerResourceModule("gcp", "tpu/v2Vm", _module) diff --git a/sdk/nodejs/tpu/v2queuedResource.ts b/sdk/nodejs/tpu/v2queuedResource.ts new file mode 100644 index 0000000000..6f04ae7cd2 --- /dev/null +++ b/sdk/nodejs/tpu/v2queuedResource.ts @@ -0,0 +1,197 @@ +// *** 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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; +import * as utilities from "../utilities"; + +/** + * ## Example Usage + * + * ### Tpu V2 Queued Resource Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const qr = new gcp.tpu.V2QueuedResource("qr", { + * name: "test-qr", + * zone: "us-central1-c", + * project: "my-project-name", + * tpu: { + * nodeSpecs: [{ + * parent: "projects/my-project-name/locations/us-central1-c", + * nodeId: "test-tpu", + * node: { + * runtimeVersion: "tpu-vm-tf-2.13.0", + * acceleratorType: "v2-8", + * description: "Text description of the TPU.", + * }, + * }], + * }, + * }); + * ``` + * + * ## Import + * + * QueuedResource can be imported using any of these accepted formats: + * + * * `projects/{{project}}/locations/{{zone}}/queuedResources/{{name}}` + * + * * `{{project}}/{{zone}}/{{name}}` + * + * * `{{zone}}/{{name}}` + * + * * `{{name}}` + * + * When using the `pulumi import` command, QueuedResource can be imported using one of the formats above. For example: + * + * ```sh + * $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default projects/{{project}}/locations/{{zone}}/queuedResources/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{project}}/{{zone}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{zone}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{name}} + * ``` + */ +export class V2QueuedResource extends pulumi.CustomResource { + /** + * Get an existing V2QueuedResource resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: V2QueuedResourceState, opts?: pulumi.CustomResourceOptions): V2QueuedResource { + return new V2QueuedResource(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:tpu/v2QueuedResource:V2QueuedResource'; + + /** + * Returns true if the given object is an instance of V2QueuedResource. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is V2QueuedResource { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === V2QueuedResource.__pulumiType; + } + + /** + * The immutable name of the Queued Resource. + * + * + * - - - + */ + public readonly name!: pulumi.Output; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + public readonly project!: pulumi.Output; + /** + * Defines a TPU resource. + * Structure is documented below. + */ + public readonly tpu!: pulumi.Output; + /** + * The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + */ + public readonly zone!: pulumi.Output; + + /** + * Create a V2QueuedResource resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args?: V2QueuedResourceArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: V2QueuedResourceArgs | V2QueuedResourceState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as V2QueuedResourceState | undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["tpu"] = state ? state.tpu : undefined; + resourceInputs["zone"] = state ? state.zone : undefined; + } else { + const args = argsOrState as V2QueuedResourceArgs | undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["tpu"] = args ? args.tpu : undefined; + resourceInputs["zone"] = args ? args.zone : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(V2QueuedResource.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering V2QueuedResource resources. + */ +export interface V2QueuedResourceState { + /** + * The immutable name of the Queued Resource. + * + * + * - - - + */ + name?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * Defines a TPU resource. + * Structure is documented below. + */ + tpu?: pulumi.Input; + /** + * The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + */ + zone?: pulumi.Input; +} + +/** + * The set of arguments for constructing a V2QueuedResource resource. + */ +export interface V2QueuedResourceArgs { + /** + * The immutable name of the Queued Resource. + * + * + * - - - + */ + name?: pulumi.Input; + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * Defines a TPU resource. + * Structure is documented below. + */ + tpu?: pulumi.Input; + /** + * The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + */ + zone?: pulumi.Input; +} diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json index adb8bfd4d1..4527986523 100644 --- a/sdk/nodejs/tsconfig.json +++ b/sdk/nodejs/tsconfig.json @@ -131,8 +131,10 @@ "backupdisasterrecovery/backupPlan.ts", "backupdisasterrecovery/backupPlanAssociation.ts", "backupdisasterrecovery/backupVault.ts", + "backupdisasterrecovery/getBackup.ts", "backupdisasterrecovery/getBackupPlan.ts", "backupdisasterrecovery/getBackupPlanAssociation.ts", + "backupdisasterrecovery/getBackupVault.ts", "backupdisasterrecovery/getDataSource.ts", "backupdisasterrecovery/getManagementServer.ts", "backupdisasterrecovery/index.ts", @@ -828,6 +830,13 @@ "folder/iampolicy.ts", "folder/index.ts", "folder/organizationPolicy.ts", + "gemini/codeRepositoryIndex.ts", + "gemini/getRepositoryGroupIamPolicy.ts", + "gemini/index.ts", + "gemini/repositoryGroup.ts", + "gemini/repositoryGroupIamBinding.ts", + "gemini/repositoryGroupIamMember.ts", + "gemini/repositoryGroupIamPolicy.ts", "gkebackup/backupPlan.ts", "gkebackup/backupPlanIamBinding.ts", "gkebackup/backupPlanIamMember.ts", @@ -906,6 +915,7 @@ "iam/index.ts", "iam/organizationsPolicyBinding.ts", "iam/principalAccessBoundaryPolicy.ts", + "iam/projectsPolicyBinding.ts", "iam/workforcePool.ts", "iam/workforcePoolProvider.ts", "iam/workloadIdentityPool.ts", @@ -1094,6 +1104,10 @@ "networksecurity/gatewaySecurityPolicyRule.ts", "networksecurity/getAddressGroupIamPolicy.ts", "networksecurity/index.ts", + "networksecurity/mirroringDeployment.ts", + "networksecurity/mirroringDeploymentGroup.ts", + "networksecurity/mirroringEndpointGroup.ts", + "networksecurity/mirroringEndpointGroupAssociation.ts", "networksecurity/securityProfile.ts", "networksecurity/securityProfileGroup.ts", "networksecurity/serverTlsPolicy.ts", @@ -1432,6 +1446,7 @@ "tpu/getV2RuntimeVersions.ts", "tpu/index.ts", "tpu/node.ts", + "tpu/v2queuedResource.ts", "tpu/v2vm.ts", "transcoder/index.ts", "transcoder/job.ts", diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index 355f73fef6..3c9121db60 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -1387,6 +1387,13 @@ export namespace accesscontextmanager { * behavior. */ description?: pulumi.Input; + /** + * (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. + */ + etag?: pulumi.Input; /** * Resource name for the ServicePerimeter. The shortName component must * begin with a letter and only include alphanumeric and '_'. @@ -4654,14 +4661,17 @@ export namespace artifactregistry { export interface 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"` */ uri: pulumi.Input; } export interface 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. */ customRepository?: pulumi.Input; @@ -4682,7 +4692,7 @@ export namespace artifactregistry { export interface 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. */ customRepository?: pulumi.Input; @@ -4703,7 +4713,7 @@ export namespace artifactregistry { export interface 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. */ customRepository?: pulumi.Input; @@ -4724,7 +4734,7 @@ export namespace artifactregistry { export interface 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. */ customRepository?: pulumi.Input; @@ -7301,7 +7311,7 @@ export namespace billing { * 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. */ creditTypes?: pulumi.Input[]>; /** @@ -7354,7 +7364,7 @@ export namespace billing { * 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. */ subaccounts?: pulumi.Input[]>; } @@ -7800,7 +7810,7 @@ export namespace certificateauthority { export interface AuthorityConfigSubjectKeyId { /** - * The value of the KeyId in lowercase hexidecimal. + * The value of the KeyId in lowercase hexadecimal. * * The `x509Config` block supports: */ @@ -8689,7 +8699,7 @@ export namespace certificateauthority { export interface CertificateCertificateDescriptionSubjectKeyId { /** - * The value of the KeyId in lowercase hexidecimal. + * The value of the KeyId in lowercase hexadecimal. */ keyId?: pulumi.Input; } @@ -9037,7 +9047,7 @@ export namespace certificateauthority { export interface CertificateConfigSubjectKeyId { /** - * The value of the KeyId in lowercase hexidecimal. + * The value of the KeyId in lowercase hexadecimal. */ keyId?: pulumi.Input; } @@ -10766,6 +10776,17 @@ export namespace cloudbuild { peeredNetworkIpRange?: pulumi.Input; } + export interface 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) + */ + networkAttachment: pulumi.Input; + /** + * 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. + */ + routeAllTraffic?: pulumi.Input; + } + export interface WorkerPoolWorkerConfig { /** * Size of the disk attached to the worker, in GB. See [diskSizeGb](https://cloud.google.com/build/docs/private-pools/private-pool-config-file-schema#disksizegb). Specify a value of up to 1000. If `0` is specified, Cloud Build will use a standard disk size. @@ -11482,6 +11503,10 @@ export namespace clouddeploy { * Optional. The label to use when selecting Pods for the Deployment and Service resources. This label must already be present in both resources. */ podSelectorLabel?: pulumi.Input; + /** + * 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. + */ + routeDestinations?: pulumi.Input; /** * 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. */ @@ -11496,6 +11521,17 @@ export namespace clouddeploy { stableCutbackDuration?: pulumi.Input; } + export interface 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. + */ + destinationIds: pulumi.Input[]>; + /** + * 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. + */ + propagateService?: pulumi.Input; + } + export interface DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworking { /** * Required. Name of the Kubernetes Deployment whose traffic is managed by the specified Service. @@ -11551,6 +11587,43 @@ export namespace clouddeploy { membership?: pulumi.Input; } + export interface TargetAssociatedEntity { + /** + * Optional. Information specifying Anthos clusters as associated entities. + */ + anthosClusters?: pulumi.Input[]>; + /** + * The name for the key in the map for which this object is mapped to in the API + */ + entityId: pulumi.Input; + /** + * Optional. Information specifying GKE clusters as associated entities. + */ + gkeClusters?: pulumi.Input[]>; + } + + export interface 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}`. + */ + membership?: pulumi.Input; + } + + export interface TargetAssociatedEntityGkeCluster { + /** + * Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + */ + cluster?: pulumi.Input; + /** + * 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). + */ + internalIp?: pulumi.Input; + /** + * Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + */ + proxyUrl?: pulumi.Input; + } + export interface TargetCustomTarget { /** * Required. The name of the CustomTargetType. Format must be `projects/{project}/locations/{location}/customTargetTypes/{custom_target_type}`. @@ -12351,7 +12424,7 @@ export namespace cloudfunctionsv2 { */ key: pulumi.Input; /** - * 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. */ projectId: pulumi.Input; /** @@ -12370,7 +12443,7 @@ export namespace cloudfunctionsv2 { */ mountPath: pulumi.Input; /** - * 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. */ projectId: pulumi.Input; /** @@ -17762,6 +17835,14 @@ export namespace compute { * Defines whether the instance should have nested virtualization enabled. Defaults to false. */ enableNestedVirtualization?: pulumi.Input; + /** + * Whether to enable UEFI networking for instance creation. + */ + enableUefiNetworking?: pulumi.Input; + /** + * [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`. + */ + performanceMonitoringUnit?: pulumi.Input; /** * 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. */ @@ -17925,10 +18006,12 @@ export namespace compute { */ size?: pulumi.Input; /** - * 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} */ storagePool?: pulumi.Input; /** @@ -17953,6 +18036,14 @@ export namespace compute { * Whether to enable nested virtualization or not. */ enableNestedVirtualization?: pulumi.Input; + /** + * Whether to enable UEFI networking for the instance. + */ + enableUefiNetworking?: pulumi.Input; + /** + * 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". + */ + performanceMonitoringUnit?: pulumi.Input; /** * 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. */ @@ -18144,7 +18235,7 @@ export namespace compute { */ networkIp?: pulumi.Input; /** - * 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 */ nicType?: pulumi.Input; /** @@ -18403,6 +18494,14 @@ export namespace compute { * Whether to enable nested virtualization or not. */ enableNestedVirtualization?: pulumi.Input; + /** + * Whether to enable UEFI networking for the instance. + */ + enableUefiNetworking?: pulumi.Input; + /** + * 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". + */ + performanceMonitoringUnit?: pulumi.Input; /** * 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. */ @@ -18594,7 +18693,7 @@ export namespace compute { */ networkIp?: pulumi.Input; /** - * 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 */ nicType?: pulumi.Input; /** @@ -19188,7 +19287,7 @@ export namespace compute { */ networkIp?: pulumi.Input; /** - * 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. */ nicType?: pulumi.Input; /** @@ -19507,6 +19606,14 @@ export namespace compute { * Defines whether the instance should have nested virtualization enabled. Defaults to false. */ enableNestedVirtualization?: pulumi.Input; + /** + * Whether to enable UEFI networking for instance creation. + */ + enableUefiNetworking?: pulumi.Input; + /** + * [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`. + */ + performanceMonitoringUnit?: pulumi.Input; /** * 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. */ @@ -19759,7 +19866,7 @@ export namespace compute { */ networkIp?: pulumi.Input; /** - * 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. */ nicType?: pulumi.Input; /** @@ -22651,6 +22758,14 @@ export namespace compute { * Defines whether the instance should have nested virtualization enabled. Defaults to false. */ enableNestedVirtualization?: pulumi.Input; + /** + * Whether to enable UEFI networking for instance creation. + */ + enableUefiNetworking?: pulumi.Input; + /** + * [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`. + */ + performanceMonitoringUnit?: pulumi.Input; /** * 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. */ @@ -22890,7 +23005,7 @@ export namespace compute { */ networkIp?: pulumi.Input; /** - * 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. */ nicType?: pulumi.Input; /** @@ -23226,6 +23341,16 @@ export namespace compute { urlMask?: pulumi.Input; } + export interface 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. + */ + producerPort?: pulumi.Input; + } + export interface RegionNetworkEndpointGroupServerlessDeployment { /** * The platform of the NEG backend target(s). Possible values: @@ -27075,6 +27200,66 @@ export namespace compute { * Rule visibility. Supported values include: "STANDARD", "PREMIUM". */ ruleVisibility?: pulumi.Input; + /** + * Configuration options for layer7 adaptive protection for various customizable thresholds. + */ + thresholdConfigs?: pulumi.Input[]>; + } + + export interface SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + /** + * Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + */ + autoDeployConfidenceThreshold?: pulumi.Input; + /** + * Duration over which Adaptive Protection's auto-deployed actions last. + */ + autoDeployExpirationSec?: pulumi.Input; + /** + * Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + */ + autoDeployImpactedBaselineThreshold?: pulumi.Input; + /** + * Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + */ + autoDeployLoadThreshold?: pulumi.Input; + /** + * Detection threshold based on absolute QPS. + */ + detectionAbsoluteQps?: pulumi.Input; + /** + * Detection threshold based on the backend service's load. + */ + detectionLoadThreshold?: pulumi.Input; + /** + * Detection threshold based on QPS relative to the average of baseline traffic. + */ + detectionRelativeToBaselineQps?: pulumi.Input; + /** + * 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. + */ + name: pulumi.Input; + /** + * Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + */ + trafficGranularityConfigs?: pulumi.Input[]>; + } + + export interface 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. + */ + enableEachUniqueValue?: pulumi.Input; + /** + * The type of this configuration, a granular traffic unit can be one of the following: + * * `HTTP_HEADER_HOST` + * * `HTTP_PATH` + */ + type: pulumi.Input; + /** + * Requests that match this value constitute a granular traffic unit. + */ + value?: pulumi.Input; } export interface SecurityPolicyAdvancedOptionsConfig { @@ -28209,7 +28394,7 @@ export namespace compute { export interface 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 @@ -28733,7 +28918,7 @@ export namespace compute { export interface 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 @@ -31016,7 +31201,7 @@ export namespace container { */ diskSize?: pulumi.Input; /** - * 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`. */ diskType?: pulumi.Input; /** @@ -31247,6 +31432,17 @@ export namespace container { enabledApis: pulumi.Input[]>; } + export interface ClusterEnterpriseConfig { + /** + * The effective tier of the cluster. + */ + clusterTier?: pulumi.Input; + /** + * Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + */ + desiredTier?: pulumi.Input; + } + export interface ClusterFleet { /** * The resource name of the fleet Membership resource associated to this cluster with format `//gkehub.googleapis.com/projects/{{project}}/locations/{{location}}/memberships/{{name}}`. See the official doc for [fleet management](https://cloud.google.com/kubernetes-engine/docs/fleets-overview). @@ -31690,6 +31886,13 @@ export namespace container { * attached to each cluster node. Defaults to 0. */ localSsdCount?: pulumi.Input; + /** + * 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. + */ + localSsdEncryptionMode?: pulumi.Input; /** * 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. */ @@ -32227,6 +32430,10 @@ export namespace container { } export interface ClusterNodePoolAutoConfig { + /** + * Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroupMode` field is supported in `nodePoolAutoConfig`. Structure is documented below. + */ + linuxNodeConfig?: pulumi.Input; /** * The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. */ @@ -32242,6 +32449,17 @@ export namespace container { resourceManagerTags?: pulumi.Input<{[key: string]: pulumi.Input}>; } + export interface 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. + */ + cgroupMode?: pulumi.Input; + } + export interface ClusterNodePoolAutoConfigNetworkTags { /** * List of network tags applied to auto-provisioned node pools. @@ -32556,6 +32774,13 @@ export namespace container { * attached to each cluster node. Defaults to 0. */ localSsdCount?: pulumi.Input; + /** + * 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. + */ + localSsdEncryptionMode?: pulumi.Input; /** * 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. */ @@ -33533,6 +33758,10 @@ export namespace container { * The number of local SSD disks to be attached to the node. */ localSsdCount?: pulumi.Input; + /** + * LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + */ + localSsdEncryptionMode?: pulumi.Input; /** * Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. */ @@ -42346,6 +42575,15 @@ export namespace dataproc { } export interface BatchRuntimeConfig { + /** + * Optional. Autotuning configuration of the workload. + * Structure is documented below. + */ + autotuningConfig?: pulumi.Input; + /** + * Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + */ + cohort?: pulumi.Input; /** * Optional custom container image for the job runtime environment. If not specified, a default container image will be used. */ @@ -42365,6 +42603,14 @@ export namespace dataproc { version?: pulumi.Input; } + export interface BatchRuntimeConfigAutotuningConfig { + /** + * Optional. Scenarios for which tunings are applied. + * Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + */ + scenarios?: pulumi.Input[]>; + } + export interface BatchRuntimeInfo { /** * (Output) @@ -42799,6 +43045,10 @@ export namespace dataproc { } export interface ClusterClusterConfigGceClusterConfig { + /** + * Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + */ + confidentialInstanceConfig?: pulumi.Input; /** * 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 @@ -42867,6 +43117,13 @@ export namespace dataproc { zone?: pulumi.Input; } + export interface ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig { + /** + * Defines whether the instance should have confidential compute enabled. + */ + enableConfidentialCompute?: pulumi.Input; + } + export interface ClusterClusterConfigGceClusterConfigNodeGroupAffinity { /** * The URI of a sole-tenant node group resource that the cluster will be created on. @@ -43100,6 +43357,10 @@ export namespace dataproc { * A list of instance selection results in the group. */ instanceSelectionResults?: pulumi.Input[]>; + /** + * Defines how Dataproc should create VMs with a mixture of provisioning models. + */ + provisioningModelMix?: pulumi.Input; } export interface ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList { @@ -43126,6 +43387,17 @@ export namespace dataproc { vmCount?: pulumi.Input; } + export interface ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix { + /** + * The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + */ + standardCapacityBase?: pulumi.Input; + /** + * The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + */ + standardCapacityPercentAboveBase?: pulumi.Input; + } + export interface ClusterClusterConfigSecurityConfig { /** * Kerberos Configuration @@ -47038,7 +47310,7 @@ export namespace diagflow { */ noSpeechTimeout?: pulumi.Input; /** - * Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + * Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. */ useTimeoutBasedEndpointing?: pulumi.Input; } @@ -51388,6 +51660,35 @@ export namespace folder { } } +export namespace gemini { + export interface RepositoryGroupIamBindingCondition { + description?: pulumi.Input; + expression: pulumi.Input; + title: pulumi.Input; + } + + export interface RepositoryGroupIamMemberCondition { + description?: pulumi.Input; + expression: pulumi.Input; + title: pulumi.Input; + } + + export interface RepositoryGroupRepository { + /** + * Required. The Git branch pattern used for indexing in RE2 syntax. + * See https://github.com/google/re2/wiki/syntax for syntax. + * + * - - - + */ + branchPattern: pulumi.Input; + /** + * Required. The DeveloperConnect repository full resource name, relative resource name + * or resource URL to be indexed. + */ + resource: pulumi.Input; + } +} + export namespace gkebackup { export interface BackupPlanBackupConfig { /** @@ -52288,7 +52589,7 @@ export namespace gkehub { export interface FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary { /** * Configures the manner in which the template library is installed on the cluster. - * Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + * Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. */ installation?: pulumi.Input; } @@ -52357,7 +52658,7 @@ export namespace gkehub { */ git?: pulumi.Input; /** - * 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. + * 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. */ metricsGcpServiceAccountEmail?: pulumi.Input; /** @@ -52367,13 +52668,17 @@ export namespace gkehub { */ oci?: pulumi.Input; /** - * 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. + * 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. */ preventDrift?: pulumi.Input; /** * Specifies whether the Config Sync Repo is in "hierarchical" or "unstructured" mode. */ sourceFormat?: pulumi.Input; + /** + * 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`. + */ + stopSyncing?: pulumi.Input; } export interface FeatureMembershipConfigmanagementConfigSyncGit { @@ -55511,6 +55816,35 @@ export namespace iam { resources: pulumi.Input[]>; } + export interface ProjectsPolicyBindingCondition { + /** + * Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + */ + description?: pulumi.Input; + /** + * Textual representation of an expression in Common Expression Language syntax. + */ + expression?: pulumi.Input; + /** + * Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + */ + location?: pulumi.Input; + /** + * 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. + */ + title?: pulumi.Input; + } + + export interface ProjectsPolicyBindingTarget { + /** + * Required. Immutable. The resource name of the policy to be bound. + * The binding parent and policy must belong to the same Organization (or Project). + * + * - - - + */ + principalSet?: pulumi.Input; + } + export interface WorkforcePoolAccessRestrictions { /** * Services allowed for web sign-in with the workforce pool. @@ -56815,7 +57149,7 @@ export namespace integrationconnectors { */ booleanValue?: pulumi.Input; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: pulumi.Input; @@ -57012,7 +57346,7 @@ export namespace integrationconnectors { */ booleanValue?: pulumi.Input; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: pulumi.Input; @@ -57119,7 +57453,7 @@ export namespace integrationconnectors { */ booleanValue?: pulumi.Input; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: pulumi.Input; @@ -57191,7 +57525,7 @@ export namespace integrationconnectors { */ booleanValue?: pulumi.Input; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: pulumi.Input; @@ -57394,7 +57728,7 @@ export namespace integrationconnectors { */ booleanValue?: pulumi.Input; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: pulumi.Input; @@ -59288,10 +59622,9 @@ export namespace monitoring { * in the future. * This field is optional. If this field is not empty, then it must be a * valid Prometheus label name. - * - * - - - */ alertRule?: pulumi.Input; + disableMetricValidation?: pulumi.Input; /** * Alerts are considered firing once their PromQL expression evaluated * to be "true" for this long. Alerts whose PromQL expression was not @@ -60464,7 +60797,7 @@ export namespace netapp { */ accessType?: pulumi.Input; /** - * Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + * Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. */ allowedClients?: pulumi.Input; /** @@ -61191,6 +61524,33 @@ export namespace networksecurity { targetUri: pulumi.Input; } + export interface MirroringDeploymentGroupConnectedEndpointGroup { + /** + * (Output) + * Output only. A connected mirroring endpoint group. + */ + name?: pulumi.Input; + } + + export interface MirroringEndpointGroupAssociationLocationsDetail { + /** + * 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`. + * + * + * - - - + */ + location?: pulumi.Input; + /** + * (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + */ + state?: pulumi.Input; + } + export interface SecurityProfileThreatPreventionProfile { /** * The configuration for overriding threats actions by severity match. @@ -67627,6 +67987,100 @@ export namespace recaptcha { } export namespace redis { + export interface ClusterCrossClusterReplicationConfig { + /** + * The role of the cluster in cross cluster replication. Supported values are: + * 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + * 1. `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. + * 1. `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. + * 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + * Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + */ + clusterRole?: pulumi.Input; + /** + * (Output) + * An 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. + * Structure is documented below. + */ + memberships?: pulumi.Input[]>; + /** + * 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`. + * Structure is documented below. + */ + primaryCluster?: pulumi.Input; + /** + * 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`. + * Structure is documented below. + */ + secondaryClusters?: pulumi.Input[]>; + /** + * (Output) + * The last time cross cluster replication config was updated. + */ + updateTime?: pulumi.Input; + } + + export interface ClusterCrossClusterReplicationConfigMembership { + /** + * Details of the primary cluster that is used as the replication source for all the secondary clusters. + */ + primaryClusters?: pulumi.Input[]>; + /** + * List of secondary clusters that are replicating from the primary cluster. + */ + secondaryClusters?: pulumi.Input[]>; + } + + export interface ClusterCrossClusterReplicationConfigMembershipPrimaryCluster { + /** + * The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + */ + cluster?: pulumi.Input; + /** + * (Output) + * The unique id of the primary cluster. + */ + uid?: pulumi.Input; + } + + export interface ClusterCrossClusterReplicationConfigMembershipSecondaryCluster { + /** + * (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + */ + cluster?: pulumi.Input; + /** + * (Output) + * The unique id of the secondary cluster. + */ + uid?: pulumi.Input; + } + + export interface ClusterCrossClusterReplicationConfigPrimaryCluster { + /** + * The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + */ + cluster?: pulumi.Input; + /** + * (Output) + * The unique id of the primary cluster. + */ + uid?: pulumi.Input; + } + + export interface ClusterCrossClusterReplicationConfigSecondaryCluster { + /** + * (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + */ + cluster?: pulumi.Input; + /** + * (Output) + * The unique id of the secondary cluster. + */ + uid?: pulumi.Input; + } + export interface ClusterDiscoveryEndpoint { /** * Output only. The IP allocated on the consumer network for the PSC forwarding rule. @@ -67774,7 +68228,7 @@ export namespace redis { export interface ClusterPersistenceConfigAofConfig { /** * Optional. Available fsync modes. - * - NO - Do not explicilty call fsync(). Rely on OS defaults. + * - NO - Do not explicitly call fsync(). Rely on OS defaults. * - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. * - ALWAYS - Call fsync() for earch write command. * Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -71265,14 +71719,52 @@ export namespace tpu { preemptible: pulumi.Input; } + export interface V2QueuedResourceTpu { + /** + * The TPU node(s) being requested. + * Structure is documented below. + */ + nodeSpecs?: pulumi.Input[]>; + } + + export interface V2QueuedResourceTpuNodeSpec { + /** + * The node. + * Structure is documented below. + */ + node: pulumi.Input; + /** + * Unqualified node identifier used to identify the node in the project once provisioned. + */ + nodeId?: pulumi.Input; + /** + * The parent resource name. + */ + parent: pulumi.Input; + } + + export interface V2QueuedResourceTpuNodeSpecNode { + /** + * TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + */ + acceleratorType?: pulumi.Input; + /** + * Text description of the TPU. + */ + description?: pulumi.Input; + /** + * Runtime version for the TPU. + */ + runtimeVersion: pulumi.Input; + } + export interface V2VmAcceleratorConfig { /** * Topology of TPU in chips. */ topology: pulumi.Input; /** - * Type of TPU. - * Possible values are: `V2`, `V3`, `V4`, `V5P`. + * Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type */ type: pulumi.Input; } diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index e157d9261f..1aaef26768 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -1383,6 +1383,13 @@ export namespace accesscontextmanager { * behavior. */ description?: string; + /** + * (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. + */ + etag: string; /** * Resource name for the ServicePerimeter. The shortName component must * begin with a letter and only include alphanumeric and '_'. @@ -4829,14 +4836,17 @@ export namespace artifactregistry { export interface GetRepositoryRemoteRepositoryConfigCommonRepository { /** - * 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"' */ uri: string; } export interface GetRepositoryRemoteRepositoryConfigDockerRepository { /** - * Settings for a remote repository with a custom uri. + * [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. */ customRepositories: outputs.artifactregistry.GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository[]; /** @@ -4854,7 +4864,7 @@ export namespace artifactregistry { export interface GetRepositoryRemoteRepositoryConfigMavenRepository { /** - * Settings for a remote repository with a custom uri. + * [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. */ customRepositories: outputs.artifactregistry.GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository[]; /** @@ -4872,7 +4882,7 @@ export namespace artifactregistry { export interface GetRepositoryRemoteRepositoryConfigNpmRepository { /** - * Settings for a remote repository with a custom uri. + * [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. */ customRepositories: outputs.artifactregistry.GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository[]; /** @@ -4890,7 +4900,7 @@ export namespace artifactregistry { export interface GetRepositoryRemoteRepositoryConfigPythonRepository { /** - * Settings for a remote repository with a custom uri. + * [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. */ customRepositories: outputs.artifactregistry.GetRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository[]; /** @@ -5138,14 +5148,17 @@ export namespace artifactregistry { export interface 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"` */ uri: string; } export interface 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. */ customRepository?: outputs.artifactregistry.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository; @@ -5166,7 +5179,7 @@ export namespace artifactregistry { export interface 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. */ customRepository?: outputs.artifactregistry.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository; @@ -5187,7 +5200,7 @@ export namespace artifactregistry { export interface 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. */ customRepository?: outputs.artifactregistry.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository; @@ -5208,7 +5221,7 @@ export namespace artifactregistry { export interface 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. */ customRepository?: outputs.artifactregistry.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository; @@ -5512,6 +5525,29 @@ export namespace backupdisasterrecovery { weekOfMonth: string; } + export interface GetBackupBackup { + /** + * Id of the requesting object, Backup. + */ + backupId: string; + /** + * Name of the Backup Vault associated with Backup. + */ + backupVaultId: string; + /** + * Name of the Data Source associated with Backup. + */ + dataSourceId: string; + /** + * Location of the resource. + */ + location: string; + /** + * Name of the resource. + */ + name: string; + } + export interface GetBackupPlanAssociationRulesConfigInfo { /** * google.rpc.Status object to store the last backup error @@ -8280,7 +8316,7 @@ export namespace billing { * 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. */ creditTypes: string[]; /** @@ -8333,7 +8369,7 @@ export namespace billing { * 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. */ subaccounts: string[]; } @@ -8782,7 +8818,7 @@ export namespace certificateauthority { export interface AuthorityConfigSubjectKeyId { /** - * The value of the KeyId in lowercase hexidecimal. + * The value of the KeyId in lowercase hexadecimal. * * The `x509Config` block supports: */ @@ -9671,7 +9707,7 @@ export namespace certificateauthority { export interface CertificateCertificateDescriptionSubjectKeyId { /** - * The value of the KeyId in lowercase hexidecimal. + * The value of the KeyId in lowercase hexadecimal. */ keyId: string; } @@ -10019,7 +10055,7 @@ export namespace certificateauthority { export interface CertificateConfigSubjectKeyId { /** - * The value of the KeyId in lowercase hexidecimal. + * The value of the KeyId in lowercase hexadecimal. */ keyId?: string; } @@ -10616,7 +10652,7 @@ export namespace certificateauthority { export interface GetAuthorityConfigSubjectKeyId { /** - * The value of the KeyId in lowercase hexidecimal. + * The value of the KeyId in lowercase hexadecimal. */ keyId: string; } @@ -13223,6 +13259,17 @@ export namespace cloudbuild { peeredNetworkIpRange?: string; } + export interface 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) + */ + networkAttachment: string; + /** + * 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. + */ + routeAllTraffic?: boolean; + } + export interface WorkerPoolWorkerConfig { /** * Size of the disk attached to the worker, in GB. See [diskSizeGb](https://cloud.google.com/build/docs/private-pools/private-pool-config-file-schema#disksizegb). Specify a value of up to 1000. If `0` is specified, Cloud Build will use a standard disk size. @@ -13941,6 +13988,10 @@ export namespace clouddeploy { * Optional. The label to use when selecting Pods for the Deployment and Service resources. This label must already be present in both resources. */ podSelectorLabel?: string; + /** + * 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. + */ + routeDestinations?: outputs.clouddeploy.DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations; /** * 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. */ @@ -13955,6 +14006,17 @@ export namespace clouddeploy { stableCutbackDuration?: string; } + export interface 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. + */ + destinationIds: string[]; + /** + * 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. + */ + propagateService?: boolean; + } + export interface DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworking { /** * Required. Name of the Kubernetes Deployment whose traffic is managed by the specified Service. @@ -14010,6 +14072,43 @@ export namespace clouddeploy { membership?: string; } + export interface TargetAssociatedEntity { + /** + * Optional. Information specifying Anthos clusters as associated entities. + */ + anthosClusters?: outputs.clouddeploy.TargetAssociatedEntityAnthosCluster[]; + /** + * The name for the key in the map for which this object is mapped to in the API + */ + entityId: string; + /** + * Optional. Information specifying GKE clusters as associated entities. + */ + gkeClusters?: outputs.clouddeploy.TargetAssociatedEntityGkeCluster[]; + } + + export interface 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}`. + */ + membership?: string; + } + + export interface TargetAssociatedEntityGkeCluster { + /** + * Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + */ + cluster?: string; + /** + * 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). + */ + internalIp?: boolean; + /** + * Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + */ + proxyUrl?: string; + } + export interface TargetCustomTarget { /** * Required. The name of the CustomTargetType. Format must be `projects/{project}/locations/{location}/customTargetTypes/{custom_target_type}`. @@ -14896,7 +14995,7 @@ export namespace cloudfunctionsv2 { */ key: string; /** - * 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. */ projectId: string; /** @@ -14915,7 +15014,7 @@ export namespace cloudfunctionsv2 { */ mountPath: string; /** - * 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. */ projectId: string; /** @@ -15203,7 +15302,7 @@ export namespace cloudfunctionsv2 { */ key: string; /** - * 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. */ projectId: string; /** @@ -15222,7 +15321,7 @@ export namespace cloudfunctionsv2 { */ mountPath: string; /** - * 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. */ projectId: string; /** @@ -23904,7 +24003,7 @@ export namespace compute { /** * 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. */ region: string; /** @@ -24353,6 +24452,14 @@ export namespace compute { * Whether to enable nested virtualization or not. */ enableNestedVirtualization: boolean; + /** + * Whether to enable UEFI networking for the instance. + */ + enableUefiNetworking: boolean; + /** + * 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". + */ + performanceMonitoringUnit: string; /** * 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. */ @@ -24789,7 +24896,7 @@ export namespace compute { */ networkIp: string; /** - * 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 */ nicType: string; /** @@ -25053,6 +25160,14 @@ export namespace compute { * Whether to enable nested virtualization or not. */ enableNestedVirtualization: boolean; + /** + * Whether to enable UEFI networking or not. + */ + enableUefiNetworking: boolean; + /** + * 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". + */ + performanceMonitoringUnit: string; /** * 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. */ @@ -25294,7 +25409,7 @@ export namespace compute { */ networkIp: string; /** - * 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 */ nicType: string; /** @@ -25949,6 +26064,14 @@ export namespace compute { * Whether to enable nested virtualization or not. */ enableNestedVirtualization: boolean; + /** + * Whether to enable UEFI networking or not. + */ + enableUefiNetworking: boolean; + /** + * 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". + */ + performanceMonitoringUnit: string; /** * 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. */ @@ -26178,7 +26301,7 @@ export namespace compute { */ networkIp: string; /** - * 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 */ nicType: string; /** @@ -26505,6 +26628,16 @@ export namespace compute { urlMask: string; } + export interface GetRegionNetworkEndpointGroupPscData { + /** + * 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. + */ + producerPort: string; + } + export interface GetRegionNetworkEndpointGroupServerlessDeployment { /** * The platform of the NEG backend target(s). Possible values: @@ -27206,6 +27339,40 @@ export namespace compute { * Rule visibility. Supported values include: "STANDARD", "PREMIUM". */ ruleVisibility: string; + /** + * Configuration options for layer7 adaptive protection for various customizable thresholds. + */ + thresholdConfigs: outputs.compute.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig[]; + } + + export interface GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + autoDeployConfidenceThreshold: number; + autoDeployExpirationSec: number; + autoDeployImpactedBaselineThreshold: number; + autoDeployLoadThreshold: number; + detectionAbsoluteQps: number; + detectionLoadThreshold: number; + detectionRelativeToBaselineQps: number; + /** + * The name of the security policy. Provide either this or a `selfLink`. + */ + name: string; + trafficGranularityConfigs: outputs.compute.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig[]; + } + + export interface GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig { + /** + * 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. + */ + enableEachUniqueValue: boolean; + /** + * Type of this configuration. + */ + type: string; + /** + * Requests that match this value constitute a granular traffic unit. + */ + value: string; } export interface GetSecurityPolicyAdvancedOptionsConfig { @@ -28045,6 +28212,14 @@ export namespace compute { * Defines whether the instance should have nested virtualization enabled. Defaults to false. */ enableNestedVirtualization?: boolean; + /** + * Whether to enable UEFI networking for instance creation. + */ + enableUefiNetworking?: boolean; + /** + * [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`. + */ + performanceMonitoringUnit?: string; /** * 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. */ @@ -28208,10 +28383,12 @@ export namespace compute { */ size: number; /** - * 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} */ storagePool?: string; /** @@ -28236,6 +28413,14 @@ export namespace compute { * Whether to enable nested virtualization or not. */ enableNestedVirtualization: boolean; + /** + * Whether to enable UEFI networking for the instance. + */ + enableUefiNetworking: boolean; + /** + * 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". + */ + performanceMonitoringUnit: string; /** * 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. */ @@ -28427,7 +28612,7 @@ export namespace compute { */ networkIp: string; /** - * 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 */ nicType: string; /** @@ -28686,6 +28871,14 @@ export namespace compute { * Whether to enable nested virtualization or not. */ enableNestedVirtualization: boolean; + /** + * Whether to enable UEFI networking for the instance. + */ + enableUefiNetworking: boolean; + /** + * 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". + */ + performanceMonitoringUnit: string; /** * 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. */ @@ -28877,7 +29070,7 @@ export namespace compute { */ networkIp: string; /** - * 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 */ nicType: string; /** @@ -29471,7 +29664,7 @@ export namespace compute { */ networkIp: string; /** - * 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. */ nicType?: string; /** @@ -29790,6 +29983,14 @@ export namespace compute { * Defines whether the instance should have nested virtualization enabled. Defaults to false. */ enableNestedVirtualization?: boolean; + /** + * Whether to enable UEFI networking for instance creation. + */ + enableUefiNetworking?: boolean; + /** + * [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`. + */ + performanceMonitoringUnit?: string; /** * 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. */ @@ -30042,7 +30243,7 @@ export namespace compute { */ networkIp?: string; /** - * 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. */ nicType?: string; /** @@ -32934,6 +33135,14 @@ export namespace compute { * Defines whether the instance should have nested virtualization enabled. Defaults to false. */ enableNestedVirtualization?: boolean; + /** + * Whether to enable UEFI networking for instance creation. + */ + enableUefiNetworking?: boolean; + /** + * [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`. + */ + performanceMonitoringUnit?: string; /** * 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. */ @@ -33173,7 +33382,7 @@ export namespace compute { */ networkIp?: string; /** - * 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. */ nicType?: string; /** @@ -33509,6 +33718,16 @@ export namespace compute { urlMask?: string; } + export interface 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. + */ + producerPort?: string; + } + export interface RegionNetworkEndpointGroupServerlessDeployment { /** * The platform of the NEG backend target(s). Possible values: @@ -37574,6 +37793,66 @@ export namespace compute { * Rule visibility. Supported values include: "STANDARD", "PREMIUM". */ ruleVisibility: string; + /** + * Configuration options for layer7 adaptive protection for various customizable thresholds. + */ + thresholdConfigs?: outputs.compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig[]; + } + + export interface SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig { + /** + * Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + */ + autoDeployConfidenceThreshold?: number; + /** + * Duration over which Adaptive Protection's auto-deployed actions last. + */ + autoDeployExpirationSec?: number; + /** + * Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + */ + autoDeployImpactedBaselineThreshold?: number; + /** + * Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + */ + autoDeployLoadThreshold?: number; + /** + * Detection threshold based on absolute QPS. + */ + detectionAbsoluteQps?: number; + /** + * Detection threshold based on the backend service's load. + */ + detectionLoadThreshold?: number; + /** + * Detection threshold based on QPS relative to the average of baseline traffic. + */ + detectionRelativeToBaselineQps?: number; + /** + * 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. + */ + name: string; + /** + * Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + */ + trafficGranularityConfigs?: outputs.compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig[]; + } + + export interface 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. + */ + enableEachUniqueValue?: boolean; + /** + * The type of this configuration, a granular traffic unit can be one of the following: + * * `HTTP_HEADER_HOST` + * * `HTTP_PATH` + */ + type: string; + /** + * Requests that match this value constitute a granular traffic unit. + */ + value?: string; } export interface SecurityPolicyAdvancedOptionsConfig { @@ -38708,7 +38987,7 @@ export namespace compute { export interface 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 @@ -39232,7 +39511,7 @@ export namespace compute { export interface 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 @@ -41521,7 +41800,7 @@ export namespace container { */ diskSize?: number; /** - * 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`. */ diskType?: string; /** @@ -41752,6 +42031,17 @@ export namespace container { enabledApis: string[]; } + export interface ClusterEnterpriseConfig { + /** + * The effective tier of the cluster. + */ + clusterTier: string; + /** + * Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + */ + desiredTier: string; + } + export interface ClusterFleet { /** * The resource name of the fleet Membership resource associated to this cluster with format `//gkehub.googleapis.com/projects/{{project}}/locations/{{location}}/memberships/{{name}}`. See the official doc for [fleet management](https://cloud.google.com/kubernetes-engine/docs/fleets-overview). @@ -42195,6 +42485,13 @@ export namespace container { * attached to each cluster node. Defaults to 0. */ localSsdCount: number; + /** + * 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. + */ + localSsdEncryptionMode?: string; /** * 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. */ @@ -42732,6 +43029,10 @@ export namespace container { } export interface ClusterNodePoolAutoConfig { + /** + * Linux system configuration for the cluster's automatically provisioned node pools. Only `cgroupMode` field is supported in `nodePoolAutoConfig`. Structure is documented below. + */ + linuxNodeConfig?: outputs.container.ClusterNodePoolAutoConfigLinuxNodeConfig; /** * The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. */ @@ -42747,6 +43048,17 @@ export namespace container { resourceManagerTags?: {[key: string]: string}; } + export interface 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. + */ + cgroupMode: string; + } + export interface ClusterNodePoolAutoConfigNetworkTags { /** * List of network tags applied to auto-provisioned node pools. @@ -43061,6 +43373,13 @@ export namespace container { * attached to each cluster node. Defaults to 0. */ localSsdCount: number; + /** + * 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. + */ + localSsdEncryptionMode?: string; /** * 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. */ @@ -44247,6 +44566,17 @@ export namespace container { enabledApis: string[]; } + export interface GetClusterEnterpriseConfig { + /** + * Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE. + */ + clusterTier: string; + /** + * Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE. + */ + desiredTier: string; + } + export interface GetClusterFleet { /** * Full resource name of the registered fleet membership of the cluster. @@ -44565,6 +44895,10 @@ export namespace container { * The number of local SSD disks to be attached to the node. */ localSsdCount: number; + /** + * LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + */ + localSsdEncryptionMode: string; /** * Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. */ @@ -45008,6 +45342,10 @@ export namespace container { } export interface GetClusterNodePoolAutoConfig { + /** + * Linux node configuration options. + */ + linuxNodeConfigs: outputs.container.GetClusterNodePoolAutoConfigLinuxNodeConfig[]; /** * Collection of Compute Engine network tags that can be applied to a node's underlying VM instance. */ @@ -45022,6 +45360,13 @@ export namespace container { resourceManagerTags: {[key: string]: string}; } + export interface GetClusterNodePoolAutoConfigLinuxNodeConfig { + /** + * cgroupMode specifies the cgroup mode to be used on the node. + */ + cgroupMode: string; + } + export interface GetClusterNodePoolAutoConfigNetworkTag { /** * List of network tags applied to auto-provisioned node pools. @@ -45296,6 +45641,10 @@ export namespace container { * The number of local SSD disks to be attached to the node. */ localSsdCount: number; + /** + * LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + */ + localSsdEncryptionMode: string; /** * Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. */ @@ -46173,6 +46522,10 @@ export namespace container { * The number of local SSD disks to be attached to the node. */ localSsdCount: number; + /** + * LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + */ + localSsdEncryptionMode?: string; /** * Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. */ @@ -54995,6 +55348,15 @@ export namespace dataproc { } export interface BatchRuntimeConfig { + /** + * Optional. Autotuning configuration of the workload. + * Structure is documented below. + */ + autotuningConfig?: outputs.dataproc.BatchRuntimeConfigAutotuningConfig; + /** + * Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + */ + cohort?: string; /** * Optional custom container image for the job runtime environment. If not specified, a default container image will be used. */ @@ -55014,6 +55376,14 @@ export namespace dataproc { version: string; } + export interface BatchRuntimeConfigAutotuningConfig { + /** + * Optional. Scenarios for which tunings are applied. + * Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + */ + scenarios?: string[]; + } + export interface BatchRuntimeInfo { /** * (Output) @@ -55448,6 +55818,10 @@ export namespace dataproc { } export interface ClusterClusterConfigGceClusterConfig { + /** + * Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + */ + confidentialInstanceConfig: outputs.dataproc.ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig; /** * 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 @@ -55516,6 +55890,13 @@ export namespace dataproc { zone: string; } + export interface ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig { + /** + * Defines whether the instance should have confidential compute enabled. + */ + enableConfidentialCompute?: boolean; + } + export interface ClusterClusterConfigGceClusterConfigNodeGroupAffinity { /** * The URI of a sole-tenant node group resource that the cluster will be created on. @@ -55749,6 +56130,10 @@ export namespace dataproc { * A list of instance selection results in the group. */ instanceSelectionResults: outputs.dataproc.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResult[]; + /** + * Defines how Dataproc should create VMs with a mixture of provisioning models. + */ + provisioningModelMix?: outputs.dataproc.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix; } export interface ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList { @@ -55775,6 +56160,17 @@ export namespace dataproc { vmCount: number; } + export interface ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix { + /** + * The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + */ + standardCapacityBase?: number; + /** + * The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + */ + standardCapacityPercentAboveBase?: number; + } + export interface ClusterClusterConfigSecurityConfig { /** * Kerberos Configuration @@ -59877,7 +60273,7 @@ export namespace diagflow { */ noSpeechTimeout?: string; /** - * Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + * Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. */ useTimeoutBasedEndpointing?: boolean; } @@ -64528,6 +64924,36 @@ export namespace folder { } +export namespace gemini { + export interface RepositoryGroupIamBindingCondition { + description?: string; + expression: string; + title: string; + } + + export interface RepositoryGroupIamMemberCondition { + description?: string; + expression: string; + title: string; + } + + export interface RepositoryGroupRepository { + /** + * Required. The Git branch pattern used for indexing in RE2 syntax. + * See https://github.com/google/re2/wiki/syntax for syntax. + * + * - - - + */ + branchPattern: string; + /** + * Required. The DeveloperConnect repository full resource name, relative resource name + * or resource URL to be indexed. + */ + resource: string; + } + +} + export namespace gkebackup { export interface BackupPlanBackupConfig { /** @@ -65429,7 +65855,7 @@ export namespace gkehub { export interface FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibrary { /** * Configures the manner in which the template library is installed on the cluster. - * Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + * Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. */ installation?: string; } @@ -65498,7 +65924,7 @@ export namespace gkehub { */ git?: outputs.gkehub.FeatureMembershipConfigmanagementConfigSyncGit; /** - * 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. + * 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. */ metricsGcpServiceAccountEmail?: string; /** @@ -65508,13 +65934,17 @@ export namespace gkehub { */ oci?: outputs.gkehub.FeatureMembershipConfigmanagementConfigSyncOci; /** - * 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. + * 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. */ preventDrift: boolean; /** * Specifies whether the Config Sync Repo is in "hierarchical" or "unstructured" mode. */ sourceFormat?: string; + /** + * 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`. + */ + stopSyncing?: boolean; } export interface FeatureMembershipConfigmanagementConfigSyncGit { @@ -68789,6 +69219,35 @@ export namespace iam { resources: string[]; } + export interface ProjectsPolicyBindingCondition { + /** + * Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + */ + description?: string; + /** + * Textual representation of an expression in Common Expression Language syntax. + */ + expression?: string; + /** + * Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + */ + location?: string; + /** + * 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. + */ + title?: string; + } + + export interface ProjectsPolicyBindingTarget { + /** + * Required. Immutable. The resource name of the policy to be bound. + * The binding parent and policy must belong to the same Organization (or Project). + * + * - - - + */ + principalSet?: string; + } + export interface WorkforcePoolAccessRestrictions { /** * Services allowed for web sign-in with the workforce pool. @@ -70096,7 +70555,7 @@ export namespace integrationconnectors { */ booleanValue?: boolean; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: outputs.integrationconnectors.ConnectionAuthConfigAdditionalVariableEncryptionKeyValue; @@ -70293,7 +70752,7 @@ export namespace integrationconnectors { */ booleanValue?: boolean; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: outputs.integrationconnectors.ConnectionConfigVariableEncryptionKeyValue; @@ -70400,7 +70859,7 @@ export namespace integrationconnectors { */ booleanValue?: boolean; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: outputs.integrationconnectors.ConnectionEventingConfigAdditionalVariableEncryptionKeyValue; @@ -70472,7 +70931,7 @@ export namespace integrationconnectors { */ booleanValue?: boolean; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: outputs.integrationconnectors.ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValue; @@ -70675,7 +71134,7 @@ export namespace integrationconnectors { */ booleanValue?: boolean; /** - * Encription key value of configVariable. + * Encryption key value of configVariable. * Structure is documented below. */ encryptionKeyValue?: outputs.integrationconnectors.ConnectionSslConfigAdditionalVariableEncryptionKeyValue; @@ -72816,10 +73275,9 @@ export namespace monitoring { * in the future. * This field is optional. If this field is not empty, then it must be a * valid Prometheus label name. - * - * - - - */ alertRule?: string; + disableMetricValidation?: boolean; /** * Alerts are considered firing once their PromQL expression evaluated * to be "true" for this long. Alerts whose PromQL expression was not @@ -74063,7 +74521,7 @@ export namespace netapp { */ accessType?: string; /** - * Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + * Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. */ allowedClients?: string; /** @@ -74793,6 +75251,33 @@ export namespace networksecurity { targetUri: string; } + export interface MirroringDeploymentGroupConnectedEndpointGroup { + /** + * (Output) + * Output only. A connected mirroring endpoint group. + */ + name: string; + } + + export interface MirroringEndpointGroupAssociationLocationsDetail { + /** + * 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`. + * + * + * - - - + */ + location: string; + /** + * (Output) + * Output only. The association state in this location. + * Possible values: + * STATE_UNSPECIFIED + * ACTIVE + * OUT_OF_SYNC + */ + state: string; + } + export interface SecurityProfileThreatPreventionProfile { /** * The configuration for overriding threats actions by severity match. @@ -78725,6 +79210,7 @@ export namespace oracledatabase { * contain a maximum of 30 alphanumeric characters. */ database: string; + deletionProtection: boolean; /** * The display name for the Autonomous Database. The name does not have to * be unique within your project. @@ -79617,6 +80103,7 @@ export namespace oracledatabase { * The date and time that the Exadata Infrastructure was created. */ createTime: string; + deletionProtection: boolean; /** * User friendly name for this resource. */ @@ -80061,6 +80548,7 @@ export namespace oracledatabase { * The date and time that the VM cluster was created. */ createTime: string; + deletionProtection: boolean; /** * User friendly name for this resource. */ @@ -84085,6 +84573,100 @@ export namespace recaptcha { } export namespace redis { + export interface ClusterCrossClusterReplicationConfig { + /** + * The role of the cluster in cross cluster replication. Supported values are: + * 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + * 1. `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. + * 1. `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. + * 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + * Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + */ + clusterRole?: string; + /** + * (Output) + * An 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. + * Structure is documented below. + */ + memberships: outputs.redis.ClusterCrossClusterReplicationConfigMembership[]; + /** + * 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`. + * Structure is documented below. + */ + primaryCluster?: outputs.redis.ClusterCrossClusterReplicationConfigPrimaryCluster; + /** + * 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`. + * Structure is documented below. + */ + secondaryClusters?: outputs.redis.ClusterCrossClusterReplicationConfigSecondaryCluster[]; + /** + * (Output) + * The last time cross cluster replication config was updated. + */ + updateTime: string; + } + + export interface ClusterCrossClusterReplicationConfigMembership { + /** + * Details of the primary cluster that is used as the replication source for all the secondary clusters. + */ + primaryClusters: outputs.redis.ClusterCrossClusterReplicationConfigMembershipPrimaryCluster[]; + /** + * List of secondary clusters that are replicating from the primary cluster. + */ + secondaryClusters: outputs.redis.ClusterCrossClusterReplicationConfigMembershipSecondaryCluster[]; + } + + export interface ClusterCrossClusterReplicationConfigMembershipPrimaryCluster { + /** + * The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + */ + cluster: string; + /** + * (Output) + * The unique id of the primary cluster. + */ + uid: string; + } + + export interface ClusterCrossClusterReplicationConfigMembershipSecondaryCluster { + /** + * (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + */ + cluster: string; + /** + * (Output) + * The unique id of the secondary cluster. + */ + uid: string; + } + + export interface ClusterCrossClusterReplicationConfigPrimaryCluster { + /** + * The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + */ + cluster?: string; + /** + * (Output) + * The unique id of the primary cluster. + */ + uid: string; + } + + export interface ClusterCrossClusterReplicationConfigSecondaryCluster { + /** + * (Output) + * The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + */ + cluster?: string; + /** + * (Output) + * The unique id of the secondary cluster. + */ + uid: string; + } + export interface ClusterDiscoveryEndpoint { /** * Output only. The IP allocated on the consumer network for the PSC forwarding rule. @@ -84232,7 +84814,7 @@ export namespace redis { export interface ClusterPersistenceConfigAofConfig { /** * Optional. Available fsync modes. - * - NO - Do not explicilty call fsync(). Rely on OS defaults. + * - NO - Do not explicitly call fsync(). Rely on OS defaults. * - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. * - ALWAYS - Call fsync() for earch write command. * Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -89848,14 +90430,52 @@ export namespace tpu { preemptible: boolean; } + export interface V2QueuedResourceTpu { + /** + * The TPU node(s) being requested. + * Structure is documented below. + */ + nodeSpecs?: outputs.tpu.V2QueuedResourceTpuNodeSpec[]; + } + + export interface V2QueuedResourceTpuNodeSpec { + /** + * The node. + * Structure is documented below. + */ + node: outputs.tpu.V2QueuedResourceTpuNodeSpecNode; + /** + * Unqualified node identifier used to identify the node in the project once provisioned. + */ + nodeId?: string; + /** + * The parent resource name. + */ + parent: string; + } + + export interface V2QueuedResourceTpuNodeSpecNode { + /** + * TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + */ + acceleratorType: string; + /** + * Text description of the TPU. + */ + description?: string; + /** + * Runtime version for the TPU. + */ + runtimeVersion: string; + } + export interface V2VmAcceleratorConfig { /** * Topology of TPU in chips. */ topology: string; /** - * Type of TPU. - * Possible values are: `V2`, `V3`, `V4`, `V5P`. + * Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type */ type: string; } diff --git a/sdk/nodejs/vertex/aiEndpoint.ts b/sdk/nodejs/vertex/aiEndpoint.ts index ab00acdaa5..2e3ef68279 100644 --- a/sdk/nodejs/vertex/aiEndpoint.ts +++ b/sdk/nodejs/vertex/aiEndpoint.ts @@ -84,7 +84,7 @@ import * as utilities from "../utilities"; * * const project = gcp.organizations.getProject({}); * const endpoint = new gcp.vertex.AiEndpoint("endpoint", { - * name: "endpoint-name_69391", + * name: "endpoint-name_8270", * displayName: "sample-endpoint", * description: "A sample vertex endpoint", * location: "us-central1", @@ -106,7 +106,7 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const endpoint = new gcp.vertex.AiEndpoint("endpoint", { - * name: "endpoint-name_8270", + * name: "endpoint-name_41150", * displayName: "sample-endpoint", * description: "A sample vertex endpoint", * location: "us-central1", diff --git a/sdk/nodejs/vertex/aiFeatureOnlineStoreFeatureview.ts b/sdk/nodejs/vertex/aiFeatureOnlineStoreFeatureview.ts index 3a62e3b510..c2e0ce8663 100644 --- a/sdk/nodejs/vertex/aiFeatureOnlineStoreFeatureview.ts +++ b/sdk/nodejs/vertex/aiFeatureOnlineStoreFeatureview.ts @@ -179,8 +179,8 @@ import * as utilities from "../utilities"; * * const testProject = gcp.organizations.getProject({}); * const project = new gcp.organizations.Project("project", { - * projectId: "tf-test_41150", - * name: "tf-test_89313", + * projectId: "tf-test_89313", + * name: "tf-test_60646", * orgId: "123456789", * billingAccount: "000000-0000000-0000000-000000", * deletionPolicy: "DELETE", diff --git a/sdk/nodejs/vertex/aiIndexEndpoint.ts b/sdk/nodejs/vertex/aiIndexEndpoint.ts index bff19d6b20..40124fd04c 100644 --- a/sdk/nodejs/vertex/aiIndexEndpoint.ts +++ b/sdk/nodejs/vertex/aiIndexEndpoint.ts @@ -63,7 +63,7 @@ import * as utilities from "../utilities"; * }, * privateServiceConnectConfig: { * enablePrivateServiceConnect: true, - * projectAllowlists: [project.then(project => project.number)], + * projectAllowlists: [project.then(project => project.name)], * }, * }); * ``` diff --git a/sdk/python/pulumi_gcp/__init__.py b/sdk/python/pulumi_gcp/__init__.py index 37cd67765c..a6fa644d46 100644 --- a/sdk/python/pulumi_gcp/__init__.py +++ b/sdk/python/pulumi_gcp/__init__.py @@ -142,6 +142,8 @@ firestore = __firestore import pulumi_gcp.folder as __folder folder = __folder + import pulumi_gcp.gemini as __gemini + gemini = __gemini import pulumi_gcp.gkebackup as __gkebackup gkebackup = __gkebackup import pulumi_gcp.gkehub as __gkehub @@ -325,6 +327,7 @@ firebaserules = _utilities.lazy_import('pulumi_gcp.firebaserules') firestore = _utilities.lazy_import('pulumi_gcp.firestore') folder = _utilities.lazy_import('pulumi_gcp.folder') + gemini = _utilities.lazy_import('pulumi_gcp.gemini') gkebackup = _utilities.lazy_import('pulumi_gcp.gkebackup') gkehub = _utilities.lazy_import('pulumi_gcp.gkehub') gkeonprem = _utilities.lazy_import('pulumi_gcp.gkeonprem') @@ -4939,6 +4942,46 @@ "gcp:folder/organizationPolicy:OrganizationPolicy": "OrganizationPolicy" } }, + { + "pkg": "gcp", + "mod": "gemini/codeRepositoryIndex", + "fqn": "pulumi_gcp.gemini", + "classes": { + "gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex": "CodeRepositoryIndex" + } + }, + { + "pkg": "gcp", + "mod": "gemini/repositoryGroup", + "fqn": "pulumi_gcp.gemini", + "classes": { + "gcp:gemini/repositoryGroup:RepositoryGroup": "RepositoryGroup" + } + }, + { + "pkg": "gcp", + "mod": "gemini/repositoryGroupIamBinding", + "fqn": "pulumi_gcp.gemini", + "classes": { + "gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding": "RepositoryGroupIamBinding" + } + }, + { + "pkg": "gcp", + "mod": "gemini/repositoryGroupIamMember", + "fqn": "pulumi_gcp.gemini", + "classes": { + "gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember": "RepositoryGroupIamMember" + } + }, + { + "pkg": "gcp", + "mod": "gemini/repositoryGroupIamPolicy", + "fqn": "pulumi_gcp.gemini", + "classes": { + "gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy": "RepositoryGroupIamPolicy" + } + }, { "pkg": "gcp", "mod": "gkebackup/backupPlan", @@ -5403,6 +5446,14 @@ "gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy": "PrincipalAccessBoundaryPolicy" } }, + { + "pkg": "gcp", + "mod": "iam/projectsPolicyBinding", + "fqn": "pulumi_gcp.iam", + "classes": { + "gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding": "ProjectsPolicyBinding" + } + }, { "pkg": "gcp", "mod": "iam/workforcePool", @@ -6467,6 +6518,38 @@ "gcp:networksecurity/gatewaySecurityPolicyRule:GatewaySecurityPolicyRule": "GatewaySecurityPolicyRule" } }, + { + "pkg": "gcp", + "mod": "networksecurity/mirroringDeployment", + "fqn": "pulumi_gcp.networksecurity", + "classes": { + "gcp:networksecurity/mirroringDeployment:MirroringDeployment": "MirroringDeployment" + } + }, + { + "pkg": "gcp", + "mod": "networksecurity/mirroringDeploymentGroup", + "fqn": "pulumi_gcp.networksecurity", + "classes": { + "gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup": "MirroringDeploymentGroup" + } + }, + { + "pkg": "gcp", + "mod": "networksecurity/mirroringEndpointGroup", + "fqn": "pulumi_gcp.networksecurity", + "classes": { + "gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup": "MirroringEndpointGroup" + } + }, + { + "pkg": "gcp", + "mod": "networksecurity/mirroringEndpointGroupAssociation", + "fqn": "pulumi_gcp.networksecurity", + "classes": { + "gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation": "MirroringEndpointGroupAssociation" + } + }, { "pkg": "gcp", "mod": "networksecurity/securityProfile", @@ -8171,6 +8254,14 @@ "gcp:tpu/node:Node": "Node" } }, + { + "pkg": "gcp", + "mod": "tpu/v2QueuedResource", + "fqn": "pulumi_gcp.tpu", + "classes": { + "gcp:tpu/v2QueuedResource:V2QueuedResource": "V2QueuedResource" + } + }, { "pkg": "gcp", "mod": "tpu/v2Vm", diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/_inputs.py b/sdk/python/pulumi_gcp/accesscontextmanager/_inputs.py index 9b2bc43047..50755221cc 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/_inputs.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/_inputs.py @@ -6054,6 +6054,13 @@ class ServicePerimetersServicePerimeterArgsDict(TypedDict): Description of the ServicePerimeter and its use. Does not affect behavior. """ + etag: NotRequired[pulumi.Input[str]] + """ + (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. + """ perimeter_type: NotRequired[pulumi.Input[str]] """ Specifies the type of the Perimeter. There are two types: regular and @@ -6115,6 +6122,7 @@ def __init__(__self__, *, title: pulumi.Input[str], create_time: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, perimeter_type: Optional[pulumi.Input[str]] = None, spec: Optional[pulumi.Input['ServicePerimetersServicePerimeterSpecArgs']] = None, status: Optional[pulumi.Input['ServicePerimetersServicePerimeterStatusArgs']] = None, @@ -6129,6 +6137,10 @@ def __init__(__self__, *, Time the AccessPolicy was created in UTC. :param pulumi.Input[str] description: Description of the ServicePerimeter and its use. Does not affect behavior. + :param pulumi.Input[str] etag: (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. :param pulumi.Input[str] perimeter_type: Specifies the type of the Perimeter. There are two types: regular and bridge. Regular Service Perimeter contains resources, access levels, and restricted services. Every resource can be in at most @@ -6172,6 +6184,8 @@ def __init__(__self__, *, pulumi.set(__self__, "create_time", create_time) if description is not None: pulumi.set(__self__, "description", description) + if etag is not None: + pulumi.set(__self__, "etag", etag) if perimeter_type is not None: pulumi.set(__self__, "perimeter_type", perimeter_type) if spec is not None: @@ -6235,6 +6249,21 @@ def description(self) -> Optional[pulumi.Input[str]]: def description(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "description", value) + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + (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. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + @property @pulumi.getter(name="perimeterType") def perimeter_type(self) -> Optional[pulumi.Input[str]]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/outputs.py b/sdk/python/pulumi_gcp/accesscontextmanager/outputs.py index d2bf9db905..a043a1cb8f 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/outputs.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/outputs.py @@ -4683,6 +4683,7 @@ def __init__(__self__, *, title: str, create_time: Optional[str] = None, description: Optional[str] = None, + etag: Optional[str] = None, perimeter_type: Optional[str] = None, spec: Optional['outputs.ServicePerimetersServicePerimeterSpec'] = None, status: Optional['outputs.ServicePerimetersServicePerimeterStatus'] = None, @@ -4697,6 +4698,10 @@ def __init__(__self__, *, Time the AccessPolicy was created in UTC. :param str description: Description of the ServicePerimeter and its use. Does not affect behavior. + :param str etag: (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. :param str perimeter_type: Specifies the type of the Perimeter. There are two types: regular and bridge. Regular Service Perimeter contains resources, access levels, and restricted services. Every resource can be in at most @@ -4740,6 +4745,8 @@ def __init__(__self__, *, pulumi.set(__self__, "create_time", create_time) if description is not None: pulumi.set(__self__, "description", description) + if etag is not None: + pulumi.set(__self__, "etag", etag) if perimeter_type is not None: pulumi.set(__self__, "perimeter_type", perimeter_type) if spec is not None: @@ -4787,6 +4794,17 @@ def description(self) -> Optional[str]: """ return pulumi.get(self, "description") + @property + @pulumi.getter + def etag(self) -> Optional[str]: + """ + (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. + """ + return pulumi.get(self, "etag") + @property @pulumi.getter(name="perimeterType") def perimeter_type(self) -> Optional[str]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter.py index d705870463..a01d1dda8c 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter.py @@ -231,6 +231,7 @@ class _ServicePerimeterState: def __init__(__self__, *, create_time: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, parent: Optional[pulumi.Input[str]] = None, perimeter_type: Optional[pulumi.Input[str]] = None, @@ -244,6 +245,9 @@ def __init__(__self__, *, :param pulumi.Input[str] create_time: Time the AccessPolicy was created in UTC. :param pulumi.Input[str] description: Description of the ServicePerimeter and its use. Does not affect behavior. + :param pulumi.Input[str] etag: 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. :param pulumi.Input[str] name: 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} @@ -293,6 +297,8 @@ def __init__(__self__, *, pulumi.set(__self__, "create_time", create_time) if description is not None: pulumi.set(__self__, "description", description) + if etag is not None: + pulumi.set(__self__, "etag", etag) if name is not None: pulumi.set(__self__, "name", name) if parent is not None: @@ -335,6 +341,20 @@ def description(self) -> Optional[pulumi.Input[str]]: def description(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "description", value) + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + @property @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: @@ -989,6 +1009,7 @@ def _internal_init(__self__, __props__.__dict__["title"] = title __props__.__dict__["use_explicit_dry_run_spec"] = use_explicit_dry_run_spec __props__.__dict__["create_time"] = None + __props__.__dict__["etag"] = None __props__.__dict__["update_time"] = None super(ServicePerimeter, __self__).__init__( 'gcp:accesscontextmanager/servicePerimeter:ServicePerimeter', @@ -1002,6 +1023,7 @@ def get(resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, create_time: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, parent: Optional[pulumi.Input[str]] = None, perimeter_type: Optional[pulumi.Input[str]] = None, @@ -1020,6 +1042,9 @@ def get(resource_name: str, :param pulumi.Input[str] create_time: Time the AccessPolicy was created in UTC. :param pulumi.Input[str] description: Description of the ServicePerimeter and its use. Does not affect behavior. + :param pulumi.Input[str] etag: 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. :param pulumi.Input[str] name: 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} @@ -1071,6 +1096,7 @@ def get(resource_name: str, __props__.__dict__["create_time"] = create_time __props__.__dict__["description"] = description + __props__.__dict__["etag"] = etag __props__.__dict__["name"] = name __props__.__dict__["parent"] = parent __props__.__dict__["perimeter_type"] = perimeter_type @@ -1098,6 +1124,16 @@ def description(self) -> pulumi.Output[Optional[str]]: """ return pulumi.get(self, "description") + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + 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. + """ + return pulumi.get(self, "etag") + @property @pulumi.getter def name(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_egress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_egress_policy.py index 8515e8252b..96f2fb3c1e 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_egress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_egress_policy.py @@ -175,6 +175,9 @@ def __init__(__self__, > **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 `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: @@ -215,6 +218,9 @@ def __init__(__self__, > **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 `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/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_ingress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_ingress_policy.py index 249364dbea..e92f76956e 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_ingress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_dry_run_ingress_policy.py @@ -180,6 +180,9 @@ def __init__(__self__, > **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 `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: @@ -222,6 +225,9 @@ def __init__(__self__, > **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 `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/python/pulumi_gcp/accesscontextmanager/service_perimeter_egress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_egress_policy.py index a1302b382a..4ef232abf9 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_egress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_egress_policy.py @@ -175,6 +175,9 @@ def __init__(__self__, > **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 `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: @@ -215,6 +218,9 @@ def __init__(__self__, > **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 `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/python/pulumi_gcp/accesscontextmanager/service_perimeter_ingress_policy.py b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_ingress_policy.py index 0267a913f8..1536c7bb04 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_ingress_policy.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/service_perimeter_ingress_policy.py @@ -180,6 +180,9 @@ def __init__(__self__, > **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 `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: @@ -222,6 +225,9 @@ def __init__(__self__, > **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 `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/python/pulumi_gcp/apigee/app_group.py b/sdk/python/pulumi_gcp/apigee/app_group.py index 2d1f67ff76..aa6047ca91 100644 --- a/sdk/python/pulumi_gcp/apigee/app_group.py +++ b/sdk/python/pulumi_gcp/apigee/app_group.py @@ -37,7 +37,7 @@ def __init__(__self__, *, - - - :param pulumi.Input[Sequence[pulumi.Input['AppGroupAttributeArgs']]] attributes: A list of attributes Structure is documented below. - :param pulumi.Input[str] channel_id: Channel identifier identifies the owner maintaing this grouping. + :param pulumi.Input[str] channel_id: Channel identifier identifies the owner maintaining this grouping. :param pulumi.Input[str] channel_uri: A reference to the associated storefront/marketplace. :param pulumi.Input[str] display_name: App group name displayed in the UI :param pulumi.Input[str] name: Name of the AppGroup. Characters you can use in the name are restricted to: A-Z0-9._-$ %. @@ -91,7 +91,7 @@ def attributes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['AppGrou @pulumi.getter(name="channelId") def channel_id(self) -> Optional[pulumi.Input[str]]: """ - Channel identifier identifies the owner maintaing this grouping. + Channel identifier identifies the owner maintaining this grouping. """ return pulumi.get(self, "channel_id") @@ -168,7 +168,7 @@ def __init__(__self__, *, :param pulumi.Input[str] app_group_id: Internal identifier that cannot be edited :param pulumi.Input[Sequence[pulumi.Input['AppGroupAttributeArgs']]] attributes: A list of attributes Structure is documented below. - :param pulumi.Input[str] channel_id: Channel identifier identifies the owner maintaing this grouping. + :param pulumi.Input[str] channel_id: Channel identifier identifies the owner maintaining this grouping. :param pulumi.Input[str] channel_uri: A reference to the associated storefront/marketplace. :param pulumi.Input[str] created_at: Created time as milliseconds since epoch. :param pulumi.Input[str] display_name: App group name displayed in the UI @@ -235,7 +235,7 @@ def attributes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['AppGrou @pulumi.getter(name="channelId") def channel_id(self) -> Optional[pulumi.Input[str]]: """ - Channel identifier identifies the owner maintaing this grouping. + Channel identifier identifies the owner maintaining this grouping. """ return pulumi.get(self, "channel_id") @@ -476,7 +476,7 @@ def __init__(__self__, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[Sequence[pulumi.Input[Union['AppGroupAttributeArgs', 'AppGroupAttributeArgsDict']]]] attributes: A list of attributes Structure is documented below. - :param pulumi.Input[str] channel_id: Channel identifier identifies the owner maintaing this grouping. + :param pulumi.Input[str] channel_id: Channel identifier identifies the owner maintaining this grouping. :param pulumi.Input[str] channel_uri: A reference to the associated storefront/marketplace. :param pulumi.Input[str] display_name: App group name displayed in the UI :param pulumi.Input[str] name: Name of the AppGroup. Characters you can use in the name are restricted to: A-Z0-9._-$ %. @@ -683,7 +683,7 @@ def get(resource_name: str, :param pulumi.Input[str] app_group_id: Internal identifier that cannot be edited :param pulumi.Input[Sequence[pulumi.Input[Union['AppGroupAttributeArgs', 'AppGroupAttributeArgsDict']]]] attributes: A list of attributes Structure is documented below. - :param pulumi.Input[str] channel_id: Channel identifier identifies the owner maintaing this grouping. + :param pulumi.Input[str] channel_id: Channel identifier identifies the owner maintaining this grouping. :param pulumi.Input[str] channel_uri: A reference to the associated storefront/marketplace. :param pulumi.Input[str] created_at: Created time as milliseconds since epoch. :param pulumi.Input[str] display_name: App group name displayed in the UI @@ -736,7 +736,7 @@ def attributes(self) -> pulumi.Output[Optional[Sequence['outputs.AppGroupAttribu @pulumi.getter(name="channelId") def channel_id(self) -> pulumi.Output[Optional[str]]: """ - Channel identifier identifies the owner maintaing this grouping. + Channel identifier identifies the owner maintaining this grouping. """ return pulumi.get(self, "channel_id") diff --git a/sdk/python/pulumi_gcp/applicationintegration/client.py b/sdk/python/pulumi_gcp/applicationintegration/client.py index 99342b7727..885c9864f2 100644 --- a/sdk/python/pulumi_gcp/applicationintegration/client.py +++ b/sdk/python/pulumi_gcp/applicationintegration/client.py @@ -249,6 +249,7 @@ def __init__(__self__, ```python import pulumi import pulumi_gcp as gcp + import pulumi_std as std test_project = gcp.organizations.get_project() keyring = gcp.kms.KeyRing("keyring", @@ -268,9 +269,9 @@ def __init__(__self__, run_as_service_account=service_account.email, cloud_kms_config={ "kms_location": "us-east1", - "kms_ring": keyring.id, - "key": cryptokey.id, - "key_version": test_key.id, + "kms_ring": std.basename_output(input=keyring.id).apply(lambda invoke: invoke.result), + "key": std.basename_output(input=cryptokey.id).apply(lambda invoke: invoke.result), + "key_version": std.basename_output(input=test_key.id).apply(lambda invoke: invoke.result), "kms_project_id": test_project.project_id, }) ``` @@ -343,6 +344,7 @@ def __init__(__self__, ```python import pulumi import pulumi_gcp as gcp + import pulumi_std as std test_project = gcp.organizations.get_project() keyring = gcp.kms.KeyRing("keyring", @@ -362,9 +364,9 @@ def __init__(__self__, run_as_service_account=service_account.email, cloud_kms_config={ "kms_location": "us-east1", - "kms_ring": keyring.id, - "key": cryptokey.id, - "key_version": test_key.id, + "kms_ring": std.basename_output(input=keyring.id).apply(lambda invoke: invoke.result), + "key": std.basename_output(input=cryptokey.id).apply(lambda invoke: invoke.result), + "key_version": std.basename_output(input=test_key.id).apply(lambda invoke: invoke.result), "kms_project_id": test_project.project_id, }) ``` diff --git a/sdk/python/pulumi_gcp/artifactregistry/_inputs.py b/sdk/python/pulumi_gcp/artifactregistry/_inputs.py index 823d263fde..4993be0051 100644 --- a/sdk/python/pulumi_gcp/artifactregistry/_inputs.py +++ b/sdk/python/pulumi_gcp/artifactregistry/_inputs.py @@ -880,7 +880,10 @@ def repository_path(self, value: pulumi.Input[str]): class RepositoryRemoteRepositoryConfigCommonRepositoryArgsDict(TypedDict): uri: pulumi.Input[str] """ - 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"` """ elif False: RepositoryRemoteRepositoryConfigCommonRepositoryArgsDict: TypeAlias = Mapping[str, Any] @@ -890,7 +893,10 @@ class RepositoryRemoteRepositoryConfigCommonRepositoryArgs: def __init__(__self__, *, uri: pulumi.Input[str]): """ - :param pulumi.Input[str] uri: Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY` + :param pulumi.Input[str] uri: 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"` """ pulumi.set(__self__, "uri", uri) @@ -898,7 +904,10 @@ def __init__(__self__, *, @pulumi.getter def uri(self) -> pulumi.Input[str]: """ - 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"` """ return pulumi.get(self, "uri") @@ -911,7 +920,7 @@ def uri(self, value: pulumi.Input[str]): class RepositoryRemoteRepositoryConfigDockerRepositoryArgsDict(TypedDict): custom_repository: NotRequired[pulumi.Input['RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgsDict']] """ - 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_repository: NotRequired[pulumi.Input[str]] @@ -929,7 +938,7 @@ def __init__(__self__, *, custom_repository: Optional[pulumi.Input['RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs']] = None, public_repository: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input['RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs'] custom_repository: Settings for a remote repository with a custom uri. + :param pulumi.Input['RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs'] custom_repository: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. Structure is documented below. :param pulumi.Input[str] public_repository: Address of the remote repository. Default value is `DOCKER_HUB`. @@ -944,7 +953,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepository") def custom_repository(self) -> Optional[pulumi.Input['RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs']]: """ - 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. """ return pulumi.get(self, "custom_repository") @@ -1004,7 +1013,7 @@ def uri(self, value: Optional[pulumi.Input[str]]): class RepositoryRemoteRepositoryConfigMavenRepositoryArgsDict(TypedDict): custom_repository: NotRequired[pulumi.Input['RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgsDict']] """ - 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_repository: NotRequired[pulumi.Input[str]] @@ -1022,7 +1031,7 @@ def __init__(__self__, *, custom_repository: Optional[pulumi.Input['RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs']] = None, public_repository: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input['RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs'] custom_repository: Settings for a remote repository with a custom uri. + :param pulumi.Input['RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs'] custom_repository: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. Structure is documented below. :param pulumi.Input[str] public_repository: Address of the remote repository. Default value is `MAVEN_CENTRAL`. @@ -1037,7 +1046,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepository") def custom_repository(self) -> Optional[pulumi.Input['RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs']]: """ - 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. """ return pulumi.get(self, "custom_repository") @@ -1097,7 +1106,7 @@ def uri(self, value: Optional[pulumi.Input[str]]): class RepositoryRemoteRepositoryConfigNpmRepositoryArgsDict(TypedDict): custom_repository: NotRequired[pulumi.Input['RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgsDict']] """ - 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_repository: NotRequired[pulumi.Input[str]] @@ -1115,7 +1124,7 @@ def __init__(__self__, *, custom_repository: Optional[pulumi.Input['RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs']] = None, public_repository: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input['RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs'] custom_repository: Settings for a remote repository with a custom uri. + :param pulumi.Input['RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs'] custom_repository: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. Structure is documented below. :param pulumi.Input[str] public_repository: Address of the remote repository. Default value is `NPMJS`. @@ -1130,7 +1139,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepository") def custom_repository(self) -> Optional[pulumi.Input['RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs']]: """ - 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. """ return pulumi.get(self, "custom_repository") @@ -1190,7 +1199,7 @@ def uri(self, value: Optional[pulumi.Input[str]]): class RepositoryRemoteRepositoryConfigPythonRepositoryArgsDict(TypedDict): custom_repository: NotRequired[pulumi.Input['RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgsDict']] """ - 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_repository: NotRequired[pulumi.Input[str]] @@ -1208,7 +1217,7 @@ def __init__(__self__, *, custom_repository: Optional[pulumi.Input['RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs']] = None, public_repository: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input['RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs'] custom_repository: Settings for a remote repository with a custom uri. + :param pulumi.Input['RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs'] custom_repository: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. Structure is documented below. :param pulumi.Input[str] public_repository: Address of the remote repository. Default value is `PYPI`. @@ -1223,7 +1232,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepository") def custom_repository(self) -> Optional[pulumi.Input['RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs']]: """ - 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. """ return pulumi.get(self, "custom_repository") diff --git a/sdk/python/pulumi_gcp/artifactregistry/outputs.py b/sdk/python/pulumi_gcp/artifactregistry/outputs.py index 9c447af87a..55a189ebea 100644 --- a/sdk/python/pulumi_gcp/artifactregistry/outputs.py +++ b/sdk/python/pulumi_gcp/artifactregistry/outputs.py @@ -722,7 +722,10 @@ class RepositoryRemoteRepositoryConfigCommonRepository(dict): def __init__(__self__, *, uri: str): """ - :param str uri: Specific uri to the Artifact Registory repository, e.g. `projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY` + :param str uri: 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"` """ pulumi.set(__self__, "uri", uri) @@ -730,7 +733,10 @@ def __init__(__self__, *, @pulumi.getter def uri(self) -> str: """ - 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"` """ return pulumi.get(self, "uri") @@ -760,7 +766,7 @@ def __init__(__self__, *, custom_repository: Optional['outputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository'] = None, public_repository: Optional[str] = None): """ - :param 'RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs' custom_repository: Settings for a remote repository with a custom uri. + :param 'RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs' custom_repository: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. Structure is documented below. :param str public_repository: Address of the remote repository. Default value is `DOCKER_HUB`. @@ -775,7 +781,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepository") def custom_repository(self) -> Optional['outputs.RepositoryRemoteRepositoryConfigDockerRepositoryCustomRepository']: """ - 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. """ return pulumi.get(self, "custom_repository") @@ -835,7 +841,7 @@ def __init__(__self__, *, custom_repository: Optional['outputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository'] = None, public_repository: Optional[str] = None): """ - :param 'RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs' custom_repository: Settings for a remote repository with a custom uri. + :param 'RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs' custom_repository: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. Structure is documented below. :param str public_repository: Address of the remote repository. Default value is `MAVEN_CENTRAL`. @@ -850,7 +856,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepository") def custom_repository(self) -> Optional['outputs.RepositoryRemoteRepositoryConfigMavenRepositoryCustomRepository']: """ - 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. """ return pulumi.get(self, "custom_repository") @@ -910,7 +916,7 @@ def __init__(__self__, *, custom_repository: Optional['outputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository'] = None, public_repository: Optional[str] = None): """ - :param 'RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs' custom_repository: Settings for a remote repository with a custom uri. + :param 'RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs' custom_repository: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. Structure is documented below. :param str public_repository: Address of the remote repository. Default value is `NPMJS`. @@ -925,7 +931,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepository") def custom_repository(self) -> Optional['outputs.RepositoryRemoteRepositoryConfigNpmRepositoryCustomRepository']: """ - 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. """ return pulumi.get(self, "custom_repository") @@ -985,7 +991,7 @@ def __init__(__self__, *, custom_repository: Optional['outputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository'] = None, public_repository: Optional[str] = None): """ - :param 'RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs' custom_repository: Settings for a remote repository with a custom uri. + :param 'RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs' custom_repository: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. Structure is documented below. :param str public_repository: Address of the remote repository. Default value is `PYPI`. @@ -1000,7 +1006,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepository") def custom_repository(self) -> Optional['outputs.RepositoryRemoteRepositoryConfigPythonRepositoryCustomRepository']: """ - 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. """ return pulumi.get(self, "custom_repository") @@ -1669,7 +1675,10 @@ class GetRepositoryRemoteRepositoryConfigCommonRepositoryResult(dict): def __init__(__self__, *, uri: str): """ - :param str uri: Specific uri to the Artifact Registory repository, e.g. 'projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY' + :param str uri: 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"' """ pulumi.set(__self__, "uri", uri) @@ -1677,7 +1686,10 @@ def __init__(__self__, *, @pulumi.getter def uri(self) -> str: """ - 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"' """ return pulumi.get(self, "uri") @@ -1688,7 +1700,7 @@ def __init__(__self__, *, custom_repositories: Sequence['outputs.GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryResult'], public_repository: str): """ - :param Sequence['GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs'] custom_repositories: Settings for a remote repository with a custom uri. + :param Sequence['GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryArgs'] custom_repositories: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. :param str public_repository: Address of the remote repository. Default value: "DOCKER_HUB" Possible values: ["DOCKER_HUB"] """ pulumi.set(__self__, "custom_repositories", custom_repositories) @@ -1698,7 +1710,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepositories") def custom_repositories(self) -> Sequence['outputs.GetRepositoryRemoteRepositoryConfigDockerRepositoryCustomRepositoryResult']: """ - Settings for a remote repository with a custom uri. + [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. """ return pulumi.get(self, "custom_repositories") @@ -1735,7 +1747,7 @@ def __init__(__self__, *, custom_repositories: Sequence['outputs.GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryResult'], public_repository: str): """ - :param Sequence['GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs'] custom_repositories: Settings for a remote repository with a custom uri. + :param Sequence['GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryArgs'] custom_repositories: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. :param str public_repository: Address of the remote repository. Default value: "MAVEN_CENTRAL" Possible values: ["MAVEN_CENTRAL"] """ pulumi.set(__self__, "custom_repositories", custom_repositories) @@ -1745,7 +1757,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepositories") def custom_repositories(self) -> Sequence['outputs.GetRepositoryRemoteRepositoryConfigMavenRepositoryCustomRepositoryResult']: """ - Settings for a remote repository with a custom uri. + [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. """ return pulumi.get(self, "custom_repositories") @@ -1782,7 +1794,7 @@ def __init__(__self__, *, custom_repositories: Sequence['outputs.GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryResult'], public_repository: str): """ - :param Sequence['GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs'] custom_repositories: Settings for a remote repository with a custom uri. + :param Sequence['GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryArgs'] custom_repositories: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. :param str public_repository: Address of the remote repository. Default value: "NPMJS" Possible values: ["NPMJS"] """ pulumi.set(__self__, "custom_repositories", custom_repositories) @@ -1792,7 +1804,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepositories") def custom_repositories(self) -> Sequence['outputs.GetRepositoryRemoteRepositoryConfigNpmRepositoryCustomRepositoryResult']: """ - Settings for a remote repository with a custom uri. + [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. """ return pulumi.get(self, "custom_repositories") @@ -1829,7 +1841,7 @@ def __init__(__self__, *, custom_repositories: Sequence['outputs.GetRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryResult'], public_repository: str): """ - :param Sequence['GetRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs'] custom_repositories: Settings for a remote repository with a custom uri. + :param Sequence['GetRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryArgs'] custom_repositories: [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. :param str public_repository: Address of the remote repository. Default value: "PYPI" Possible values: ["PYPI"] """ pulumi.set(__self__, "custom_repositories", custom_repositories) @@ -1839,7 +1851,7 @@ def __init__(__self__, *, @pulumi.getter(name="customRepositories") def custom_repositories(self) -> Sequence['outputs.GetRepositoryRemoteRepositoryConfigPythonRepositoryCustomRepositoryResult']: """ - Settings for a remote repository with a custom uri. + [Deprecated, please use commonRepository instead] Settings for a remote repository with a custom uri. """ return pulumi.get(self, "custom_repositories") diff --git a/sdk/python/pulumi_gcp/artifactregistry/repository.py b/sdk/python/pulumi_gcp/artifactregistry/repository.py index 503816649e..53912e6cbf 100644 --- a/sdk/python/pulumi_gcp/artifactregistry/repository.py +++ b/sdk/python/pulumi_gcp/artifactregistry/repository.py @@ -1143,6 +1143,70 @@ def __init__(__self__, }, }) ``` + ### Artifact Registry Repository Remote Common Repository With Artifact Registry Uri + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.get_project() + upstream_repo = gcp.artifactregistry.Repository("upstream_repo", + location="us-central1", + repository_id="example-upstream-repo", + description="example upstream repository", + format="DOCKER") + my_repo = gcp.artifactregistry.Repository("my-repo", + location="us-central1", + repository_id="example-common-remote", + description="example remote common repository with docker upstream", + format="DOCKER", + mode="REMOTE_REPOSITORY", + remote_repository_config={ + "description": "pull-through cache of another Artifact Registry repository by URL", + "common_repository": { + "uri": "https://us-central1-docker.pkg.dev//example-upstream-repo", + }, + }) + ``` + ### Artifact Registry Repository Remote Common Repository With Custom Upstream + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.get_project() + example_remote_secret = gcp.secretmanager.Secret("example-remote-secret", + secret_id="example-secret", + replication={ + "auto": {}, + }) + example_remote_secret_version = gcp.secretmanager.SecretVersion("example-remote-secret_version", + secret=example_remote_secret.id, + secret_data="remote-password") + secret_access = gcp.secretmanager.SecretIamMember("secret-access", + secret_id=example_remote_secret.id, + role="roles/secretmanager.secretAccessor", + member=f"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com") + my_repo = gcp.artifactregistry.Repository("my-repo", + location="us-central1", + repository_id="example-docker-custom-remote", + description="example remote custom docker repository with credentials", + format="DOCKER", + mode="REMOTE_REPOSITORY", + remote_repository_config={ + "description": "custom common docker remote with credentials", + "disable_upstream_validation": True, + "common_repository": { + "uri": "https://registry-1.docker.io", + }, + "upstream_credentials": { + "username_password_credentials": { + "username": "remote-username", + "password_secret_version": example_remote_secret_version.name, + }, + }, + }) + ``` ## Import @@ -1663,6 +1727,70 @@ def __init__(__self__, }, }) ``` + ### Artifact Registry Repository Remote Common Repository With Artifact Registry Uri + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.get_project() + upstream_repo = gcp.artifactregistry.Repository("upstream_repo", + location="us-central1", + repository_id="example-upstream-repo", + description="example upstream repository", + format="DOCKER") + my_repo = gcp.artifactregistry.Repository("my-repo", + location="us-central1", + repository_id="example-common-remote", + description="example remote common repository with docker upstream", + format="DOCKER", + mode="REMOTE_REPOSITORY", + remote_repository_config={ + "description": "pull-through cache of another Artifact Registry repository by URL", + "common_repository": { + "uri": "https://us-central1-docker.pkg.dev//example-upstream-repo", + }, + }) + ``` + ### Artifact Registry Repository Remote Common Repository With Custom Upstream + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.get_project() + example_remote_secret = gcp.secretmanager.Secret("example-remote-secret", + secret_id="example-secret", + replication={ + "auto": {}, + }) + example_remote_secret_version = gcp.secretmanager.SecretVersion("example-remote-secret_version", + secret=example_remote_secret.id, + secret_data="remote-password") + secret_access = gcp.secretmanager.SecretIamMember("secret-access", + secret_id=example_remote_secret.id, + role="roles/secretmanager.secretAccessor", + member=f"serviceAccount:service-{project.number}@gcp-sa-artifactregistry.iam.gserviceaccount.com") + my_repo = gcp.artifactregistry.Repository("my-repo", + location="us-central1", + repository_id="example-docker-custom-remote", + description="example remote custom docker repository with credentials", + format="DOCKER", + mode="REMOTE_REPOSITORY", + remote_repository_config={ + "description": "custom common docker remote with credentials", + "disable_upstream_validation": True, + "common_repository": { + "uri": "https://registry-1.docker.io", + }, + "upstream_credentials": { + "username_password_credentials": { + "username": "remote-username", + "password_secret_version": example_remote_secret_version.name, + }, + }, + }) + ``` ## Import diff --git a/sdk/python/pulumi_gcp/assuredworkloads/workload.py b/sdk/python/pulumi_gcp/assuredworkloads/workload.py index 568972e869..98202fdbeb 100644 --- a/sdk/python/pulumi_gcp/assuredworkloads/workload.py +++ b/sdk/python/pulumi_gcp/assuredworkloads/workload.py @@ -38,7 +38,7 @@ def __init__(__self__, *, workload_options: Optional[pulumi.Input['WorkloadWorkloadOptionsArgs']] = None): """ The set of arguments for constructing a Workload resource. - :param pulumi.Input[str] compliance_regime: 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 + :param pulumi.Input[str] compliance_regime: 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 :param pulumi.Input[str] display_name: Required. The user-assigned display name of the Workload. When present it must be between 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, and spaces. Example: My Workload :param pulumi.Input[str] location: The location for the resource :param pulumi.Input[str] organization: The organization for the resource @@ -92,7 +92,7 @@ def __init__(__self__, *, @pulumi.getter(name="complianceRegime") def compliance_regime(self) -> pulumi.Input[str]: """ - 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 """ return pulumi.get(self, "compliance_regime") @@ -307,7 +307,7 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering Workload resources. :param pulumi.Input[str] billing_account: Optional. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`. - :param pulumi.Input[str] compliance_regime: 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 + :param pulumi.Input[str] compliance_regime: 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 :param pulumi.Input[Sequence[pulumi.Input['WorkloadComplianceStatusArgs']]] compliance_statuses: Output only. Count of active Violations in the Workload. :param pulumi.Input[Sequence[pulumi.Input[str]]] compliant_but_disallowed_services: Output only. Urls for services which are compliant for this Assured Workload, but which are currently disallowed by the ResourceUsageRestriction org policy. Invoke workloads.restrictAllowedResources endpoint to allow your project developers to use these services in their environment. :param pulumi.Input[str] create_time: Output only. Immutable. The Workload creation timestamp. @@ -406,7 +406,7 @@ def billing_account(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="complianceRegime") def compliance_regime(self) -> Optional[pulumi.Input[str]]: """ - 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 """ return pulumi.get(self, "compliance_regime") @@ -853,7 +853,7 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] billing_account: Optional. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`. - :param pulumi.Input[str] compliance_regime: 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 + :param pulumi.Input[str] compliance_regime: 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 :param pulumi.Input[str] display_name: Required. The user-assigned display name of the Workload. When present it must be between 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, and spaces. Example: My Workload :param pulumi.Input[bool] enable_sovereign_controls: Optional. Indicates the sovereignty status of the given workload. Currently meant to be used by Europe/Canada customers. :param pulumi.Input[Union['WorkloadKmsSettingsArgs', 'WorkloadKmsSettingsArgsDict']] kms_settings: **DEPRECATED** Input only. Settings used to create a CMEK crypto key. When set, a project with a KMS CMEK key is provisioned. This field is deprecated as of Feb 28, 2022. In order to create a Keyring, callers should specify, ENCRYPTION_KEYS_PROJECT or KEYRING in ResourceSettings.resource_type field. @@ -1129,7 +1129,7 @@ def get(resource_name: str, :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] billing_account: Optional. Input only. The billing account used for the resources which are direct children of workload. This billing account is initially associated with the resources created as part of Workload creation. After the initial creation of these resources, the customer can change the assigned billing account. The resource name has the form `billingAccounts/{billing_account_id}`. For example, `billingAccounts/012345-567890-ABCDEF`. - :param pulumi.Input[str] compliance_regime: 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 + :param pulumi.Input[str] compliance_regime: 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 :param pulumi.Input[Sequence[pulumi.Input[Union['WorkloadComplianceStatusArgs', 'WorkloadComplianceStatusArgsDict']]]] compliance_statuses: Output only. Count of active Violations in the Workload. :param pulumi.Input[Sequence[pulumi.Input[str]]] compliant_but_disallowed_services: Output only. Urls for services which are compliant for this Assured Workload, but which are currently disallowed by the ResourceUsageRestriction org policy. Invoke workloads.restrictAllowedResources endpoint to allow your project developers to use these services in their environment. :param pulumi.Input[str] create_time: Output only. Immutable. The Workload creation timestamp. @@ -1204,7 +1204,7 @@ def billing_account(self) -> pulumi.Output[Optional[str]]: @pulumi.getter(name="complianceRegime") def compliance_regime(self) -> pulumi.Output[str]: """ - 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 """ return pulumi.get(self, "compliance_regime") diff --git a/sdk/python/pulumi_gcp/backupdisasterrecovery/__init__.py b/sdk/python/pulumi_gcp/backupdisasterrecovery/__init__.py index e4c719151a..9770f608a7 100644 --- a/sdk/python/pulumi_gcp/backupdisasterrecovery/__init__.py +++ b/sdk/python/pulumi_gcp/backupdisasterrecovery/__init__.py @@ -8,8 +8,10 @@ from .backup_plan import * from .backup_plan_association import * from .backup_vault import * +from .get_backup import * from .get_backup_plan import * from .get_backup_plan_association import * +from .get_backup_vault import * from .get_data_source import * from .get_management_server import * from .management_server import * diff --git a/sdk/python/pulumi_gcp/backupdisasterrecovery/backup_plan.py b/sdk/python/pulumi_gcp/backupdisasterrecovery/backup_plan.py index faa3b9819f..7509f365ef 100644 --- a/sdk/python/pulumi_gcp/backupdisasterrecovery/backup_plan.py +++ b/sdk/python/pulumi_gcp/backupdisasterrecovery/backup_plan.py @@ -337,7 +337,7 @@ def __init__(__self__, my_backup_vault = gcp.backupdisasterrecovery.BackupVault("my_backup_vault", location="us-central1", - backup_vault_id="bv-bp-test", + backup_vault_id="backup-vault-simple-test", backup_minimum_enforced_retention_duration="100000s") my_backup_plan_1 = gcp.backupdisasterrecovery.BackupPlan("my-backup-plan-1", location="us-central1", @@ -410,7 +410,7 @@ def __init__(__self__, my_backup_vault = gcp.backupdisasterrecovery.BackupVault("my_backup_vault", location="us-central1", - backup_vault_id="bv-bp-test", + backup_vault_id="backup-vault-simple-test", backup_minimum_enforced_retention_duration="100000s") my_backup_plan_1 = gcp.backupdisasterrecovery.BackupPlan("my-backup-plan-1", location="us-central1", diff --git a/sdk/python/pulumi_gcp/backupdisasterrecovery/backup_vault.py b/sdk/python/pulumi_gcp/backupdisasterrecovery/backup_vault.py index 1cfff388f9..fd49da518d 100644 --- a/sdk/python/pulumi_gcp/backupdisasterrecovery/backup_vault.py +++ b/sdk/python/pulumi_gcp/backupdisasterrecovery/backup_vault.py @@ -808,6 +808,8 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ + Container to store and organize immutable and indelible backups. + ## Example Usage ### Backup Dr Backup Vault Full @@ -821,14 +823,14 @@ def __init__(__self__, backup_vault_id="backup-vault-test", description="This is a second backup vault built by Terraform.", backup_minimum_enforced_retention_duration="100000s", - labels={ - "foo": "bar1", - "bar": "baz1", - }, annotations={ "annotations1": "bar1", "annotations2": "baz1", }, + labels={ + "foo": "bar1", + "bar": "baz1", + }, force_update=True, access_restriction="WITHIN_ORGANIZATION", ignore_inactive_datasources=True, @@ -905,6 +907,8 @@ def __init__(__self__, args: BackupVaultArgs, opts: Optional[pulumi.ResourceOptions] = None): """ + Container to store and organize immutable and indelible backups. + ## Example Usage ### Backup Dr Backup Vault Full @@ -918,14 +922,14 @@ def __init__(__self__, backup_vault_id="backup-vault-test", description="This is a second backup vault built by Terraform.", backup_minimum_enforced_retention_duration="100000s", - labels={ - "foo": "bar1", - "bar": "baz1", - }, annotations={ "annotations1": "bar1", "annotations2": "baz1", }, + labels={ + "foo": "bar1", + "bar": "baz1", + }, force_update=True, access_restriction="WITHIN_ORGANIZATION", ignore_inactive_datasources=True, diff --git a/sdk/python/pulumi_gcp/backupdisasterrecovery/get_backup.py b/sdk/python/pulumi_gcp/backupdisasterrecovery/get_backup.py new file mode 100644 index 0000000000..be97925e06 --- /dev/null +++ b/sdk/python/pulumi_gcp/backupdisasterrecovery/get_backup.py @@ -0,0 +1,153 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs + +__all__ = [ + 'GetBackupResult', + 'AwaitableGetBackupResult', + 'get_backup', + 'get_backup_output', +] + +@pulumi.output_type +class GetBackupResult: + """ + A collection of values returned by getBackup. + """ + def __init__(__self__, backup_vault_id=None, backups=None, data_source_id=None, id=None, location=None, name=None, project=None): + if backup_vault_id and not isinstance(backup_vault_id, str): + raise TypeError("Expected argument 'backup_vault_id' to be a str") + pulumi.set(__self__, "backup_vault_id", backup_vault_id) + if backups and not isinstance(backups, list): + raise TypeError("Expected argument 'backups' to be a list") + pulumi.set(__self__, "backups", backups) + if data_source_id and not isinstance(data_source_id, str): + raise TypeError("Expected argument 'data_source_id' to be a str") + pulumi.set(__self__, "data_source_id", data_source_id) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if location and not isinstance(location, str): + raise TypeError("Expected argument 'location' to be a str") + pulumi.set(__self__, "location", location) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if project and not isinstance(project, str): + raise TypeError("Expected argument 'project' to be a str") + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="backupVaultId") + def backup_vault_id(self) -> str: + return pulumi.get(self, "backup_vault_id") + + @property + @pulumi.getter + def backups(self) -> Sequence['outputs.GetBackupBackupResult']: + return pulumi.get(self, "backups") + + @property + @pulumi.getter(name="dataSourceId") + def data_source_id(self) -> str: + return pulumi.get(self, "data_source_id") + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def location(self) -> str: + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> str: + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> str: + return pulumi.get(self, "project") + + +class AwaitableGetBackupResult(GetBackupResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetBackupResult( + backup_vault_id=self.backup_vault_id, + backups=self.backups, + data_source_id=self.data_source_id, + id=self.id, + location=self.location, + name=self.name, + project=self.project) + + +def get_backup(backup_vault_id: Optional[str] = None, + data_source_id: Optional[str] = None, + location: Optional[str] = None, + project: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetBackupResult: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + __args__['backupVaultId'] = backup_vault_id + __args__['dataSourceId'] = data_source_id + __args__['location'] = location + __args__['project'] = project + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('gcp:backupdisasterrecovery/getBackup:getBackup', __args__, opts=opts, typ=GetBackupResult).value + + return AwaitableGetBackupResult( + backup_vault_id=pulumi.get(__ret__, 'backup_vault_id'), + backups=pulumi.get(__ret__, 'backups'), + data_source_id=pulumi.get(__ret__, 'data_source_id'), + id=pulumi.get(__ret__, 'id'), + location=pulumi.get(__ret__, 'location'), + name=pulumi.get(__ret__, 'name'), + project=pulumi.get(__ret__, 'project')) +def get_backup_output(backup_vault_id: Optional[pulumi.Input[str]] = None, + data_source_id: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetBackupResult]: + """ + Use this data source to access information about an existing resource. + """ + __args__ = dict() + __args__['backupVaultId'] = backup_vault_id + __args__['dataSourceId'] = data_source_id + __args__['location'] = location + __args__['project'] = project + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('gcp:backupdisasterrecovery/getBackup:getBackup', __args__, opts=opts, typ=GetBackupResult) + return __ret__.apply(lambda __response__: GetBackupResult( + backup_vault_id=pulumi.get(__response__, 'backup_vault_id'), + backups=pulumi.get(__response__, 'backups'), + data_source_id=pulumi.get(__response__, 'data_source_id'), + id=pulumi.get(__response__, 'id'), + location=pulumi.get(__response__, 'location'), + name=pulumi.get(__response__, 'name'), + project=pulumi.get(__response__, 'project'))) diff --git a/sdk/python/pulumi_gcp/backupdisasterrecovery/get_backup_vault.py b/sdk/python/pulumi_gcp/backupdisasterrecovery/get_backup_vault.py new file mode 100644 index 0000000000..76888b43fb --- /dev/null +++ b/sdk/python/pulumi_gcp/backupdisasterrecovery/get_backup_vault.py @@ -0,0 +1,415 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = [ + 'GetBackupVaultResult', + 'AwaitableGetBackupVaultResult', + 'get_backup_vault', + 'get_backup_vault_output', +] + +@pulumi.output_type +class GetBackupVaultResult: + """ + A collection of values returned by getBackupVault. + """ + def __init__(__self__, access_restriction=None, allow_missing=None, annotations=None, backup_count=None, backup_minimum_enforced_retention_duration=None, backup_vault_id=None, create_time=None, deletable=None, description=None, effective_annotations=None, effective_labels=None, effective_time=None, etag=None, force_delete=None, force_update=None, id=None, ignore_backup_plan_references=None, ignore_inactive_datasources=None, labels=None, location=None, name=None, project=None, pulumi_labels=None, service_account=None, state=None, total_stored_bytes=None, uid=None, update_time=None): + if access_restriction and not isinstance(access_restriction, str): + raise TypeError("Expected argument 'access_restriction' to be a str") + pulumi.set(__self__, "access_restriction", access_restriction) + if allow_missing and not isinstance(allow_missing, bool): + raise TypeError("Expected argument 'allow_missing' to be a bool") + pulumi.set(__self__, "allow_missing", allow_missing) + if annotations and not isinstance(annotations, dict): + raise TypeError("Expected argument 'annotations' to be a dict") + pulumi.set(__self__, "annotations", annotations) + if backup_count and not isinstance(backup_count, str): + raise TypeError("Expected argument 'backup_count' to be a str") + pulumi.set(__self__, "backup_count", backup_count) + if backup_minimum_enforced_retention_duration and not isinstance(backup_minimum_enforced_retention_duration, str): + raise TypeError("Expected argument 'backup_minimum_enforced_retention_duration' to be a str") + pulumi.set(__self__, "backup_minimum_enforced_retention_duration", backup_minimum_enforced_retention_duration) + if backup_vault_id and not isinstance(backup_vault_id, str): + raise TypeError("Expected argument 'backup_vault_id' to be a str") + pulumi.set(__self__, "backup_vault_id", backup_vault_id) + if create_time and not isinstance(create_time, str): + raise TypeError("Expected argument 'create_time' to be a str") + pulumi.set(__self__, "create_time", create_time) + if deletable and not isinstance(deletable, bool): + raise TypeError("Expected argument 'deletable' to be a bool") + pulumi.set(__self__, "deletable", deletable) + if description and not isinstance(description, str): + raise TypeError("Expected argument 'description' to be a str") + pulumi.set(__self__, "description", description) + if effective_annotations and not isinstance(effective_annotations, dict): + raise TypeError("Expected argument 'effective_annotations' to be a dict") + pulumi.set(__self__, "effective_annotations", effective_annotations) + if effective_labels and not isinstance(effective_labels, dict): + raise TypeError("Expected argument 'effective_labels' to be a dict") + pulumi.set(__self__, "effective_labels", effective_labels) + if effective_time and not isinstance(effective_time, str): + raise TypeError("Expected argument 'effective_time' to be a str") + pulumi.set(__self__, "effective_time", effective_time) + if etag and not isinstance(etag, str): + raise TypeError("Expected argument 'etag' to be a str") + pulumi.set(__self__, "etag", etag) + if force_delete and not isinstance(force_delete, bool): + raise TypeError("Expected argument 'force_delete' to be a bool") + pulumi.set(__self__, "force_delete", force_delete) + if force_update and not isinstance(force_update, bool): + raise TypeError("Expected argument 'force_update' to be a bool") + pulumi.set(__self__, "force_update", force_update) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if ignore_backup_plan_references and not isinstance(ignore_backup_plan_references, bool): + raise TypeError("Expected argument 'ignore_backup_plan_references' to be a bool") + pulumi.set(__self__, "ignore_backup_plan_references", ignore_backup_plan_references) + if ignore_inactive_datasources and not isinstance(ignore_inactive_datasources, bool): + raise TypeError("Expected argument 'ignore_inactive_datasources' to be a bool") + pulumi.set(__self__, "ignore_inactive_datasources", ignore_inactive_datasources) + if labels and not isinstance(labels, dict): + raise TypeError("Expected argument 'labels' to be a dict") + pulumi.set(__self__, "labels", labels) + if location and not isinstance(location, str): + raise TypeError("Expected argument 'location' to be a str") + pulumi.set(__self__, "location", location) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if project and not isinstance(project, str): + raise TypeError("Expected argument 'project' to be a str") + pulumi.set(__self__, "project", project) + if pulumi_labels and not isinstance(pulumi_labels, dict): + raise TypeError("Expected argument 'pulumi_labels' to be a dict") + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if service_account and not isinstance(service_account, str): + raise TypeError("Expected argument 'service_account' to be a str") + pulumi.set(__self__, "service_account", service_account) + if state and not isinstance(state, str): + raise TypeError("Expected argument 'state' to be a str") + pulumi.set(__self__, "state", state) + if total_stored_bytes and not isinstance(total_stored_bytes, str): + raise TypeError("Expected argument 'total_stored_bytes' to be a str") + pulumi.set(__self__, "total_stored_bytes", total_stored_bytes) + if uid and not isinstance(uid, str): + raise TypeError("Expected argument 'uid' to be a str") + pulumi.set(__self__, "uid", uid) + if update_time and not isinstance(update_time, str): + raise TypeError("Expected argument 'update_time' to be a str") + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="accessRestriction") + def access_restriction(self) -> str: + return pulumi.get(self, "access_restriction") + + @property + @pulumi.getter(name="allowMissing") + def allow_missing(self) -> bool: + return pulumi.get(self, "allow_missing") + + @property + @pulumi.getter + def annotations(self) -> Mapping[str, str]: + return pulumi.get(self, "annotations") + + @property + @pulumi.getter(name="backupCount") + def backup_count(self) -> str: + return pulumi.get(self, "backup_count") + + @property + @pulumi.getter(name="backupMinimumEnforcedRetentionDuration") + def backup_minimum_enforced_retention_duration(self) -> str: + return pulumi.get(self, "backup_minimum_enforced_retention_duration") + + @property + @pulumi.getter(name="backupVaultId") + def backup_vault_id(self) -> str: + return pulumi.get(self, "backup_vault_id") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> str: + return pulumi.get(self, "create_time") + + @property + @pulumi.getter + def deletable(self) -> bool: + return pulumi.get(self, "deletable") + + @property + @pulumi.getter + def description(self) -> str: + return pulumi.get(self, "description") + + @property + @pulumi.getter(name="effectiveAnnotations") + def effective_annotations(self) -> Mapping[str, str]: + return pulumi.get(self, "effective_annotations") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Mapping[str, str]: + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter(name="effectiveTime") + def effective_time(self) -> str: + return pulumi.get(self, "effective_time") + + @property + @pulumi.getter + def etag(self) -> str: + return pulumi.get(self, "etag") + + @property + @pulumi.getter(name="forceDelete") + def force_delete(self) -> bool: + return pulumi.get(self, "force_delete") + + @property + @pulumi.getter(name="forceUpdate") + def force_update(self) -> bool: + return pulumi.get(self, "force_update") + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="ignoreBackupPlanReferences") + def ignore_backup_plan_references(self) -> bool: + return pulumi.get(self, "ignore_backup_plan_references") + + @property + @pulumi.getter(name="ignoreInactiveDatasources") + def ignore_inactive_datasources(self) -> bool: + return pulumi.get(self, "ignore_inactive_datasources") + + @property + @pulumi.getter + def labels(self) -> Mapping[str, str]: + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> str: + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> str: + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> Optional[str]: + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Mapping[str, str]: + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter(name="serviceAccount") + def service_account(self) -> str: + return pulumi.get(self, "service_account") + + @property + @pulumi.getter + def state(self) -> str: + return pulumi.get(self, "state") + + @property + @pulumi.getter(name="totalStoredBytes") + def total_stored_bytes(self) -> str: + return pulumi.get(self, "total_stored_bytes") + + @property + @pulumi.getter + def uid(self) -> str: + return pulumi.get(self, "uid") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> str: + return pulumi.get(self, "update_time") + + +class AwaitableGetBackupVaultResult(GetBackupVaultResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetBackupVaultResult( + access_restriction=self.access_restriction, + allow_missing=self.allow_missing, + annotations=self.annotations, + backup_count=self.backup_count, + backup_minimum_enforced_retention_duration=self.backup_minimum_enforced_retention_duration, + backup_vault_id=self.backup_vault_id, + create_time=self.create_time, + deletable=self.deletable, + description=self.description, + effective_annotations=self.effective_annotations, + effective_labels=self.effective_labels, + effective_time=self.effective_time, + etag=self.etag, + force_delete=self.force_delete, + force_update=self.force_update, + id=self.id, + ignore_backup_plan_references=self.ignore_backup_plan_references, + ignore_inactive_datasources=self.ignore_inactive_datasources, + labels=self.labels, + location=self.location, + name=self.name, + project=self.project, + pulumi_labels=self.pulumi_labels, + service_account=self.service_account, + state=self.state, + total_stored_bytes=self.total_stored_bytes, + uid=self.uid, + update_time=self.update_time) + + +def get_backup_vault(backup_vault_id: Optional[str] = None, + location: Optional[str] = None, + project: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetBackupVaultResult: + """ + A Backup and DRBackupVault. + + ## Example Usage + + ```python + import pulumi + import pulumi_gcp as gcp + + my_backup_vault = gcp.backupdisasterrecovery.get_backup_vault(location="us-central1", + backup_vault_id="bv-1") + ``` + + + :param str backup_vault_id: The id of Backup Vault resource. + + - - - + :param str location: The location in which the Backup Vault resource belongs. + :param str project: The project in which the resource belongs. If it + is not provided, the provider project is used. + """ + __args__ = dict() + __args__['backupVaultId'] = backup_vault_id + __args__['location'] = location + __args__['project'] = project + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('gcp:backupdisasterrecovery/getBackupVault:getBackupVault', __args__, opts=opts, typ=GetBackupVaultResult).value + + return AwaitableGetBackupVaultResult( + access_restriction=pulumi.get(__ret__, 'access_restriction'), + allow_missing=pulumi.get(__ret__, 'allow_missing'), + annotations=pulumi.get(__ret__, 'annotations'), + backup_count=pulumi.get(__ret__, 'backup_count'), + backup_minimum_enforced_retention_duration=pulumi.get(__ret__, 'backup_minimum_enforced_retention_duration'), + backup_vault_id=pulumi.get(__ret__, 'backup_vault_id'), + create_time=pulumi.get(__ret__, 'create_time'), + deletable=pulumi.get(__ret__, 'deletable'), + description=pulumi.get(__ret__, 'description'), + effective_annotations=pulumi.get(__ret__, 'effective_annotations'), + effective_labels=pulumi.get(__ret__, 'effective_labels'), + effective_time=pulumi.get(__ret__, 'effective_time'), + etag=pulumi.get(__ret__, 'etag'), + force_delete=pulumi.get(__ret__, 'force_delete'), + force_update=pulumi.get(__ret__, 'force_update'), + id=pulumi.get(__ret__, 'id'), + ignore_backup_plan_references=pulumi.get(__ret__, 'ignore_backup_plan_references'), + ignore_inactive_datasources=pulumi.get(__ret__, 'ignore_inactive_datasources'), + labels=pulumi.get(__ret__, 'labels'), + location=pulumi.get(__ret__, 'location'), + name=pulumi.get(__ret__, 'name'), + project=pulumi.get(__ret__, 'project'), + pulumi_labels=pulumi.get(__ret__, 'pulumi_labels'), + service_account=pulumi.get(__ret__, 'service_account'), + state=pulumi.get(__ret__, 'state'), + total_stored_bytes=pulumi.get(__ret__, 'total_stored_bytes'), + uid=pulumi.get(__ret__, 'uid'), + update_time=pulumi.get(__ret__, 'update_time')) +def get_backup_vault_output(backup_vault_id: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[Optional[str]]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetBackupVaultResult]: + """ + A Backup and DRBackupVault. + + ## Example Usage + + ```python + import pulumi + import pulumi_gcp as gcp + + my_backup_vault = gcp.backupdisasterrecovery.get_backup_vault(location="us-central1", + backup_vault_id="bv-1") + ``` + + + :param str backup_vault_id: The id of Backup Vault resource. + + - - - + :param str location: The location in which the Backup Vault resource belongs. + :param str project: The project in which the resource belongs. If it + is not provided, the provider project is used. + """ + __args__ = dict() + __args__['backupVaultId'] = backup_vault_id + __args__['location'] = location + __args__['project'] = project + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('gcp:backupdisasterrecovery/getBackupVault:getBackupVault', __args__, opts=opts, typ=GetBackupVaultResult) + return __ret__.apply(lambda __response__: GetBackupVaultResult( + access_restriction=pulumi.get(__response__, 'access_restriction'), + allow_missing=pulumi.get(__response__, 'allow_missing'), + annotations=pulumi.get(__response__, 'annotations'), + backup_count=pulumi.get(__response__, 'backup_count'), + backup_minimum_enforced_retention_duration=pulumi.get(__response__, 'backup_minimum_enforced_retention_duration'), + backup_vault_id=pulumi.get(__response__, 'backup_vault_id'), + create_time=pulumi.get(__response__, 'create_time'), + deletable=pulumi.get(__response__, 'deletable'), + description=pulumi.get(__response__, 'description'), + effective_annotations=pulumi.get(__response__, 'effective_annotations'), + effective_labels=pulumi.get(__response__, 'effective_labels'), + effective_time=pulumi.get(__response__, 'effective_time'), + etag=pulumi.get(__response__, 'etag'), + force_delete=pulumi.get(__response__, 'force_delete'), + force_update=pulumi.get(__response__, 'force_update'), + id=pulumi.get(__response__, 'id'), + ignore_backup_plan_references=pulumi.get(__response__, 'ignore_backup_plan_references'), + ignore_inactive_datasources=pulumi.get(__response__, 'ignore_inactive_datasources'), + labels=pulumi.get(__response__, 'labels'), + location=pulumi.get(__response__, 'location'), + name=pulumi.get(__response__, 'name'), + project=pulumi.get(__response__, 'project'), + pulumi_labels=pulumi.get(__response__, 'pulumi_labels'), + service_account=pulumi.get(__response__, 'service_account'), + state=pulumi.get(__response__, 'state'), + total_stored_bytes=pulumi.get(__response__, 'total_stored_bytes'), + uid=pulumi.get(__response__, 'uid'), + update_time=pulumi.get(__response__, 'update_time'))) diff --git a/sdk/python/pulumi_gcp/backupdisasterrecovery/outputs.py b/sdk/python/pulumi_gcp/backupdisasterrecovery/outputs.py index afe9dc3ea0..7ea8aee1db 100644 --- a/sdk/python/pulumi_gcp/backupdisasterrecovery/outputs.py +++ b/sdk/python/pulumi_gcp/backupdisasterrecovery/outputs.py @@ -24,6 +24,7 @@ 'BackupPlanBackupRuleStandardScheduleWeekDayOfMonth', 'ManagementServerManagementUri', 'ManagementServerNetwork', + 'GetBackupBackupResult', 'GetBackupPlanAssociationRulesConfigInfoResult', 'GetBackupPlanAssociationRulesConfigInfoLastBackupErrorResult', 'GetBackupPlanBackupRuleResult', @@ -564,6 +565,68 @@ def peering_mode(self) -> Optional[str]: return pulumi.get(self, "peering_mode") +@pulumi.output_type +class GetBackupBackupResult(dict): + def __init__(__self__, *, + backup_id: str, + backup_vault_id: str, + data_source_id: str, + location: str, + name: str): + """ + :param str backup_id: Id of the requesting object, Backup. + :param str backup_vault_id: Name of the Backup Vault associated with Backup. + :param str data_source_id: Name of the Data Source associated with Backup. + :param str location: Location of the resource. + :param str name: Name of the resource. + """ + pulumi.set(__self__, "backup_id", backup_id) + pulumi.set(__self__, "backup_vault_id", backup_vault_id) + pulumi.set(__self__, "data_source_id", data_source_id) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter(name="backupId") + def backup_id(self) -> str: + """ + Id of the requesting object, Backup. + """ + return pulumi.get(self, "backup_id") + + @property + @pulumi.getter(name="backupVaultId") + def backup_vault_id(self) -> str: + """ + Name of the Backup Vault associated with Backup. + """ + return pulumi.get(self, "backup_vault_id") + + @property + @pulumi.getter(name="dataSourceId") + def data_source_id(self) -> str: + """ + Name of the Data Source associated with Backup. + """ + return pulumi.get(self, "data_source_id") + + @property + @pulumi.getter + def location(self) -> str: + """ + Location of the resource. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> str: + """ + Name of the resource. + """ + return pulumi.get(self, "name") + + @pulumi.output_type class GetBackupPlanAssociationRulesConfigInfoResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/bigquery/app_profile.py b/sdk/python/pulumi_gcp/bigquery/app_profile.py index 46caa6a7cf..7e45c86fbb 100644 --- a/sdk/python/pulumi_gcp/bigquery/app_profile.py +++ b/sdk/python/pulumi_gcp/bigquery/app_profile.py @@ -29,6 +29,7 @@ def __init__(__self__, *, multi_cluster_routing_cluster_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, multi_cluster_routing_use_any: Optional[pulumi.Input[bool]] = None, project: Optional[pulumi.Input[str]] = None, + row_affinity: Optional[pulumi.Input[bool]] = None, single_cluster_routing: Optional[pulumi.Input['AppProfileSingleClusterRoutingArgs']] = None, standard_isolation: Optional[pulumi.Input['AppProfileStandardIsolationArgs']] = None): """ @@ -49,6 +50,11 @@ def __init__(__self__, *, consistency to improve availability. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. + :param pulumi.Input[bool] row_affinity: 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. :param pulumi.Input['AppProfileSingleClusterRoutingArgs'] single_cluster_routing: Use a single-cluster routing policy. Structure is documented below. :param pulumi.Input['AppProfileStandardIsolationArgs'] standard_isolation: The standard options used for isolating this app profile's traffic from other use cases. @@ -69,6 +75,8 @@ def __init__(__self__, *, pulumi.set(__self__, "multi_cluster_routing_use_any", multi_cluster_routing_use_any) if project is not None: pulumi.set(__self__, "project", project) + if row_affinity is not None: + pulumi.set(__self__, "row_affinity", row_affinity) if single_cluster_routing is not None: pulumi.set(__self__, "single_cluster_routing", single_cluster_routing) if standard_isolation is not None: @@ -178,6 +186,22 @@ def project(self) -> Optional[pulumi.Input[str]]: def project(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "project", value) + @property + @pulumi.getter(name="rowAffinity") + def row_affinity(self) -> Optional[pulumi.Input[bool]]: + """ + 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. + """ + return pulumi.get(self, "row_affinity") + + @row_affinity.setter + def row_affinity(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "row_affinity", value) + @property @pulumi.getter(name="singleClusterRouting") def single_cluster_routing(self) -> Optional[pulumi.Input['AppProfileSingleClusterRoutingArgs']]: @@ -217,6 +241,7 @@ def __init__(__self__, *, multi_cluster_routing_use_any: Optional[pulumi.Input[bool]] = None, name: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + row_affinity: Optional[pulumi.Input[bool]] = None, single_cluster_routing: Optional[pulumi.Input['AppProfileSingleClusterRoutingArgs']] = None, standard_isolation: Optional[pulumi.Input['AppProfileStandardIsolationArgs']] = None): """ @@ -238,6 +263,11 @@ def __init__(__self__, *, :param pulumi.Input[str] name: The unique name of the requested app profile. Values are of the form `projects//instances//appProfiles/`. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. + :param pulumi.Input[bool] row_affinity: 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. :param pulumi.Input['AppProfileSingleClusterRoutingArgs'] single_cluster_routing: Use a single-cluster routing policy. Structure is documented below. :param pulumi.Input['AppProfileStandardIsolationArgs'] standard_isolation: The standard options used for isolating this app profile's traffic from other use cases. @@ -261,6 +291,8 @@ def __init__(__self__, *, pulumi.set(__self__, "name", name) if project is not None: pulumi.set(__self__, "project", project) + if row_affinity is not None: + pulumi.set(__self__, "row_affinity", row_affinity) if single_cluster_routing is not None: pulumi.set(__self__, "single_cluster_routing", single_cluster_routing) if standard_isolation is not None: @@ -382,6 +414,22 @@ def project(self) -> Optional[pulumi.Input[str]]: def project(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "project", value) + @property + @pulumi.getter(name="rowAffinity") + def row_affinity(self) -> Optional[pulumi.Input[bool]]: + """ + 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. + """ + return pulumi.get(self, "row_affinity") + + @row_affinity.setter + def row_affinity(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "row_affinity", value) + @property @pulumi.getter(name="singleClusterRouting") def single_cluster_routing(self) -> Optional[pulumi.Input['AppProfileSingleClusterRoutingArgs']]: @@ -422,6 +470,7 @@ def __init__(__self__, multi_cluster_routing_cluster_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, multi_cluster_routing_use_any: Optional[pulumi.Input[bool]] = None, project: Optional[pulumi.Input[str]] = None, + row_affinity: Optional[pulumi.Input[bool]] = None, single_cluster_routing: Optional[pulumi.Input[Union['AppProfileSingleClusterRoutingArgs', 'AppProfileSingleClusterRoutingArgsDict']]] = None, standard_isolation: Optional[pulumi.Input[Union['AppProfileStandardIsolationArgs', 'AppProfileStandardIsolationArgsDict']]] = None, __props__=None): @@ -602,6 +651,11 @@ def __init__(__self__, consistency to improve availability. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. + :param pulumi.Input[bool] row_affinity: 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. :param pulumi.Input[Union['AppProfileSingleClusterRoutingArgs', 'AppProfileSingleClusterRoutingArgsDict']] single_cluster_routing: Use a single-cluster routing policy. Structure is documented below. :param pulumi.Input[Union['AppProfileStandardIsolationArgs', 'AppProfileStandardIsolationArgsDict']] standard_isolation: The standard options used for isolating this app profile's traffic from other use cases. @@ -795,6 +849,7 @@ def _internal_init(__self__, multi_cluster_routing_cluster_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, multi_cluster_routing_use_any: Optional[pulumi.Input[bool]] = None, project: Optional[pulumi.Input[str]] = None, + row_affinity: Optional[pulumi.Input[bool]] = None, single_cluster_routing: Optional[pulumi.Input[Union['AppProfileSingleClusterRoutingArgs', 'AppProfileSingleClusterRoutingArgsDict']]] = None, standard_isolation: Optional[pulumi.Input[Union['AppProfileStandardIsolationArgs', 'AppProfileStandardIsolationArgsDict']]] = None, __props__=None): @@ -816,6 +871,7 @@ def _internal_init(__self__, __props__.__dict__["multi_cluster_routing_cluster_ids"] = multi_cluster_routing_cluster_ids __props__.__dict__["multi_cluster_routing_use_any"] = multi_cluster_routing_use_any __props__.__dict__["project"] = project + __props__.__dict__["row_affinity"] = row_affinity __props__.__dict__["single_cluster_routing"] = single_cluster_routing __props__.__dict__["standard_isolation"] = standard_isolation __props__.__dict__["name"] = None @@ -838,6 +894,7 @@ def get(resource_name: str, multi_cluster_routing_use_any: Optional[pulumi.Input[bool]] = None, name: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + row_affinity: Optional[pulumi.Input[bool]] = None, single_cluster_routing: Optional[pulumi.Input[Union['AppProfileSingleClusterRoutingArgs', 'AppProfileSingleClusterRoutingArgsDict']]] = None, standard_isolation: Optional[pulumi.Input[Union['AppProfileStandardIsolationArgs', 'AppProfileStandardIsolationArgsDict']]] = None) -> 'AppProfile': """ @@ -864,6 +921,11 @@ def get(resource_name: str, :param pulumi.Input[str] name: The unique name of the requested app profile. Values are of the form `projects//instances//appProfiles/`. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. + :param pulumi.Input[bool] row_affinity: 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. :param pulumi.Input[Union['AppProfileSingleClusterRoutingArgs', 'AppProfileSingleClusterRoutingArgsDict']] single_cluster_routing: Use a single-cluster routing policy. Structure is documented below. :param pulumi.Input[Union['AppProfileStandardIsolationArgs', 'AppProfileStandardIsolationArgsDict']] standard_isolation: The standard options used for isolating this app profile's traffic from other use cases. @@ -882,6 +944,7 @@ def get(resource_name: str, __props__.__dict__["multi_cluster_routing_use_any"] = multi_cluster_routing_use_any __props__.__dict__["name"] = name __props__.__dict__["project"] = project + __props__.__dict__["row_affinity"] = row_affinity __props__.__dict__["single_cluster_routing"] = single_cluster_routing __props__.__dict__["standard_isolation"] = standard_isolation return AppProfile(resource_name, opts=opts, __props__=__props__) @@ -966,6 +1029,18 @@ def project(self) -> pulumi.Output[str]: """ return pulumi.get(self, "project") + @property + @pulumi.getter(name="rowAffinity") + def row_affinity(self) -> pulumi.Output[Optional[bool]]: + """ + 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. + """ + return pulumi.get(self, "row_affinity") + @property @pulumi.getter(name="singleClusterRouting") def single_cluster_routing(self) -> pulumi.Output[Optional['outputs.AppProfileSingleClusterRouting']]: diff --git a/sdk/python/pulumi_gcp/billing/_inputs.py b/sdk/python/pulumi_gcp/billing/_inputs.py index 49a8668a9f..e7fc83df45 100644 --- a/sdk/python/pulumi_gcp/billing/_inputs.py +++ b/sdk/python/pulumi_gcp/billing/_inputs.py @@ -471,7 +471,7 @@ class BudgetBudgetFilterArgsDict(TypedDict): 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. """ credit_types_treatment: NotRequired[pulumi.Input[str]] """ @@ -524,7 +524,7 @@ class BudgetBudgetFilterArgsDict(TypedDict): 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. """ elif False: BudgetBudgetFilterArgsDict: TypeAlias = Mapping[str, Any] @@ -550,7 +550,7 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input[str]]] credit_types: 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. :param pulumi.Input[str] credit_types_treatment: Specifies how credits should be treated when determining spend for threshold calculations. Default value is `INCLUDE_ALL_CREDITS`. @@ -582,7 +582,7 @@ def __init__(__self__, *, 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. """ if calendar_period is not None: pulumi.set(__self__, "calendar_period", calendar_period) @@ -626,7 +626,7 @@ def credit_types(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: 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. """ return pulumi.get(self, "credit_types") @@ -735,7 +735,7 @@ def subaccounts(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: 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. """ return pulumi.get(self, "subaccounts") diff --git a/sdk/python/pulumi_gcp/billing/outputs.py b/sdk/python/pulumi_gcp/billing/outputs.py index 17270379a4..ea7bad1c6f 100644 --- a/sdk/python/pulumi_gcp/billing/outputs.py +++ b/sdk/python/pulumi_gcp/billing/outputs.py @@ -388,7 +388,7 @@ def __init__(__self__, *, :param Sequence[str] credit_types: 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. :param str credit_types_treatment: Specifies how credits should be treated when determining spend for threshold calculations. Default value is `INCLUDE_ALL_CREDITS`. @@ -420,7 +420,7 @@ def __init__(__self__, *, 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. """ if calendar_period is not None: pulumi.set(__self__, "calendar_period", calendar_period) @@ -460,7 +460,7 @@ def credit_types(self) -> Optional[Sequence[str]]: 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. """ return pulumi.get(self, "credit_types") @@ -541,7 +541,7 @@ def subaccounts(self) -> Optional[Sequence[str]]: 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. """ return pulumi.get(self, "subaccounts") diff --git a/sdk/python/pulumi_gcp/certificateauthority/_inputs.py b/sdk/python/pulumi_gcp/certificateauthority/_inputs.py index 7832c2fef4..7dc1411571 100644 --- a/sdk/python/pulumi_gcp/certificateauthority/_inputs.py +++ b/sdk/python/pulumi_gcp/certificateauthority/_inputs.py @@ -667,7 +667,7 @@ def uris(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): class AuthorityConfigSubjectKeyIdArgsDict(TypedDict): key_id: NotRequired[pulumi.Input[str]] """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. The `x509_config` block supports: """ @@ -679,7 +679,7 @@ class AuthorityConfigSubjectKeyIdArgs: def __init__(__self__, *, key_id: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input[str] key_id: The value of the KeyId in lowercase hexidecimal. + :param pulumi.Input[str] key_id: The value of the KeyId in lowercase hexadecimal. The `x509_config` block supports: """ @@ -690,7 +690,7 @@ def __init__(__self__, *, @pulumi.getter(name="keyId") def key_id(self) -> Optional[pulumi.Input[str]]: """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. The `x509_config` block supports: """ @@ -4672,7 +4672,7 @@ def object_id_paths(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[int class CertificateCertificateDescriptionSubjectKeyIdArgsDict(TypedDict): key_id: NotRequired[pulumi.Input[str]] """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. """ elif False: CertificateCertificateDescriptionSubjectKeyIdArgsDict: TypeAlias = Mapping[str, Any] @@ -4682,7 +4682,7 @@ class CertificateCertificateDescriptionSubjectKeyIdArgs: def __init__(__self__, *, key_id: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input[str] key_id: The value of the KeyId in lowercase hexidecimal. + :param pulumi.Input[str] key_id: The value of the KeyId in lowercase hexadecimal. """ if key_id is not None: pulumi.set(__self__, "key_id", key_id) @@ -4691,7 +4691,7 @@ def __init__(__self__, *, @pulumi.getter(name="keyId") def key_id(self) -> Optional[pulumi.Input[str]]: """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. """ return pulumi.get(self, "key_id") @@ -6253,7 +6253,7 @@ def uris(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): class CertificateConfigSubjectKeyIdArgsDict(TypedDict): key_id: NotRequired[pulumi.Input[str]] """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. """ elif False: CertificateConfigSubjectKeyIdArgsDict: TypeAlias = Mapping[str, Any] @@ -6263,7 +6263,7 @@ class CertificateConfigSubjectKeyIdArgs: def __init__(__self__, *, key_id: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input[str] key_id: The value of the KeyId in lowercase hexidecimal. + :param pulumi.Input[str] key_id: The value of the KeyId in lowercase hexadecimal. """ if key_id is not None: pulumi.set(__self__, "key_id", key_id) @@ -6272,7 +6272,7 @@ def __init__(__self__, *, @pulumi.getter(name="keyId") def key_id(self) -> Optional[pulumi.Input[str]]: """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. """ return pulumi.get(self, "key_id") diff --git a/sdk/python/pulumi_gcp/certificateauthority/outputs.py b/sdk/python/pulumi_gcp/certificateauthority/outputs.py index 75c178a0cd..15d585276a 100644 --- a/sdk/python/pulumi_gcp/certificateauthority/outputs.py +++ b/sdk/python/pulumi_gcp/certificateauthority/outputs.py @@ -529,7 +529,7 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, key_id: Optional[str] = None): """ - :param str key_id: The value of the KeyId in lowercase hexidecimal. + :param str key_id: The value of the KeyId in lowercase hexadecimal. The `x509_config` block supports: """ @@ -540,7 +540,7 @@ def __init__(__self__, *, @pulumi.getter(name="keyId") def key_id(self) -> Optional[str]: """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. The `x509_config` block supports: """ @@ -3778,7 +3778,7 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, key_id: Optional[str] = None): """ - :param str key_id: The value of the KeyId in lowercase hexidecimal. + :param str key_id: The value of the KeyId in lowercase hexadecimal. """ if key_id is not None: pulumi.set(__self__, "key_id", key_id) @@ -3787,7 +3787,7 @@ def __init__(__self__, *, @pulumi.getter(name="keyId") def key_id(self) -> Optional[str]: """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. """ return pulumi.get(self, "key_id") @@ -5060,7 +5060,7 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, key_id: Optional[str] = None): """ - :param str key_id: The value of the KeyId in lowercase hexidecimal. + :param str key_id: The value of the KeyId in lowercase hexadecimal. """ if key_id is not None: pulumi.set(__self__, "key_id", key_id) @@ -5069,7 +5069,7 @@ def __init__(__self__, *, @pulumi.getter(name="keyId") def key_id(self) -> Optional[str]: """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. """ return pulumi.get(self, "key_id") @@ -7196,7 +7196,7 @@ class GetAuthorityConfigSubjectKeyIdResult(dict): def __init__(__self__, *, key_id: str): """ - :param str key_id: The value of the KeyId in lowercase hexidecimal. + :param str key_id: The value of the KeyId in lowercase hexadecimal. """ pulumi.set(__self__, "key_id", key_id) @@ -7204,7 +7204,7 @@ def __init__(__self__, *, @pulumi.getter(name="keyId") def key_id(self) -> str: """ - The value of the KeyId in lowercase hexidecimal. + The value of the KeyId in lowercase hexadecimal. """ return pulumi.get(self, "key_id") diff --git a/sdk/python/pulumi_gcp/cloudbuild/_inputs.py b/sdk/python/pulumi_gcp/cloudbuild/_inputs.py index eceb267dac..d031c2c97f 100644 --- a/sdk/python/pulumi_gcp/cloudbuild/_inputs.py +++ b/sdk/python/pulumi_gcp/cloudbuild/_inputs.py @@ -85,6 +85,8 @@ 'TriggerWebhookConfigArgsDict', 'WorkerPoolNetworkConfigArgs', 'WorkerPoolNetworkConfigArgsDict', + 'WorkerPoolPrivateServiceConnectArgs', + 'WorkerPoolPrivateServiceConnectArgsDict', 'WorkerPoolWorkerConfigArgs', 'WorkerPoolWorkerConfigArgsDict', ] @@ -3957,6 +3959,57 @@ def peered_network_ip_range(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "peered_network_ip_range", value) +if not MYPY: + class WorkerPoolPrivateServiceConnectArgsDict(TypedDict): + network_attachment: pulumi.Input[str] + """ + 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) + """ + route_all_traffic: NotRequired[pulumi.Input[bool]] + """ + 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. + """ +elif False: + WorkerPoolPrivateServiceConnectArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class WorkerPoolPrivateServiceConnectArgs: + def __init__(__self__, *, + network_attachment: pulumi.Input[str], + route_all_traffic: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[str] network_attachment: 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) + :param pulumi.Input[bool] route_all_traffic: 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. + """ + pulumi.set(__self__, "network_attachment", network_attachment) + if route_all_traffic is not None: + pulumi.set(__self__, "route_all_traffic", route_all_traffic) + + @property + @pulumi.getter(name="networkAttachment") + def network_attachment(self) -> pulumi.Input[str]: + """ + 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) + """ + return pulumi.get(self, "network_attachment") + + @network_attachment.setter + def network_attachment(self, value: pulumi.Input[str]): + pulumi.set(self, "network_attachment", value) + + @property + @pulumi.getter(name="routeAllTraffic") + def route_all_traffic(self) -> Optional[pulumi.Input[bool]]: + """ + 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. + """ + return pulumi.get(self, "route_all_traffic") + + @route_all_traffic.setter + def route_all_traffic(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "route_all_traffic", value) + + if not MYPY: class WorkerPoolWorkerConfigArgsDict(TypedDict): disk_size_gb: NotRequired[pulumi.Input[int]] diff --git a/sdk/python/pulumi_gcp/cloudbuild/outputs.py b/sdk/python/pulumi_gcp/cloudbuild/outputs.py index 30da4e041b..6d62bc280d 100644 --- a/sdk/python/pulumi_gcp/cloudbuild/outputs.py +++ b/sdk/python/pulumi_gcp/cloudbuild/outputs.py @@ -51,6 +51,7 @@ 'TriggerTriggerTemplate', 'TriggerWebhookConfig', 'WorkerPoolNetworkConfig', + 'WorkerPoolPrivateServiceConnect', 'WorkerPoolWorkerConfig', 'GetTriggerApprovalConfigResult', 'GetTriggerBitbucketServerTriggerConfigResult', @@ -3008,6 +3009,55 @@ def peered_network_ip_range(self) -> Optional[str]: return pulumi.get(self, "peered_network_ip_range") +@pulumi.output_type +class WorkerPoolPrivateServiceConnect(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "networkAttachment": + suggest = "network_attachment" + elif key == "routeAllTraffic": + suggest = "route_all_traffic" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in WorkerPoolPrivateServiceConnect. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + WorkerPoolPrivateServiceConnect.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + WorkerPoolPrivateServiceConnect.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + network_attachment: str, + route_all_traffic: Optional[bool] = None): + """ + :param str network_attachment: 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) + :param bool route_all_traffic: 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. + """ + pulumi.set(__self__, "network_attachment", network_attachment) + if route_all_traffic is not None: + pulumi.set(__self__, "route_all_traffic", route_all_traffic) + + @property + @pulumi.getter(name="networkAttachment") + def network_attachment(self) -> str: + """ + 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) + """ + return pulumi.get(self, "network_attachment") + + @property + @pulumi.getter(name="routeAllTraffic") + def route_all_traffic(self) -> Optional[bool]: + """ + 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. + """ + return pulumi.get(self, "route_all_traffic") + + @pulumi.output_type class WorkerPoolWorkerConfig(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/cloudbuild/worker_pool.py b/sdk/python/pulumi_gcp/cloudbuild/worker_pool.py index 3b4275359a..bef01e75e8 100644 --- a/sdk/python/pulumi_gcp/cloudbuild/worker_pool.py +++ b/sdk/python/pulumi_gcp/cloudbuild/worker_pool.py @@ -26,6 +26,7 @@ def __init__(__self__, *, display_name: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, network_config: Optional[pulumi.Input['WorkerPoolNetworkConfigArgs']] = None, + private_service_connect: Optional[pulumi.Input['WorkerPoolPrivateServiceConnectArgs']] = None, project: Optional[pulumi.Input[str]] = None, worker_config: Optional[pulumi.Input['WorkerPoolWorkerConfigArgs']] = None): """ @@ -40,6 +41,7 @@ def __init__(__self__, *, - - - :param pulumi.Input['WorkerPoolNetworkConfigArgs'] network_config: Network configuration for the `WorkerPool`. Structure is documented below. + :param pulumi.Input['WorkerPoolPrivateServiceConnectArgs'] private_service_connect: Private Service Connect configuration for the pool. :param pulumi.Input[str] project: The project for the resource :param pulumi.Input['WorkerPoolWorkerConfigArgs'] worker_config: Configuration to be used for a creating workers in the `WorkerPool`. Structure is documented below. """ @@ -52,6 +54,8 @@ def __init__(__self__, *, pulumi.set(__self__, "name", name) if network_config is not None: pulumi.set(__self__, "network_config", network_config) + if private_service_connect is not None: + pulumi.set(__self__, "private_service_connect", private_service_connect) if project is not None: pulumi.set(__self__, "project", project) if worker_config is not None: @@ -122,6 +126,18 @@ def network_config(self) -> Optional[pulumi.Input['WorkerPoolNetworkConfigArgs'] def network_config(self, value: Optional[pulumi.Input['WorkerPoolNetworkConfigArgs']]): pulumi.set(self, "network_config", value) + @property + @pulumi.getter(name="privateServiceConnect") + def private_service_connect(self) -> Optional[pulumi.Input['WorkerPoolPrivateServiceConnectArgs']]: + """ + Private Service Connect configuration for the pool. + """ + return pulumi.get(self, "private_service_connect") + + @private_service_connect.setter + def private_service_connect(self, value: Optional[pulumi.Input['WorkerPoolPrivateServiceConnectArgs']]): + pulumi.set(self, "private_service_connect", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -158,6 +174,7 @@ def __init__(__self__, *, location: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, network_config: Optional[pulumi.Input['WorkerPoolNetworkConfigArgs']] = None, + private_service_connect: Optional[pulumi.Input['WorkerPoolPrivateServiceConnectArgs']] = None, project: Optional[pulumi.Input[str]] = None, state: Optional[pulumi.Input[str]] = None, uid: Optional[pulumi.Input[str]] = None, @@ -177,6 +194,7 @@ def __init__(__self__, *, - - - :param pulumi.Input['WorkerPoolNetworkConfigArgs'] network_config: Network configuration for the `WorkerPool`. Structure is documented below. + :param pulumi.Input['WorkerPoolPrivateServiceConnectArgs'] private_service_connect: Private Service Connect configuration for the pool. :param pulumi.Input[str] project: The project for the resource :param pulumi.Input[str] state: Output only. WorkerPool state. Possible values: STATE_UNSPECIFIED, PENDING, APPROVED, REJECTED, CANCELLED :param pulumi.Input[str] uid: Output only. A unique identifier for the `WorkerPool`. @@ -199,6 +217,8 @@ def __init__(__self__, *, pulumi.set(__self__, "name", name) if network_config is not None: pulumi.set(__self__, "network_config", network_config) + if private_service_connect is not None: + pulumi.set(__self__, "private_service_connect", private_service_connect) if project is not None: pulumi.set(__self__, "project", project) if state is not None: @@ -308,6 +328,18 @@ def network_config(self) -> Optional[pulumi.Input['WorkerPoolNetworkConfigArgs'] def network_config(self, value: Optional[pulumi.Input['WorkerPoolNetworkConfigArgs']]): pulumi.set(self, "network_config", value) + @property + @pulumi.getter(name="privateServiceConnect") + def private_service_connect(self) -> Optional[pulumi.Input['WorkerPoolPrivateServiceConnectArgs']]: + """ + Private Service Connect configuration for the pool. + """ + return pulumi.get(self, "private_service_connect") + + @private_service_connect.setter + def private_service_connect(self, value: Optional[pulumi.Input['WorkerPoolPrivateServiceConnectArgs']]): + pulumi.set(self, "private_service_connect", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -379,6 +411,7 @@ def __init__(__self__, location: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, network_config: Optional[pulumi.Input[Union['WorkerPoolNetworkConfigArgs', 'WorkerPoolNetworkConfigArgsDict']]] = None, + private_service_connect: Optional[pulumi.Input[Union['WorkerPoolPrivateServiceConnectArgs', 'WorkerPoolPrivateServiceConnectArgsDict']]] = None, project: Optional[pulumi.Input[str]] = None, worker_config: Optional[pulumi.Input[Union['WorkerPoolWorkerConfigArgs', 'WorkerPoolWorkerConfigArgsDict']]] = None, __props__=None): @@ -476,6 +509,7 @@ def __init__(__self__, - - - :param pulumi.Input[Union['WorkerPoolNetworkConfigArgs', 'WorkerPoolNetworkConfigArgsDict']] network_config: Network configuration for the `WorkerPool`. Structure is documented below. + :param pulumi.Input[Union['WorkerPoolPrivateServiceConnectArgs', 'WorkerPoolPrivateServiceConnectArgsDict']] private_service_connect: Private Service Connect configuration for the pool. :param pulumi.Input[str] project: The project for the resource :param pulumi.Input[Union['WorkerPoolWorkerConfigArgs', 'WorkerPoolWorkerConfigArgsDict']] worker_config: Configuration to be used for a creating workers in the `WorkerPool`. Structure is documented below. """ @@ -587,6 +621,7 @@ def _internal_init(__self__, location: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, network_config: Optional[pulumi.Input[Union['WorkerPoolNetworkConfigArgs', 'WorkerPoolNetworkConfigArgsDict']]] = None, + private_service_connect: Optional[pulumi.Input[Union['WorkerPoolPrivateServiceConnectArgs', 'WorkerPoolPrivateServiceConnectArgsDict']]] = None, project: Optional[pulumi.Input[str]] = None, worker_config: Optional[pulumi.Input[Union['WorkerPoolWorkerConfigArgs', 'WorkerPoolWorkerConfigArgsDict']]] = None, __props__=None): @@ -605,6 +640,7 @@ def _internal_init(__self__, __props__.__dict__["location"] = location __props__.__dict__["name"] = name __props__.__dict__["network_config"] = network_config + __props__.__dict__["private_service_connect"] = private_service_connect __props__.__dict__["project"] = project __props__.__dict__["worker_config"] = worker_config __props__.__dict__["create_time"] = None @@ -631,6 +667,7 @@ def get(resource_name: str, location: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, network_config: Optional[pulumi.Input[Union['WorkerPoolNetworkConfigArgs', 'WorkerPoolNetworkConfigArgsDict']]] = None, + private_service_connect: Optional[pulumi.Input[Union['WorkerPoolPrivateServiceConnectArgs', 'WorkerPoolPrivateServiceConnectArgsDict']]] = None, project: Optional[pulumi.Input[str]] = None, state: Optional[pulumi.Input[str]] = None, uid: Optional[pulumi.Input[str]] = None, @@ -655,6 +692,7 @@ def get(resource_name: str, - - - :param pulumi.Input[Union['WorkerPoolNetworkConfigArgs', 'WorkerPoolNetworkConfigArgsDict']] network_config: Network configuration for the `WorkerPool`. Structure is documented below. + :param pulumi.Input[Union['WorkerPoolPrivateServiceConnectArgs', 'WorkerPoolPrivateServiceConnectArgsDict']] private_service_connect: Private Service Connect configuration for the pool. :param pulumi.Input[str] project: The project for the resource :param pulumi.Input[str] state: Output only. WorkerPool state. Possible values: STATE_UNSPECIFIED, PENDING, APPROVED, REJECTED, CANCELLED :param pulumi.Input[str] uid: Output only. A unique identifier for the `WorkerPool`. @@ -673,6 +711,7 @@ def get(resource_name: str, __props__.__dict__["location"] = location __props__.__dict__["name"] = name __props__.__dict__["network_config"] = network_config + __props__.__dict__["private_service_connect"] = private_service_connect __props__.__dict__["project"] = project __props__.__dict__["state"] = state __props__.__dict__["uid"] = uid @@ -746,6 +785,14 @@ def network_config(self) -> pulumi.Output[Optional['outputs.WorkerPoolNetworkCon """ return pulumi.get(self, "network_config") + @property + @pulumi.getter(name="privateServiceConnect") + def private_service_connect(self) -> pulumi.Output[Optional['outputs.WorkerPoolPrivateServiceConnect']]: + """ + Private Service Connect configuration for the pool. + """ + return pulumi.get(self, "private_service_connect") + @property @pulumi.getter def project(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/clouddeploy/_inputs.py b/sdk/python/pulumi_gcp/clouddeploy/_inputs.py index 8fbe1a603c..1b9a5d049f 100644 --- a/sdk/python/pulumi_gcp/clouddeploy/_inputs.py +++ b/sdk/python/pulumi_gcp/clouddeploy/_inputs.py @@ -83,6 +83,8 @@ 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesArgsDict', 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgs', 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshArgsDict', + 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs', + 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgsDict', 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworkingArgs', 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworkingArgsDict', 'DeliveryPipelineSerialPipelineStageStrategyStandardArgs', @@ -93,6 +95,12 @@ 'DeliveryPipelineSerialPipelineStageStrategyStandardPredeployArgsDict', 'TargetAnthosClusterArgs', 'TargetAnthosClusterArgsDict', + 'TargetAssociatedEntityArgs', + 'TargetAssociatedEntityArgsDict', + 'TargetAssociatedEntityAnthosClusterArgs', + 'TargetAssociatedEntityAnthosClusterArgsDict', + 'TargetAssociatedEntityGkeClusterArgs', + 'TargetAssociatedEntityGkeClusterArgsDict', 'TargetCustomTargetArgs', 'TargetCustomTargetArgsDict', 'TargetExecutionConfigArgs', @@ -2126,6 +2134,10 @@ class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGa """ Optional. The label to use when selecting Pods for the Deployment and Service resources. This label must already be present in both resources. """ + route_destinations: NotRequired[pulumi.Input['DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgsDict']] + """ + 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. + """ route_update_wait_time: NotRequired[pulumi.Input[str]] """ 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. @@ -2144,6 +2156,7 @@ def __init__(__self__, *, http_route: pulumi.Input[str], service: pulumi.Input[str], pod_selector_label: Optional[pulumi.Input[str]] = None, + route_destinations: Optional[pulumi.Input['DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs']] = None, route_update_wait_time: Optional[pulumi.Input[str]] = None, stable_cutback_duration: Optional[pulumi.Input[str]] = None): """ @@ -2151,6 +2164,7 @@ def __init__(__self__, *, :param pulumi.Input[str] http_route: Required. Name of the Gateway API HTTPRoute. :param pulumi.Input[str] service: Required. Name of the Kubernetes Service. :param pulumi.Input[str] pod_selector_label: Optional. The label to use when selecting Pods for the Deployment and Service resources. This label must already be present in both resources. + :param pulumi.Input['DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs'] route_destinations: 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. :param pulumi.Input[str] route_update_wait_time: 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. :param pulumi.Input[str] stable_cutback_duration: Optional. The amount of time to migrate traffic back from the canary Service to the original Service during the stable phase deployment. If specified, must be between 15s and 3600s. If unspecified, there is no cutback time. """ @@ -2159,6 +2173,8 @@ def __init__(__self__, *, pulumi.set(__self__, "service", service) if pod_selector_label is not None: pulumi.set(__self__, "pod_selector_label", pod_selector_label) + if route_destinations is not None: + pulumi.set(__self__, "route_destinations", route_destinations) if route_update_wait_time is not None: pulumi.set(__self__, "route_update_wait_time", route_update_wait_time) if stable_cutback_duration is not None: @@ -2212,6 +2228,18 @@ def pod_selector_label(self) -> Optional[pulumi.Input[str]]: def pod_selector_label(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "pod_selector_label", value) + @property + @pulumi.getter(name="routeDestinations") + def route_destinations(self) -> Optional[pulumi.Input['DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs']]: + """ + 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. + """ + return pulumi.get(self, "route_destinations") + + @route_destinations.setter + def route_destinations(self, value: Optional[pulumi.Input['DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs']]): + pulumi.set(self, "route_destinations", value) + @property @pulumi.getter(name="routeUpdateWaitTime") def route_update_wait_time(self) -> Optional[pulumi.Input[str]]: @@ -2237,6 +2265,57 @@ def stable_cutback_duration(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "stable_cutback_duration", value) +if not MYPY: + class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgsDict(TypedDict): + destination_ids: pulumi.Input[Sequence[pulumi.Input[str]]] + """ + 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. + """ + propagate_service: NotRequired[pulumi.Input[bool]] + """ + 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. + """ +elif False: + DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs: + def __init__(__self__, *, + destination_ids: pulumi.Input[Sequence[pulumi.Input[str]]], + propagate_service: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input[str]]] destination_ids: 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. + :param pulumi.Input[bool] propagate_service: 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. + """ + pulumi.set(__self__, "destination_ids", destination_ids) + if propagate_service is not None: + pulumi.set(__self__, "propagate_service", propagate_service) + + @property + @pulumi.getter(name="destinationIds") + def destination_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]: + """ + 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. + """ + return pulumi.get(self, "destination_ids") + + @destination_ids.setter + def destination_ids(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): + pulumi.set(self, "destination_ids", value) + + @property + @pulumi.getter(name="propagateService") + def propagate_service(self) -> Optional[pulumi.Input[bool]]: + """ + 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. + """ + return pulumi.get(self, "propagate_service") + + @propagate_service.setter + def propagate_service(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "propagate_service", value) + + if not MYPY: class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworkingArgsDict(TypedDict): deployment: pulumi.Input[str] @@ -2495,6 +2574,181 @@ def membership(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "membership", value) +if not MYPY: + class TargetAssociatedEntityArgsDict(TypedDict): + entity_id: pulumi.Input[str] + """ + The name for the key in the map for which this object is mapped to in the API + """ + anthos_clusters: NotRequired[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityAnthosClusterArgsDict']]]] + """ + Optional. Information specifying Anthos clusters as associated entities. + """ + gke_clusters: NotRequired[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityGkeClusterArgsDict']]]] + """ + Optional. Information specifying GKE clusters as associated entities. + """ +elif False: + TargetAssociatedEntityArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class TargetAssociatedEntityArgs: + def __init__(__self__, *, + entity_id: pulumi.Input[str], + anthos_clusters: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityAnthosClusterArgs']]]] = None, + gke_clusters: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityGkeClusterArgs']]]] = None): + """ + :param pulumi.Input[str] entity_id: The name for the key in the map for which this object is mapped to in the API + :param pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityAnthosClusterArgs']]] anthos_clusters: Optional. Information specifying Anthos clusters as associated entities. + :param pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityGkeClusterArgs']]] gke_clusters: Optional. Information specifying GKE clusters as associated entities. + """ + pulumi.set(__self__, "entity_id", entity_id) + if anthos_clusters is not None: + pulumi.set(__self__, "anthos_clusters", anthos_clusters) + if gke_clusters is not None: + pulumi.set(__self__, "gke_clusters", gke_clusters) + + @property + @pulumi.getter(name="entityId") + def entity_id(self) -> pulumi.Input[str]: + """ + The name for the key in the map for which this object is mapped to in the API + """ + return pulumi.get(self, "entity_id") + + @entity_id.setter + def entity_id(self, value: pulumi.Input[str]): + pulumi.set(self, "entity_id", value) + + @property + @pulumi.getter(name="anthosClusters") + def anthos_clusters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityAnthosClusterArgs']]]]: + """ + Optional. Information specifying Anthos clusters as associated entities. + """ + return pulumi.get(self, "anthos_clusters") + + @anthos_clusters.setter + def anthos_clusters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityAnthosClusterArgs']]]]): + pulumi.set(self, "anthos_clusters", value) + + @property + @pulumi.getter(name="gkeClusters") + def gke_clusters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityGkeClusterArgs']]]]: + """ + Optional. Information specifying GKE clusters as associated entities. + """ + return pulumi.get(self, "gke_clusters") + + @gke_clusters.setter + def gke_clusters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityGkeClusterArgs']]]]): + pulumi.set(self, "gke_clusters", value) + + +if not MYPY: + class TargetAssociatedEntityAnthosClusterArgsDict(TypedDict): + membership: NotRequired[pulumi.Input[str]] + """ + Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + """ +elif False: + TargetAssociatedEntityAnthosClusterArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class TargetAssociatedEntityAnthosClusterArgs: + def __init__(__self__, *, + membership: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] membership: Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + """ + if membership is not None: + pulumi.set(__self__, "membership", membership) + + @property + @pulumi.getter + def membership(self) -> Optional[pulumi.Input[str]]: + """ + Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + """ + return pulumi.get(self, "membership") + + @membership.setter + def membership(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "membership", value) + + +if not MYPY: + class TargetAssociatedEntityGkeClusterArgsDict(TypedDict): + cluster: NotRequired[pulumi.Input[str]] + """ + Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + """ + internal_ip: NotRequired[pulumi.Input[bool]] + """ + 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). + """ + proxy_url: NotRequired[pulumi.Input[str]] + """ + Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + """ +elif False: + TargetAssociatedEntityGkeClusterArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class TargetAssociatedEntityGkeClusterArgs: + def __init__(__self__, *, + cluster: Optional[pulumi.Input[str]] = None, + internal_ip: Optional[pulumi.Input[bool]] = None, + proxy_url: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] cluster: Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + :param pulumi.Input[bool] internal_ip: 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). + :param pulumi.Input[str] proxy_url: Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if internal_ip is not None: + pulumi.set(__self__, "internal_ip", internal_ip) + if proxy_url is not None: + pulumi.set(__self__, "proxy_url", proxy_url) + + @property + @pulumi.getter + def cluster(self) -> Optional[pulumi.Input[str]]: + """ + Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + """ + return pulumi.get(self, "cluster") + + @cluster.setter + def cluster(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cluster", value) + + @property + @pulumi.getter(name="internalIp") + def internal_ip(self) -> Optional[pulumi.Input[bool]]: + """ + 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). + """ + return pulumi.get(self, "internal_ip") + + @internal_ip.setter + def internal_ip(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "internal_ip", value) + + @property + @pulumi.getter(name="proxyUrl") + def proxy_url(self) -> Optional[pulumi.Input[str]]: + """ + Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + """ + return pulumi.get(self, "proxy_url") + + @proxy_url.setter + def proxy_url(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "proxy_url", value) + + if not MYPY: class TargetCustomTargetArgsDict(TypedDict): custom_target_type: pulumi.Input[str] diff --git a/sdk/python/pulumi_gcp/clouddeploy/outputs.py b/sdk/python/pulumi_gcp/clouddeploy/outputs.py index 09272eb0c6..9cc282ac8e 100644 --- a/sdk/python/pulumi_gcp/clouddeploy/outputs.py +++ b/sdk/python/pulumi_gcp/clouddeploy/outputs.py @@ -50,11 +50,15 @@ 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigCloudRun', 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetes', 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMesh', + 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations', 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworking', 'DeliveryPipelineSerialPipelineStageStrategyStandard', 'DeliveryPipelineSerialPipelineStageStrategyStandardPostdeploy', 'DeliveryPipelineSerialPipelineStageStrategyStandardPredeploy', 'TargetAnthosCluster', + 'TargetAssociatedEntity', + 'TargetAssociatedEntityAnthosCluster', + 'TargetAssociatedEntityGkeCluster', 'TargetCustomTarget', 'TargetExecutionConfig', 'TargetGke', @@ -1577,6 +1581,8 @@ def __key_warning(key: str): suggest = "http_route" elif key == "podSelectorLabel": suggest = "pod_selector_label" + elif key == "routeDestinations": + suggest = "route_destinations" elif key == "routeUpdateWaitTime": suggest = "route_update_wait_time" elif key == "stableCutbackDuration": @@ -1598,6 +1604,7 @@ def __init__(__self__, *, http_route: str, service: str, pod_selector_label: Optional[str] = None, + route_destinations: Optional['outputs.DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations'] = None, route_update_wait_time: Optional[str] = None, stable_cutback_duration: Optional[str] = None): """ @@ -1605,6 +1612,7 @@ def __init__(__self__, *, :param str http_route: Required. Name of the Gateway API HTTPRoute. :param str service: Required. Name of the Kubernetes Service. :param str pod_selector_label: Optional. The label to use when selecting Pods for the Deployment and Service resources. This label must already be present in both resources. + :param 'DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinationsArgs' route_destinations: 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. :param str route_update_wait_time: 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. :param str stable_cutback_duration: Optional. The amount of time to migrate traffic back from the canary Service to the original Service during the stable phase deployment. If specified, must be between 15s and 3600s. If unspecified, there is no cutback time. """ @@ -1613,6 +1621,8 @@ def __init__(__self__, *, pulumi.set(__self__, "service", service) if pod_selector_label is not None: pulumi.set(__self__, "pod_selector_label", pod_selector_label) + if route_destinations is not None: + pulumi.set(__self__, "route_destinations", route_destinations) if route_update_wait_time is not None: pulumi.set(__self__, "route_update_wait_time", route_update_wait_time) if stable_cutback_duration is not None: @@ -1650,6 +1660,14 @@ def pod_selector_label(self) -> Optional[str]: """ return pulumi.get(self, "pod_selector_label") + @property + @pulumi.getter(name="routeDestinations") + def route_destinations(self) -> Optional['outputs.DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations']: + """ + 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. + """ + return pulumi.get(self, "route_destinations") + @property @pulumi.getter(name="routeUpdateWaitTime") def route_update_wait_time(self) -> Optional[str]: @@ -1667,6 +1685,55 @@ def stable_cutback_duration(self) -> Optional[str]: return pulumi.get(self, "stable_cutback_duration") +@pulumi.output_type +class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "destinationIds": + suggest = "destination_ids" + elif key == "propagateService": + suggest = "propagate_service" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesGatewayServiceMeshRouteDestinations.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + destination_ids: Sequence[str], + propagate_service: Optional[bool] = None): + """ + :param Sequence[str] destination_ids: 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. + :param bool propagate_service: 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. + """ + pulumi.set(__self__, "destination_ids", destination_ids) + if propagate_service is not None: + pulumi.set(__self__, "propagate_service", propagate_service) + + @property + @pulumi.getter(name="destinationIds") + def destination_ids(self) -> Sequence[str]: + """ + 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. + """ + return pulumi.get(self, "destination_ids") + + @property + @pulumi.getter(name="propagateService") + def propagate_service(self) -> Optional[bool]: + """ + 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. + """ + return pulumi.get(self, "propagate_service") + + @pulumi.output_type class DeliveryPipelineSerialPipelineStageStrategyCanaryRuntimeConfigKubernetesServiceNetworking(dict): @staticmethod @@ -1839,6 +1906,150 @@ def membership(self) -> Optional[str]: return pulumi.get(self, "membership") +@pulumi.output_type +class TargetAssociatedEntity(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "entityId": + suggest = "entity_id" + elif key == "anthosClusters": + suggest = "anthos_clusters" + elif key == "gkeClusters": + suggest = "gke_clusters" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in TargetAssociatedEntity. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + TargetAssociatedEntity.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + TargetAssociatedEntity.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + entity_id: str, + anthos_clusters: Optional[Sequence['outputs.TargetAssociatedEntityAnthosCluster']] = None, + gke_clusters: Optional[Sequence['outputs.TargetAssociatedEntityGkeCluster']] = None): + """ + :param str entity_id: The name for the key in the map for which this object is mapped to in the API + :param Sequence['TargetAssociatedEntityAnthosClusterArgs'] anthos_clusters: Optional. Information specifying Anthos clusters as associated entities. + :param Sequence['TargetAssociatedEntityGkeClusterArgs'] gke_clusters: Optional. Information specifying GKE clusters as associated entities. + """ + pulumi.set(__self__, "entity_id", entity_id) + if anthos_clusters is not None: + pulumi.set(__self__, "anthos_clusters", anthos_clusters) + if gke_clusters is not None: + pulumi.set(__self__, "gke_clusters", gke_clusters) + + @property + @pulumi.getter(name="entityId") + def entity_id(self) -> str: + """ + The name for the key in the map for which this object is mapped to in the API + """ + return pulumi.get(self, "entity_id") + + @property + @pulumi.getter(name="anthosClusters") + def anthos_clusters(self) -> Optional[Sequence['outputs.TargetAssociatedEntityAnthosCluster']]: + """ + Optional. Information specifying Anthos clusters as associated entities. + """ + return pulumi.get(self, "anthos_clusters") + + @property + @pulumi.getter(name="gkeClusters") + def gke_clusters(self) -> Optional[Sequence['outputs.TargetAssociatedEntityGkeCluster']]: + """ + Optional. Information specifying GKE clusters as associated entities. + """ + return pulumi.get(self, "gke_clusters") + + +@pulumi.output_type +class TargetAssociatedEntityAnthosCluster(dict): + def __init__(__self__, *, + membership: Optional[str] = None): + """ + :param str membership: Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + """ + if membership is not None: + pulumi.set(__self__, "membership", membership) + + @property + @pulumi.getter + def membership(self) -> Optional[str]: + """ + Optional. Membership of the GKE Hub-registered cluster to which to apply the Skaffold configuration. Format is `projects/{project}/locations/{location}/memberships/{membership_name}`. + """ + return pulumi.get(self, "membership") + + +@pulumi.output_type +class TargetAssociatedEntityGkeCluster(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "internalIp": + suggest = "internal_ip" + elif key == "proxyUrl": + suggest = "proxy_url" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in TargetAssociatedEntityGkeCluster. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + TargetAssociatedEntityGkeCluster.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + TargetAssociatedEntityGkeCluster.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + cluster: Optional[str] = None, + internal_ip: Optional[bool] = None, + proxy_url: Optional[str] = None): + """ + :param str cluster: Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + :param bool internal_ip: 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). + :param str proxy_url: Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if internal_ip is not None: + pulumi.set(__self__, "internal_ip", internal_ip) + if proxy_url is not None: + pulumi.set(__self__, "proxy_url", proxy_url) + + @property + @pulumi.getter + def cluster(self) -> Optional[str]: + """ + Optional. Information specifying a GKE Cluster. Format is `projects/{project_id}/locations/{location_id}/clusters/{cluster_id}`. + """ + return pulumi.get(self, "cluster") + + @property + @pulumi.getter(name="internalIp") + def internal_ip(self) -> Optional[bool]: + """ + 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). + """ + return pulumi.get(self, "internal_ip") + + @property + @pulumi.getter(name="proxyUrl") + def proxy_url(self) -> Optional[str]: + """ + Optional. If set, used to configure a [proxy](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#proxy) to the Kubernetes server. + """ + return pulumi.get(self, "proxy_url") + + @pulumi.output_type class TargetCustomTarget(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/clouddeploy/target.py b/sdk/python/pulumi_gcp/clouddeploy/target.py index 5f468a82f0..1e00f70992 100644 --- a/sdk/python/pulumi_gcp/clouddeploy/target.py +++ b/sdk/python/pulumi_gcp/clouddeploy/target.py @@ -24,6 +24,7 @@ def __init__(__self__, *, location: pulumi.Input[str], annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, anthos_cluster: Optional[pulumi.Input['TargetAnthosClusterArgs']] = None, + associated_entities: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityArgs']]]] = None, custom_target: Optional[pulumi.Input['TargetCustomTargetArgs']] = None, deploy_parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, description: Optional[pulumi.Input[str]] = None, @@ -43,6 +44,7 @@ def __init__(__self__, *, **Note**: This field is non-authoritative, and will only manage the annotations present in your configuration. Please refer to the field `effective_annotations` for all of the annotations present on the resource. :param pulumi.Input['TargetAnthosClusterArgs'] anthos_cluster: Information specifying an Anthos Cluster. + :param pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityArgs']]] associated_entities: 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?$`. :param pulumi.Input['TargetCustomTargetArgs'] custom_target: Optional. Information specifying a Custom Target. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] deploy_parameters: Optional. The deploy parameters to use for this target. :param pulumi.Input[str] description: Optional. Description of the `Target`. Max length is 255 characters. @@ -67,6 +69,8 @@ def __init__(__self__, *, pulumi.set(__self__, "annotations", annotations) if anthos_cluster is not None: pulumi.set(__self__, "anthos_cluster", anthos_cluster) + if associated_entities is not None: + pulumi.set(__self__, "associated_entities", associated_entities) if custom_target is not None: pulumi.set(__self__, "custom_target", custom_target) if deploy_parameters is not None: @@ -129,6 +133,18 @@ def anthos_cluster(self) -> Optional[pulumi.Input['TargetAnthosClusterArgs']]: def anthos_cluster(self, value: Optional[pulumi.Input['TargetAnthosClusterArgs']]): pulumi.set(self, "anthos_cluster", value) + @property + @pulumi.getter(name="associatedEntities") + def associated_entities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityArgs']]]]: + """ + 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?$`. + """ + return pulumi.get(self, "associated_entities") + + @associated_entities.setter + def associated_entities(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityArgs']]]]): + pulumi.set(self, "associated_entities", value) + @property @pulumi.getter(name="customTarget") def custom_target(self) -> Optional[pulumi.Input['TargetCustomTargetArgs']]: @@ -274,6 +290,7 @@ class _TargetState: def __init__(__self__, *, annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, anthos_cluster: Optional[pulumi.Input['TargetAnthosClusterArgs']] = None, + associated_entities: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityArgs']]]] = None, create_time: Optional[pulumi.Input[str]] = None, custom_target: Optional[pulumi.Input['TargetCustomTargetArgs']] = None, deploy_parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -301,6 +318,7 @@ def __init__(__self__, *, **Note**: This field is non-authoritative, and will only manage the annotations present in your configuration. Please refer to the field `effective_annotations` for all of the annotations present on the resource. :param pulumi.Input['TargetAnthosClusterArgs'] anthos_cluster: Information specifying an Anthos Cluster. + :param pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityArgs']]] associated_entities: 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?$`. :param pulumi.Input[str] create_time: Output only. Time at which the `Target` was created. :param pulumi.Input['TargetCustomTargetArgs'] custom_target: Optional. Information specifying a Custom Target. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] deploy_parameters: Optional. The deploy parameters to use for this target. @@ -332,6 +350,8 @@ def __init__(__self__, *, pulumi.set(__self__, "annotations", annotations) if anthos_cluster is not None: pulumi.set(__self__, "anthos_cluster", anthos_cluster) + if associated_entities is not None: + pulumi.set(__self__, "associated_entities", associated_entities) if create_time is not None: pulumi.set(__self__, "create_time", create_time) if custom_target is not None: @@ -400,6 +420,18 @@ def anthos_cluster(self) -> Optional[pulumi.Input['TargetAnthosClusterArgs']]: def anthos_cluster(self, value: Optional[pulumi.Input['TargetAnthosClusterArgs']]): pulumi.set(self, "anthos_cluster", value) + @property + @pulumi.getter(name="associatedEntities") + def associated_entities(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityArgs']]]]: + """ + 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?$`. + """ + return pulumi.get(self, "associated_entities") + + @associated_entities.setter + def associated_entities(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['TargetAssociatedEntityArgs']]]]): + pulumi.set(self, "associated_entities", value) + @property @pulumi.getter(name="createTime") def create_time(self) -> Optional[pulumi.Input[str]]: @@ -652,6 +684,7 @@ def __init__(__self__, opts: Optional[pulumi.ResourceOptions] = None, annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, anthos_cluster: Optional[pulumi.Input[Union['TargetAnthosClusterArgs', 'TargetAnthosClusterArgsDict']]] = None, + associated_entities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['TargetAssociatedEntityArgs', 'TargetAssociatedEntityArgsDict']]]]] = None, custom_target: Optional[pulumi.Input[Union['TargetCustomTargetArgs', 'TargetCustomTargetArgsDict']]] = None, deploy_parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, description: Optional[pulumi.Input[str]] = None, @@ -796,6 +829,7 @@ def __init__(__self__, **Note**: This field is non-authoritative, and will only manage the annotations present in your configuration. Please refer to the field `effective_annotations` for all of the annotations present on the resource. :param pulumi.Input[Union['TargetAnthosClusterArgs', 'TargetAnthosClusterArgsDict']] anthos_cluster: Information specifying an Anthos Cluster. + :param pulumi.Input[Sequence[pulumi.Input[Union['TargetAssociatedEntityArgs', 'TargetAssociatedEntityArgsDict']]]] associated_entities: 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?$`. :param pulumi.Input[Union['TargetCustomTargetArgs', 'TargetCustomTargetArgsDict']] custom_target: Optional. Information specifying a Custom Target. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] deploy_parameters: Optional. The deploy parameters to use for this target. :param pulumi.Input[str] description: Optional. Description of the `Target`. Max length is 255 characters. @@ -963,6 +997,7 @@ def _internal_init(__self__, opts: Optional[pulumi.ResourceOptions] = None, annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, anthos_cluster: Optional[pulumi.Input[Union['TargetAnthosClusterArgs', 'TargetAnthosClusterArgsDict']]] = None, + associated_entities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['TargetAssociatedEntityArgs', 'TargetAssociatedEntityArgsDict']]]]] = None, custom_target: Optional[pulumi.Input[Union['TargetCustomTargetArgs', 'TargetCustomTargetArgsDict']]] = None, deploy_parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, description: Optional[pulumi.Input[str]] = None, @@ -986,6 +1021,7 @@ def _internal_init(__self__, __props__.__dict__["annotations"] = annotations __props__.__dict__["anthos_cluster"] = anthos_cluster + __props__.__dict__["associated_entities"] = associated_entities __props__.__dict__["custom_target"] = custom_target __props__.__dict__["deploy_parameters"] = deploy_parameters __props__.__dict__["description"] = description @@ -1022,6 +1058,7 @@ def get(resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, anthos_cluster: Optional[pulumi.Input[Union['TargetAnthosClusterArgs', 'TargetAnthosClusterArgsDict']]] = None, + associated_entities: Optional[pulumi.Input[Sequence[pulumi.Input[Union['TargetAssociatedEntityArgs', 'TargetAssociatedEntityArgsDict']]]]] = None, create_time: Optional[pulumi.Input[str]] = None, custom_target: Optional[pulumi.Input[Union['TargetCustomTargetArgs', 'TargetCustomTargetArgsDict']]] = None, deploy_parameters: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -1054,6 +1091,7 @@ def get(resource_name: str, **Note**: This field is non-authoritative, and will only manage the annotations present in your configuration. Please refer to the field `effective_annotations` for all of the annotations present on the resource. :param pulumi.Input[Union['TargetAnthosClusterArgs', 'TargetAnthosClusterArgsDict']] anthos_cluster: Information specifying an Anthos Cluster. + :param pulumi.Input[Sequence[pulumi.Input[Union['TargetAssociatedEntityArgs', 'TargetAssociatedEntityArgsDict']]]] associated_entities: 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?$`. :param pulumi.Input[str] create_time: Output only. Time at which the `Target` was created. :param pulumi.Input[Union['TargetCustomTargetArgs', 'TargetCustomTargetArgsDict']] custom_target: Optional. Information specifying a Custom Target. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] deploy_parameters: Optional. The deploy parameters to use for this target. @@ -1087,6 +1125,7 @@ def get(resource_name: str, __props__.__dict__["annotations"] = annotations __props__.__dict__["anthos_cluster"] = anthos_cluster + __props__.__dict__["associated_entities"] = associated_entities __props__.__dict__["create_time"] = create_time __props__.__dict__["custom_target"] = custom_target __props__.__dict__["deploy_parameters"] = deploy_parameters @@ -1128,6 +1167,14 @@ def anthos_cluster(self) -> pulumi.Output[Optional['outputs.TargetAnthosCluster' """ return pulumi.get(self, "anthos_cluster") + @property + @pulumi.getter(name="associatedEntities") + def associated_entities(self) -> pulumi.Output[Optional[Sequence['outputs.TargetAssociatedEntity']]]: + """ + 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?$`. + """ + return pulumi.get(self, "associated_entities") + @property @pulumi.getter(name="createTime") def create_time(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/cloudfunctionsv2/_inputs.py b/sdk/python/pulumi_gcp/cloudfunctionsv2/_inputs.py index 2de3021ee3..7a2219f8f4 100644 --- a/sdk/python/pulumi_gcp/cloudfunctionsv2/_inputs.py +++ b/sdk/python/pulumi_gcp/cloudfunctionsv2/_inputs.py @@ -1393,7 +1393,7 @@ class FunctionServiceConfigSecretEnvironmentVariableArgsDict(TypedDict): """ project_id: pulumi.Input[str] """ - 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. """ secret: pulumi.Input[str] """ @@ -1415,7 +1415,7 @@ def __init__(__self__, *, version: pulumi.Input[str]): """ :param pulumi.Input[str] key: Name of the environment variable. - :param pulumi.Input[str] project_id: 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. + :param pulumi.Input[str] project_id: 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. :param pulumi.Input[str] secret: Name of the secret in secret manager (not the full resource name). :param pulumi.Input[str] version: Version of the secret (version number or the string 'latest'). It is recommended to use a numeric version for secret environment variables as any updates to the secret value is not reflected until new instances start. """ @@ -1440,7 +1440,7 @@ def key(self, value: pulumi.Input[str]): @pulumi.getter(name="projectId") def project_id(self) -> pulumi.Input[str]: """ - 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. """ return pulumi.get(self, "project_id") @@ -1481,7 +1481,7 @@ class FunctionServiceConfigSecretVolumeArgsDict(TypedDict): """ project_id: pulumi.Input[str] """ - 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. """ secret: pulumi.Input[str] """ @@ -1504,7 +1504,7 @@ def __init__(__self__, *, versions: Optional[pulumi.Input[Sequence[pulumi.Input['FunctionServiceConfigSecretVolumeVersionArgs']]]] = None): """ :param pulumi.Input[str] mount_path: The path within the container to mount the secret volume. For example, setting the mountPath as /etc/secrets would mount the secret value files under the /etc/secrets directory. This directory will also be completely shadowed and unavailable to mount any other secrets. Recommended mount path: /etc/secrets - :param pulumi.Input[str] project_id: 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. + :param pulumi.Input[str] project_id: 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. :param pulumi.Input[str] secret: Name of the secret in secret manager (not the full resource name). :param pulumi.Input[Sequence[pulumi.Input['FunctionServiceConfigSecretVolumeVersionArgs']]] versions: List of secret versions to mount for this secret. If empty, the latest version of the secret will be made available in a file named after the secret under the mount point.' Structure is documented below. @@ -1531,7 +1531,7 @@ def mount_path(self, value: pulumi.Input[str]): @pulumi.getter(name="projectId") def project_id(self) -> pulumi.Input[str]: """ - 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. """ return pulumi.get(self, "project_id") diff --git a/sdk/python/pulumi_gcp/cloudfunctionsv2/outputs.py b/sdk/python/pulumi_gcp/cloudfunctionsv2/outputs.py index 45deca83eb..6d2e68593c 100644 --- a/sdk/python/pulumi_gcp/cloudfunctionsv2/outputs.py +++ b/sdk/python/pulumi_gcp/cloudfunctionsv2/outputs.py @@ -1040,7 +1040,7 @@ def __init__(__self__, *, version: str): """ :param str key: Name of the environment variable. - :param str project_id: 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. + :param str project_id: 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. :param str secret: Name of the secret in secret manager (not the full resource name). :param str version: Version of the secret (version number or the string 'latest'). It is recommended to use a numeric version for secret environment variables as any updates to the secret value is not reflected until new instances start. """ @@ -1061,7 +1061,7 @@ def key(self) -> str: @pulumi.getter(name="projectId") def project_id(self) -> str: """ - 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. """ return pulumi.get(self, "project_id") @@ -1110,7 +1110,7 @@ def __init__(__self__, *, versions: Optional[Sequence['outputs.FunctionServiceConfigSecretVolumeVersion']] = None): """ :param str mount_path: The path within the container to mount the secret volume. For example, setting the mountPath as /etc/secrets would mount the secret value files under the /etc/secrets directory. This directory will also be completely shadowed and unavailable to mount any other secrets. Recommended mount path: /etc/secrets - :param str project_id: 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. + :param str project_id: 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. :param str secret: Name of the secret in secret manager (not the full resource name). :param Sequence['FunctionServiceConfigSecretVolumeVersionArgs'] versions: List of secret versions to mount for this secret. If empty, the latest version of the secret will be made available in a file named after the secret under the mount point.' Structure is documented below. @@ -1133,7 +1133,7 @@ def mount_path(self) -> str: @pulumi.getter(name="projectId") def project_id(self) -> str: """ - 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. """ return pulumi.get(self, "project_id") @@ -1865,7 +1865,7 @@ def __init__(__self__, *, version: str): """ :param str key: Name of the environment variable. - :param str project_id: 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. + :param str project_id: 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. :param str secret: Name of the secret in secret manager (not the full resource name). :param str version: Version of the secret (version number or the string 'latest'). It is recommended to use a numeric version for secret environment variables as any updates to the secret value is not reflected until new instances start. """ @@ -1886,7 +1886,7 @@ def key(self) -> str: @pulumi.getter(name="projectId") def project_id(self) -> str: """ - 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. """ return pulumi.get(self, "project_id") @@ -1916,7 +1916,7 @@ def __init__(__self__, *, versions: Sequence['outputs.GetFunctionServiceConfigSecretVolumeVersionResult']): """ :param str mount_path: The path within the container to mount the secret volume. For example, setting the mountPath as /etc/secrets would mount the secret value files under the /etc/secrets directory. This directory will also be completely shadowed and unavailable to mount any other secrets. Recommended mount path: /etc/secrets - :param str project_id: 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. + :param str project_id: 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. :param str secret: Name of the secret in secret manager (not the full resource name). :param Sequence['GetFunctionServiceConfigSecretVolumeVersionArgs'] versions: List of secret versions to mount for this secret. If empty, the latest version of the secret will be made available in a file named after the secret under the mount point.' """ @@ -1937,7 +1937,7 @@ def mount_path(self) -> str: @pulumi.getter(name="projectId") def project_id(self) -> str: """ - 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. """ return pulumi.get(self, "project_id") diff --git a/sdk/python/pulumi_gcp/cloudrunv2/job.py b/sdk/python/pulumi_gcp/cloudrunv2/job.py index 5d3e9b487b..7d125dd2cf 100644 --- a/sdk/python/pulumi_gcp/cloudrunv2/job.py +++ b/sdk/python/pulumi_gcp/cloudrunv2/job.py @@ -322,7 +322,7 @@ def __init__(__self__, *, :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. :param pulumi.Input[str] etag: A system-generated fingerprint for this version of the resource. May be used to detect modification conflict during updates. :param pulumi.Input[int] execution_count: Number of executions created for this job. - :param pulumi.Input[str] expire_time: For a deleted resource, the time after which it will be permamently deleted. + :param pulumi.Input[str] expire_time: For a deleted resource, the time after which it will be permanently deleted. :param pulumi.Input[str] generation: A number that monotonically increases every time the user modifies the desired state. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Unstructured key value map that can be used to organize and categorize objects. User-provided labels are shared with Google's billing system, so they can be used to filter, or break down billing charges by team, component, environment, @@ -587,7 +587,7 @@ def execution_count(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="expireTime") def expire_time(self) -> Optional[pulumi.Input[str]]: """ - 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. """ return pulumi.get(self, "expire_time") @@ -1644,7 +1644,7 @@ def get(resource_name: str, :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. :param pulumi.Input[str] etag: A system-generated fingerprint for this version of the resource. May be used to detect modification conflict during updates. :param pulumi.Input[int] execution_count: Number of executions created for this job. - :param pulumi.Input[str] expire_time: For a deleted resource, the time after which it will be permamently deleted. + :param pulumi.Input[str] expire_time: For a deleted resource, the time after which it will be permanently deleted. :param pulumi.Input[str] generation: A number that monotonically increases every time the user modifies the desired state. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Unstructured key value map that can be used to organize and categorize objects. User-provided labels are shared with Google's billing system, so they can be used to filter, or break down billing charges by team, component, environment, @@ -1831,7 +1831,7 @@ def execution_count(self) -> pulumi.Output[int]: @pulumi.getter(name="expireTime") def expire_time(self) -> pulumi.Output[str]: """ - 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. """ return pulumi.get(self, "expire_time") diff --git a/sdk/python/pulumi_gcp/cloudrunv2/service.py b/sdk/python/pulumi_gcp/cloudrunv2/service.py index 752e7ac3ad..8075030bc3 100644 --- a/sdk/python/pulumi_gcp/cloudrunv2/service.py +++ b/sdk/python/pulumi_gcp/cloudrunv2/service.py @@ -420,7 +420,7 @@ def __init__(__self__, *, :param pulumi.Input[str] description: User-provided description of the Service. This field currently has a 512-character limit. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. :param pulumi.Input[str] etag: A system-generated fingerprint for this version of the resource. May be used to detect modification conflict during updates. - :param pulumi.Input[str] expire_time: For a deleted resource, the time after which it will be permamently deleted. + :param pulumi.Input[str] expire_time: For a deleted resource, the time after which it will be permanently deleted. :param pulumi.Input[str] generation: A number that monotonically increases every time the user modifies the desired state. Please note that unlike v1, this is an int64 value. As with most Google APIs, its JSON representation will be a string instead of an integer. :param pulumi.Input[str] ingress: Provides the ingress settings for this Service. On output, returns the currently observed ingress settings, or INGRESS_TRAFFIC_UNSPECIFIED if no revision is active. Possible values: ["INGRESS_TRAFFIC_ALL", @@ -734,7 +734,7 @@ def etag(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="expireTime") def expire_time(self) -> Optional[pulumi.Input[str]]: """ - 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. """ return pulumi.get(self, "expire_time") @@ -2265,7 +2265,7 @@ def get(resource_name: str, :param pulumi.Input[str] description: User-provided description of the Service. This field currently has a 512-character limit. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. :param pulumi.Input[str] etag: A system-generated fingerprint for this version of the resource. May be used to detect modification conflict during updates. - :param pulumi.Input[str] expire_time: For a deleted resource, the time after which it will be permamently deleted. + :param pulumi.Input[str] expire_time: For a deleted resource, the time after which it will be permanently deleted. :param pulumi.Input[str] generation: A number that monotonically increases every time the user modifies the desired state. Please note that unlike v1, this is an int64 value. As with most Google APIs, its JSON representation will be a string instead of an integer. :param pulumi.Input[str] ingress: Provides the ingress settings for this Service. On output, returns the currently observed ingress settings, or INGRESS_TRAFFIC_UNSPECIFIED if no revision is active. Possible values: ["INGRESS_TRAFFIC_ALL", @@ -2485,7 +2485,7 @@ def etag(self) -> pulumi.Output[str]: @pulumi.getter(name="expireTime") def expire_time(self) -> pulumi.Output[str]: """ - 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. """ return pulumi.get(self, "expire_time") diff --git a/sdk/python/pulumi_gcp/composer/get_user_workloads_config_map.py b/sdk/python/pulumi_gcp/composer/get_user_workloads_config_map.py index 172d5f240a..c455bf5173 100644 --- a/sdk/python/pulumi_gcp/composer/get_user_workloads_config_map.py +++ b/sdk/python/pulumi_gcp/composer/get_user_workloads_config_map.py @@ -104,6 +104,8 @@ def get_user_workloads_config_map(environment: Optional[str] = None, region: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetUserWorkloadsConfigMapResult: """ + Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment. + ## Example Usage ```python @@ -157,6 +159,8 @@ def get_user_workloads_config_map_output(environment: Optional[pulumi.Input[str] region: Optional[pulumi.Input[Optional[str]]] = None, opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetUserWorkloadsConfigMapResult]: """ + Provides access to Kubernetes ConfigMap configuration for a given project, region and Composer Environment. + ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/composer/get_user_workloads_secret.py b/sdk/python/pulumi_gcp/composer/get_user_workloads_secret.py index 4a38dee0f7..abf7be51b3 100644 --- a/sdk/python/pulumi_gcp/composer/get_user_workloads_secret.py +++ b/sdk/python/pulumi_gcp/composer/get_user_workloads_secret.py @@ -100,6 +100,8 @@ def get_user_workloads_secret(environment: Optional[str] = None, region: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetUserWorkloadsSecretResult: """ + Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment. + ## Example Usage ```python @@ -154,6 +156,8 @@ def get_user_workloads_secret_output(environment: Optional[pulumi.Input[str]] = region: Optional[pulumi.Input[Optional[str]]] = None, opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetUserWorkloadsSecretResult]: """ + Provides access to Kubernetes Secret configuration for a given project, region and Composer Environment. + ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/composer/user_workloads_config_map.py b/sdk/python/pulumi_gcp/composer/user_workloads_config_map.py index cb1f60457f..92f7f7cf3d 100644 --- a/sdk/python/pulumi_gcp/composer/user_workloads_config_map.py +++ b/sdk/python/pulumi_gcp/composer/user_workloads_config_map.py @@ -223,6 +223,13 @@ def __init__(__self__, region: Optional[pulumi.Input[str]] = None, __props__=None): """ + 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 @@ -298,6 +305,13 @@ def __init__(__self__, args: UserWorkloadsConfigMapArgs, opts: Optional[pulumi.ResourceOptions] = None): """ + 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/python/pulumi_gcp/composer/user_workloads_secret.py b/sdk/python/pulumi_gcp/composer/user_workloads_secret.py index d7c618b929..276d4395a5 100644 --- a/sdk/python/pulumi_gcp/composer/user_workloads_secret.py +++ b/sdk/python/pulumi_gcp/composer/user_workloads_secret.py @@ -207,6 +207,9 @@ def __init__(__self__, region: Optional[pulumi.Input[str]] = None, __props__=None): """ + User workloads Secret used by Airflow tasks that run with Kubernetes Executor or KubernetesPodOperator. + Intended for Composer 3 Environments. + ## Example Usage ```python @@ -274,6 +277,9 @@ def __init__(__self__, args: UserWorkloadsSecretArgs, opts: Optional[pulumi.ResourceOptions] = None): """ + User workloads Secret used by Airflow tasks that run with Kubernetes Executor or KubernetesPodOperator. + Intended for Composer 3 Environments. + ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/compute/_inputs.py b/sdk/python/pulumi_gcp/compute/_inputs.py index 02b13208fd..c84b47aafc 100644 --- a/sdk/python/pulumi_gcp/compute/_inputs.py +++ b/sdk/python/pulumi_gcp/compute/_inputs.py @@ -657,6 +657,8 @@ 'RegionNetworkEndpointGroupCloudFunctionArgsDict', 'RegionNetworkEndpointGroupCloudRunArgs', 'RegionNetworkEndpointGroupCloudRunArgsDict', + 'RegionNetworkEndpointGroupPscDataArgs', + 'RegionNetworkEndpointGroupPscDataArgsDict', 'RegionNetworkEndpointGroupServerlessDeploymentArgs', 'RegionNetworkEndpointGroupServerlessDeploymentArgsDict', 'RegionNetworkFirewallPolicyRuleMatchArgs', @@ -1007,6 +1009,10 @@ 'SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgsDict', 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs', 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgsDict', + 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs', + 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgsDict', + 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs', + 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgsDict', 'SecurityPolicyAdvancedOptionsConfigArgs', 'SecurityPolicyAdvancedOptionsConfigArgsDict', 'SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs', @@ -9987,6 +9993,14 @@ class InstanceAdvancedMachineFeaturesArgsDict(TypedDict): """ Defines whether the instance should have nested virtualization enabled. Defaults to false. """ + enable_uefi_networking: NotRequired[pulumi.Input[bool]] + """ + Whether to enable UEFI networking for instance creation. + """ + performance_monitoring_unit: NotRequired[pulumi.Input[str]] + """ + [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`. + """ threads_per_core: NotRequired[pulumi.Input[int]] """ 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. @@ -10006,17 +10020,25 @@ class InstanceAdvancedMachineFeaturesArgsDict(TypedDict): class InstanceAdvancedMachineFeaturesArgs: def __init__(__self__, *, enable_nested_virtualization: Optional[pulumi.Input[bool]] = None, + enable_uefi_networking: Optional[pulumi.Input[bool]] = None, + performance_monitoring_unit: Optional[pulumi.Input[str]] = None, threads_per_core: Optional[pulumi.Input[int]] = None, turbo_mode: Optional[pulumi.Input[str]] = None, visible_core_count: Optional[pulumi.Input[int]] = None): """ :param pulumi.Input[bool] enable_nested_virtualization: Defines whether the instance should have nested virtualization enabled. Defaults to false. + :param pulumi.Input[bool] enable_uefi_networking: Whether to enable UEFI networking for instance creation. + :param pulumi.Input[str] performance_monitoring_unit: [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`. :param pulumi.Input[int] threads_per_core: 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. :param pulumi.Input[str] turbo_mode: Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). :param pulumi.Input[int] visible_core_count: The number of physical cores to expose to an instance. [visible cores info (VC)](https://cloud.google.com/compute/docs/instances/customize-visible-cores). """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -10036,6 +10058,30 @@ def enable_nested_virtualization(self) -> Optional[pulumi.Input[bool]]: def enable_nested_virtualization(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "enable_nested_virtualization", value) + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[pulumi.Input[bool]]: + """ + Whether to enable UEFI networking for instance creation. + """ + return pulumi.get(self, "enable_uefi_networking") + + @enable_uefi_networking.setter + def enable_uefi_networking(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_uefi_networking", value) + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[pulumi.Input[str]]: + """ + [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`. + """ + return pulumi.get(self, "performance_monitoring_unit") + + @performance_monitoring_unit.setter + def performance_monitoring_unit(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "performance_monitoring_unit", value) + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[pulumi.Input[int]]: @@ -10533,10 +10579,12 @@ class InstanceBootDiskInitializeParamsArgsDict(TypedDict): """ storage_pool: NotRequired[pulumi.Input[str]] """ - 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} """ type: NotRequired[pulumi.Input[str]] """ @@ -10590,10 +10638,12 @@ def __init__(__self__, *, :param pulumi.Input[str] resource_policies: A list of self_links of resource policies to attach to the instance's boot disk. Modifying this list will cause the instance to recreate. Currently a max of 1 resource policy is supported. :param pulumi.Input[int] size: The size of the image in gigabytes. If not specified, it will inherit the size of its base image. - :param pulumi.Input[str] storage_pool: The URL of the storage pool in which the new disk is created. + :param pulumi.Input[str] storage_pool: 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} :param pulumi.Input[str] type: The GCE disk type. Such as pd-standard, pd-balanced or pd-ssd. """ if enable_confidential_compute is not None: @@ -10740,10 +10790,12 @@ def size(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="storagePool") def storage_pool(self) -> Optional[pulumi.Input[str]]: """ - 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} """ return pulumi.get(self, "storage_pool") @@ -10822,6 +10874,14 @@ class InstanceFromMachineImageAdvancedMachineFeaturesArgsDict(TypedDict): """ Whether to enable nested virtualization or not. """ + enable_uefi_networking: NotRequired[pulumi.Input[bool]] + """ + Whether to enable UEFI networking for the instance. + """ + performance_monitoring_unit: NotRequired[pulumi.Input[str]] + """ + 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". + """ threads_per_core: NotRequired[pulumi.Input[int]] """ 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. @@ -10841,17 +10901,25 @@ class InstanceFromMachineImageAdvancedMachineFeaturesArgsDict(TypedDict): class InstanceFromMachineImageAdvancedMachineFeaturesArgs: def __init__(__self__, *, enable_nested_virtualization: Optional[pulumi.Input[bool]] = None, + enable_uefi_networking: Optional[pulumi.Input[bool]] = None, + performance_monitoring_unit: Optional[pulumi.Input[str]] = None, threads_per_core: Optional[pulumi.Input[int]] = None, turbo_mode: Optional[pulumi.Input[str]] = None, visible_core_count: Optional[pulumi.Input[int]] = None): """ :param pulumi.Input[bool] enable_nested_virtualization: Whether to enable nested virtualization or not. + :param pulumi.Input[bool] enable_uefi_networking: Whether to enable UEFI networking for the instance. + :param pulumi.Input[str] performance_monitoring_unit: 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". :param pulumi.Input[int] threads_per_core: 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. :param pulumi.Input[str] turbo_mode: Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". :param pulumi.Input[int] visible_core_count: The number of physical cores to expose to an instance. Multiply by the number of threads per core to compute the total number of virtual CPUs to expose to the instance. If unset, the number of cores is inferred from the instance\\'s nominal CPU count and the underlying platform\\'s SMT width. """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -10871,6 +10939,30 @@ def enable_nested_virtualization(self) -> Optional[pulumi.Input[bool]]: def enable_nested_virtualization(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "enable_nested_virtualization", value) + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[pulumi.Input[bool]]: + """ + Whether to enable UEFI networking for the instance. + """ + return pulumi.get(self, "enable_uefi_networking") + + @enable_uefi_networking.setter + def enable_uefi_networking(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_uefi_networking", value) + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[pulumi.Input[str]]: + """ + 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". + """ + return pulumi.get(self, "performance_monitoring_unit") + + @performance_monitoring_unit.setter + def performance_monitoring_unit(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "performance_monitoring_unit", value) + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[pulumi.Input[int]]: @@ -11599,7 +11691,7 @@ class InstanceFromMachineImageNetworkInterfaceArgsDict(TypedDict): """ nic_type: NotRequired[pulumi.Input[str]] """ - 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 """ queue_count: NotRequired[pulumi.Input[int]] """ @@ -11655,7 +11747,7 @@ def __init__(__self__, *, :param pulumi.Input[str] network: The name or self_link of the network attached to this interface. :param pulumi.Input[str] network_attachment: The URL of the network attachment that this interface should connect to in the following format: projects/{projectNumber}/regions/{region_name}/networkAttachments/{network_attachment_name}. :param pulumi.Input[str] network_ip: The private IP address assigned to the instance. - :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA :param pulumi.Input[int] queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param pulumi.Input[str] security_policy: A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. If not specified, IPV4_ONLY will be used. @@ -11820,7 +11912,7 @@ def network_ip(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="nicType") def nic_type(self) -> Optional[pulumi.Input[str]]: """ - 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 """ return pulumi.get(self, "nic_type") @@ -12988,6 +13080,14 @@ class InstanceFromTemplateAdvancedMachineFeaturesArgsDict(TypedDict): """ Whether to enable nested virtualization or not. """ + enable_uefi_networking: NotRequired[pulumi.Input[bool]] + """ + Whether to enable UEFI networking for the instance. + """ + performance_monitoring_unit: NotRequired[pulumi.Input[str]] + """ + 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". + """ threads_per_core: NotRequired[pulumi.Input[int]] """ 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. @@ -13007,17 +13107,25 @@ class InstanceFromTemplateAdvancedMachineFeaturesArgsDict(TypedDict): class InstanceFromTemplateAdvancedMachineFeaturesArgs: def __init__(__self__, *, enable_nested_virtualization: Optional[pulumi.Input[bool]] = None, + enable_uefi_networking: Optional[pulumi.Input[bool]] = None, + performance_monitoring_unit: Optional[pulumi.Input[str]] = None, threads_per_core: Optional[pulumi.Input[int]] = None, turbo_mode: Optional[pulumi.Input[str]] = None, visible_core_count: Optional[pulumi.Input[int]] = None): """ :param pulumi.Input[bool] enable_nested_virtualization: Whether to enable nested virtualization or not. + :param pulumi.Input[bool] enable_uefi_networking: Whether to enable UEFI networking for the instance. + :param pulumi.Input[str] performance_monitoring_unit: 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". :param pulumi.Input[int] threads_per_core: 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. :param pulumi.Input[str] turbo_mode: Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". :param pulumi.Input[int] visible_core_count: The number of physical cores to expose to an instance. Multiply by the number of threads per core to compute the total number of virtual CPUs to expose to the instance. If unset, the number of cores is inferred from the instance\\'s nominal CPU count and the underlying platform\\'s SMT width. """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -13037,6 +13145,30 @@ def enable_nested_virtualization(self) -> Optional[pulumi.Input[bool]]: def enable_nested_virtualization(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "enable_nested_virtualization", value) + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[pulumi.Input[bool]]: + """ + Whether to enable UEFI networking for the instance. + """ + return pulumi.get(self, "enable_uefi_networking") + + @enable_uefi_networking.setter + def enable_uefi_networking(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_uefi_networking", value) + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[pulumi.Input[str]]: + """ + 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". + """ + return pulumi.get(self, "performance_monitoring_unit") + + @performance_monitoring_unit.setter + def performance_monitoring_unit(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "performance_monitoring_unit", value) + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[pulumi.Input[int]]: @@ -13765,7 +13897,7 @@ class InstanceFromTemplateNetworkInterfaceArgsDict(TypedDict): """ nic_type: NotRequired[pulumi.Input[str]] """ - 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 """ queue_count: NotRequired[pulumi.Input[int]] """ @@ -13821,7 +13953,7 @@ def __init__(__self__, *, :param pulumi.Input[str] network: The name or self_link of the network attached to this interface. :param pulumi.Input[str] network_attachment: The URL of the network attachment that this interface should connect to in the following format: projects/{projectNumber}/regions/{region_name}/networkAttachments/{network_attachment_name}. :param pulumi.Input[str] network_ip: The private IP address assigned to the instance. - :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA :param pulumi.Input[int] queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param pulumi.Input[str] security_policy: A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. If not specified, IPV4_ONLY will be used. @@ -13986,7 +14118,7 @@ def network_ip(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="nicType") def nic_type(self) -> Optional[pulumi.Input[str]]: """ - 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 """ return pulumi.get(self, "nic_type") @@ -16523,7 +16655,7 @@ class InstanceNetworkInterfaceArgsDict(TypedDict): """ nic_type: NotRequired[pulumi.Input[str]] """ - 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. """ queue_count: NotRequired[pulumi.Input[int]] """ @@ -16596,7 +16728,7 @@ def __init__(__self__, *, :param pulumi.Input[str] network_attachment: The URL of the network attachment that this interface should connect to in the following format: `projects/{projectNumber}/regions/{region_name}/networkAttachments/{network_attachment_name}`. :param pulumi.Input[str] network_ip: The private IP address to assign to the instance. If empty, the address will be automatically assigned. - :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. + :param pulumi.Input[str] nic_type: 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. :param pulumi.Input[int] queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param pulumi.Input[str] security_policy: A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. @@ -16778,7 +16910,7 @@ def network_ip(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="nicType") def nic_type(self) -> Optional[pulumi.Input[str]]: """ - 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. """ return pulumi.get(self, "nic_type") @@ -18113,6 +18245,14 @@ class InstanceTemplateAdvancedMachineFeaturesArgsDict(TypedDict): """ Defines whether the instance should have nested virtualization enabled. Defaults to false. """ + enable_uefi_networking: NotRequired[pulumi.Input[bool]] + """ + Whether to enable UEFI networking for instance creation. + """ + performance_monitoring_unit: NotRequired[pulumi.Input[str]] + """ + [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`. + """ threads_per_core: NotRequired[pulumi.Input[int]] """ 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. @@ -18132,17 +18272,25 @@ class InstanceTemplateAdvancedMachineFeaturesArgsDict(TypedDict): class InstanceTemplateAdvancedMachineFeaturesArgs: def __init__(__self__, *, enable_nested_virtualization: Optional[pulumi.Input[bool]] = None, + enable_uefi_networking: Optional[pulumi.Input[bool]] = None, + performance_monitoring_unit: Optional[pulumi.Input[str]] = None, threads_per_core: Optional[pulumi.Input[int]] = None, turbo_mode: Optional[pulumi.Input[str]] = None, visible_core_count: Optional[pulumi.Input[int]] = None): """ :param pulumi.Input[bool] enable_nested_virtualization: Defines whether the instance should have nested virtualization enabled. Defaults to false. + :param pulumi.Input[bool] enable_uefi_networking: Whether to enable UEFI networking for instance creation. + :param pulumi.Input[str] performance_monitoring_unit: [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`. :param pulumi.Input[int] threads_per_core: 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. :param pulumi.Input[str] turbo_mode: Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). :param pulumi.Input[int] visible_core_count: The number of physical cores to expose to an instance. [visible cores info (VC)](https://cloud.google.com/compute/docs/instances/customize-visible-cores). """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -18162,6 +18310,30 @@ def enable_nested_virtualization(self) -> Optional[pulumi.Input[bool]]: def enable_nested_virtualization(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "enable_nested_virtualization", value) + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[pulumi.Input[bool]]: + """ + Whether to enable UEFI networking for instance creation. + """ + return pulumi.get(self, "enable_uefi_networking") + + @enable_uefi_networking.setter + def enable_uefi_networking(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_uefi_networking", value) + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[pulumi.Input[str]]: + """ + [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`. + """ + return pulumi.get(self, "performance_monitoring_unit") + + @performance_monitoring_unit.setter + def performance_monitoring_unit(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "performance_monitoring_unit", value) + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[pulumi.Input[int]]: @@ -19050,7 +19222,7 @@ class InstanceTemplateNetworkInterfaceArgsDict(TypedDict): """ nic_type: NotRequired[pulumi.Input[str]] """ - 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. """ queue_count: NotRequired[pulumi.Input[int]] """ @@ -19116,7 +19288,7 @@ def __init__(__self__, *, :param pulumi.Input[str] network_attachment: The URL of the network attachment that this interface should connect to in the following format: projects/{projectNumber}/regions/{region_name}/networkAttachments/{network_attachment_name}. :param pulumi.Input[str] network_ip: The private IP address to assign to the instance. If empty, the address will be automatically assigned. - :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + :param pulumi.Input[str] nic_type: 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. :param pulumi.Input[int] queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param pulumi.Input[str] subnetwork: the name of the subnetwork to attach this interface @@ -19293,7 +19465,7 @@ def network_ip(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="nicType") def nic_type(self) -> Optional[pulumi.Input[str]]: """ - 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. """ return pulumi.get(self, "nic_type") @@ -31678,6 +31850,14 @@ class RegionInstanceTemplateAdvancedMachineFeaturesArgsDict(TypedDict): """ Defines whether the instance should have nested virtualization enabled. Defaults to false. """ + enable_uefi_networking: NotRequired[pulumi.Input[bool]] + """ + Whether to enable UEFI networking for instance creation. + """ + performance_monitoring_unit: NotRequired[pulumi.Input[str]] + """ + [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`. + """ threads_per_core: NotRequired[pulumi.Input[int]] """ 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. @@ -31697,17 +31877,25 @@ class RegionInstanceTemplateAdvancedMachineFeaturesArgsDict(TypedDict): class RegionInstanceTemplateAdvancedMachineFeaturesArgs: def __init__(__self__, *, enable_nested_virtualization: Optional[pulumi.Input[bool]] = None, + enable_uefi_networking: Optional[pulumi.Input[bool]] = None, + performance_monitoring_unit: Optional[pulumi.Input[str]] = None, threads_per_core: Optional[pulumi.Input[int]] = None, turbo_mode: Optional[pulumi.Input[str]] = None, visible_core_count: Optional[pulumi.Input[int]] = None): """ :param pulumi.Input[bool] enable_nested_virtualization: Defines whether the instance should have nested virtualization enabled. Defaults to false. + :param pulumi.Input[bool] enable_uefi_networking: Whether to enable UEFI networking for instance creation. + :param pulumi.Input[str] performance_monitoring_unit: [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`. :param pulumi.Input[int] threads_per_core: 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. :param pulumi.Input[str] turbo_mode: Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). :param pulumi.Input[int] visible_core_count: The number of physical cores to expose to an instance. [visible cores info (VC)](https://cloud.google.com/compute/docs/instances/customize-visible-cores). """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -31727,6 +31915,30 @@ def enable_nested_virtualization(self) -> Optional[pulumi.Input[bool]]: def enable_nested_virtualization(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "enable_nested_virtualization", value) + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[pulumi.Input[bool]]: + """ + Whether to enable UEFI networking for instance creation. + """ + return pulumi.get(self, "enable_uefi_networking") + + @enable_uefi_networking.setter + def enable_uefi_networking(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_uefi_networking", value) + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[pulumi.Input[str]]: + """ + [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`. + """ + return pulumi.get(self, "performance_monitoring_unit") + + @performance_monitoring_unit.setter + def performance_monitoring_unit(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "performance_monitoring_unit", value) + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[pulumi.Input[int]]: @@ -32602,7 +32814,7 @@ class RegionInstanceTemplateNetworkInterfaceArgsDict(TypedDict): """ nic_type: NotRequired[pulumi.Input[str]] """ - 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. """ queue_count: NotRequired[pulumi.Input[int]] """ @@ -32659,7 +32871,7 @@ def __init__(__self__, *, `subnetwork` for custom subnetted networks. :param pulumi.Input[str] network_ip: The private IP address to assign to the instance. If empty, the address will be automatically assigned. - :param pulumi.Input[str] nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + :param pulumi.Input[str] nic_type: 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. :param pulumi.Input[int] queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param pulumi.Input[str] stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param pulumi.Input[str] subnetwork: the name of the subnetwork to attach this interface @@ -32813,7 +33025,7 @@ def network_ip(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="nicType") def nic_type(self) -> Optional[pulumi.Input[str]]: """ - 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. """ return pulumi.get(self, "nic_type") @@ -34229,6 +34441,47 @@ def url_mask(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "url_mask", value) +if not MYPY: + class RegionNetworkEndpointGroupPscDataArgsDict(TypedDict): + producer_port: NotRequired[pulumi.Input[str]] + """ + 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. + """ +elif False: + RegionNetworkEndpointGroupPscDataArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RegionNetworkEndpointGroupPscDataArgs: + def __init__(__self__, *, + producer_port: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] producer_port: 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. + """ + if producer_port is not None: + pulumi.set(__self__, "producer_port", producer_port) + + @property + @pulumi.getter(name="producerPort") + def producer_port(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "producer_port") + + @producer_port.setter + def producer_port(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "producer_port", value) + + if not MYPY: class RegionNetworkEndpointGroupServerlessDeploymentArgsDict(TypedDict): platform: pulumi.Input[str] @@ -50750,6 +51003,10 @@ class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgsDict(Type """ Rule visibility. Supported values include: "STANDARD", "PREMIUM". """ + threshold_configs: NotRequired[pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgsDict']]]] + """ + Configuration options for layer7 adaptive protection for various customizable thresholds. + """ elif False: SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgsDict: TypeAlias = Mapping[str, Any] @@ -50757,15 +51014,19 @@ class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgsDict(Type class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs: def __init__(__self__, *, enable: Optional[pulumi.Input[bool]] = None, - rule_visibility: Optional[pulumi.Input[str]] = None): + rule_visibility: Optional[pulumi.Input[str]] = None, + threshold_configs: Optional[pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs']]]] = None): """ :param pulumi.Input[bool] enable: If set to true, enables CAAP for L7 DDoS detection. :param pulumi.Input[str] rule_visibility: Rule visibility. Supported values include: "STANDARD", "PREMIUM". + :param pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs']]] threshold_configs: Configuration options for layer7 adaptive protection for various customizable thresholds. """ if enable is not None: pulumi.set(__self__, "enable", enable) if rule_visibility is not None: pulumi.set(__self__, "rule_visibility", rule_visibility) + if threshold_configs is not None: + pulumi.set(__self__, "threshold_configs", threshold_configs) @property @pulumi.getter @@ -50791,6 +51052,286 @@ def rule_visibility(self) -> Optional[pulumi.Input[str]]: def rule_visibility(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "rule_visibility", value) + @property + @pulumi.getter(name="thresholdConfigs") + def threshold_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs']]]]: + """ + Configuration options for layer7 adaptive protection for various customizable thresholds. + """ + return pulumi.get(self, "threshold_configs") + + @threshold_configs.setter + def threshold_configs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs']]]]): + pulumi.set(self, "threshold_configs", value) + + +if not MYPY: + class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgsDict(TypedDict): + name: pulumi.Input[str] + """ + 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. + """ + auto_deploy_confidence_threshold: NotRequired[pulumi.Input[float]] + """ + Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + """ + auto_deploy_expiration_sec: NotRequired[pulumi.Input[int]] + """ + Duration over which Adaptive Protection's auto-deployed actions last. + """ + auto_deploy_impacted_baseline_threshold: NotRequired[pulumi.Input[float]] + """ + Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + """ + auto_deploy_load_threshold: NotRequired[pulumi.Input[float]] + """ + Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + """ + detection_absolute_qps: NotRequired[pulumi.Input[float]] + """ + Detection threshold based on absolute QPS. + """ + detection_load_threshold: NotRequired[pulumi.Input[float]] + """ + Detection threshold based on the backend service's load. + """ + detection_relative_to_baseline_qps: NotRequired[pulumi.Input[float]] + """ + Detection threshold based on QPS relative to the average of baseline traffic. + """ + traffic_granularity_configs: NotRequired[pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgsDict']]]] + """ + Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + """ +elif False: + SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs: + def __init__(__self__, *, + name: pulumi.Input[str], + auto_deploy_confidence_threshold: Optional[pulumi.Input[float]] = None, + auto_deploy_expiration_sec: Optional[pulumi.Input[int]] = None, + auto_deploy_impacted_baseline_threshold: Optional[pulumi.Input[float]] = None, + auto_deploy_load_threshold: Optional[pulumi.Input[float]] = None, + detection_absolute_qps: Optional[pulumi.Input[float]] = None, + detection_load_threshold: Optional[pulumi.Input[float]] = None, + detection_relative_to_baseline_qps: Optional[pulumi.Input[float]] = None, + traffic_granularity_configs: Optional[pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs']]]] = None): + """ + :param pulumi.Input[str] name: 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. + :param pulumi.Input[float] auto_deploy_confidence_threshold: Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + :param pulumi.Input[int] auto_deploy_expiration_sec: Duration over which Adaptive Protection's auto-deployed actions last. + :param pulumi.Input[float] auto_deploy_impacted_baseline_threshold: Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + :param pulumi.Input[float] auto_deploy_load_threshold: Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + :param pulumi.Input[float] detection_absolute_qps: Detection threshold based on absolute QPS. + :param pulumi.Input[float] detection_load_threshold: Detection threshold based on the backend service's load. + :param pulumi.Input[float] detection_relative_to_baseline_qps: Detection threshold based on QPS relative to the average of baseline traffic. + :param pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs']]] traffic_granularity_configs: Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + """ + pulumi.set(__self__, "name", name) + if auto_deploy_confidence_threshold is not None: + pulumi.set(__self__, "auto_deploy_confidence_threshold", auto_deploy_confidence_threshold) + if auto_deploy_expiration_sec is not None: + pulumi.set(__self__, "auto_deploy_expiration_sec", auto_deploy_expiration_sec) + if auto_deploy_impacted_baseline_threshold is not None: + pulumi.set(__self__, "auto_deploy_impacted_baseline_threshold", auto_deploy_impacted_baseline_threshold) + if auto_deploy_load_threshold is not None: + pulumi.set(__self__, "auto_deploy_load_threshold", auto_deploy_load_threshold) + if detection_absolute_qps is not None: + pulumi.set(__self__, "detection_absolute_qps", detection_absolute_qps) + if detection_load_threshold is not None: + pulumi.set(__self__, "detection_load_threshold", detection_load_threshold) + if detection_relative_to_baseline_qps is not None: + pulumi.set(__self__, "detection_relative_to_baseline_qps", detection_relative_to_baseline_qps) + if traffic_granularity_configs is not None: + pulumi.set(__self__, "traffic_granularity_configs", traffic_granularity_configs) + + @property + @pulumi.getter + def name(self) -> pulumi.Input[str]: + """ + 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. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: pulumi.Input[str]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="autoDeployConfidenceThreshold") + def auto_deploy_confidence_threshold(self) -> Optional[pulumi.Input[float]]: + """ + Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + """ + return pulumi.get(self, "auto_deploy_confidence_threshold") + + @auto_deploy_confidence_threshold.setter + def auto_deploy_confidence_threshold(self, value: Optional[pulumi.Input[float]]): + pulumi.set(self, "auto_deploy_confidence_threshold", value) + + @property + @pulumi.getter(name="autoDeployExpirationSec") + def auto_deploy_expiration_sec(self) -> Optional[pulumi.Input[int]]: + """ + Duration over which Adaptive Protection's auto-deployed actions last. + """ + return pulumi.get(self, "auto_deploy_expiration_sec") + + @auto_deploy_expiration_sec.setter + def auto_deploy_expiration_sec(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "auto_deploy_expiration_sec", value) + + @property + @pulumi.getter(name="autoDeployImpactedBaselineThreshold") + def auto_deploy_impacted_baseline_threshold(self) -> Optional[pulumi.Input[float]]: + """ + Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + """ + return pulumi.get(self, "auto_deploy_impacted_baseline_threshold") + + @auto_deploy_impacted_baseline_threshold.setter + def auto_deploy_impacted_baseline_threshold(self, value: Optional[pulumi.Input[float]]): + pulumi.set(self, "auto_deploy_impacted_baseline_threshold", value) + + @property + @pulumi.getter(name="autoDeployLoadThreshold") + def auto_deploy_load_threshold(self) -> Optional[pulumi.Input[float]]: + """ + Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + """ + return pulumi.get(self, "auto_deploy_load_threshold") + + @auto_deploy_load_threshold.setter + def auto_deploy_load_threshold(self, value: Optional[pulumi.Input[float]]): + pulumi.set(self, "auto_deploy_load_threshold", value) + + @property + @pulumi.getter(name="detectionAbsoluteQps") + def detection_absolute_qps(self) -> Optional[pulumi.Input[float]]: + """ + Detection threshold based on absolute QPS. + """ + return pulumi.get(self, "detection_absolute_qps") + + @detection_absolute_qps.setter + def detection_absolute_qps(self, value: Optional[pulumi.Input[float]]): + pulumi.set(self, "detection_absolute_qps", value) + + @property + @pulumi.getter(name="detectionLoadThreshold") + def detection_load_threshold(self) -> Optional[pulumi.Input[float]]: + """ + Detection threshold based on the backend service's load. + """ + return pulumi.get(self, "detection_load_threshold") + + @detection_load_threshold.setter + def detection_load_threshold(self, value: Optional[pulumi.Input[float]]): + pulumi.set(self, "detection_load_threshold", value) + + @property + @pulumi.getter(name="detectionRelativeToBaselineQps") + def detection_relative_to_baseline_qps(self) -> Optional[pulumi.Input[float]]: + """ + Detection threshold based on QPS relative to the average of baseline traffic. + """ + return pulumi.get(self, "detection_relative_to_baseline_qps") + + @detection_relative_to_baseline_qps.setter + def detection_relative_to_baseline_qps(self, value: Optional[pulumi.Input[float]]): + pulumi.set(self, "detection_relative_to_baseline_qps", value) + + @property + @pulumi.getter(name="trafficGranularityConfigs") + def traffic_granularity_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs']]]]: + """ + Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + """ + return pulumi.get(self, "traffic_granularity_configs") + + @traffic_granularity_configs.setter + def traffic_granularity_configs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs']]]]): + pulumi.set(self, "traffic_granularity_configs", value) + + +if not MYPY: + class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgsDict(TypedDict): + type: pulumi.Input[str] + """ + The type of this configuration, a granular traffic unit can be one of the following: + * `HTTP_HEADER_HOST` + * `HTTP_PATH` + """ + enable_each_unique_value: NotRequired[pulumi.Input[bool]] + """ + 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. + """ + value: NotRequired[pulumi.Input[str]] + """ + Requests that match this value constitute a granular traffic unit. + """ +elif False: + SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs: + def __init__(__self__, *, + type: pulumi.Input[str], + enable_each_unique_value: Optional[pulumi.Input[bool]] = None, + value: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] type: The type of this configuration, a granular traffic unit can be one of the following: + * `HTTP_HEADER_HOST` + * `HTTP_PATH` + :param pulumi.Input[bool] enable_each_unique_value: 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. + :param pulumi.Input[str] value: Requests that match this value constitute a granular traffic unit. + """ + pulumi.set(__self__, "type", type) + if enable_each_unique_value is not None: + pulumi.set(__self__, "enable_each_unique_value", enable_each_unique_value) + if value is not None: + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def type(self) -> pulumi.Input[str]: + """ + The type of this configuration, a granular traffic unit can be one of the following: + * `HTTP_HEADER_HOST` + * `HTTP_PATH` + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: pulumi.Input[str]): + pulumi.set(self, "type", value) + + @property + @pulumi.getter(name="enableEachUniqueValue") + def enable_each_unique_value(self) -> Optional[pulumi.Input[bool]]: + """ + 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. + """ + return pulumi.get(self, "enable_each_unique_value") + + @enable_each_unique_value.setter + def enable_each_unique_value(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_each_unique_value", value) + + @property + @pulumi.getter + def value(self) -> Optional[pulumi.Input[str]]: + """ + Requests that match this value constitute a granular traffic unit. + """ + return pulumi.get(self, "value") + + @value.setter + def value(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "value", value) + if not MYPY: class SecurityPolicyAdvancedOptionsConfigArgsDict(TypedDict): @@ -55729,7 +56270,7 @@ class URLMapPathMatcherArgsDict(TypedDict): """ default_custom_error_response_policy: NotRequired[pulumi.Input['URLMapPathMatcherDefaultCustomErrorResponsePolicyArgsDict']] """ - 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 @@ -55808,7 +56349,7 @@ def __init__(__self__, *, route_rules: Optional[pulumi.Input[Sequence[pulumi.Input['URLMapPathMatcherRouteRuleArgs']]]] = None): """ :param pulumi.Input[str] name: The name to which this PathMatcher is referred by the HostRule. - :param pulumi.Input['URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs'] default_custom_error_response_policy: defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + :param pulumi.Input['URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs'] default_custom_error_response_policy: 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 @@ -55883,7 +56424,7 @@ def name(self, value: pulumi.Input[str]): @pulumi.getter(name="defaultCustomErrorResponsePolicy") def default_custom_error_response_policy(self) -> Optional[pulumi.Input['URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs']]: """ - 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 @@ -57969,7 +58510,7 @@ class URLMapPathMatcherPathRuleArgsDict(TypedDict): """ custom_error_response_policy: NotRequired[pulumi.Input['URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgsDict']] """ - 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 @@ -58015,7 +58556,7 @@ def __init__(__self__, *, \\* is allowed is at the end following a /. The string fed to the path matcher does not include any text after the first ? or #, and those chars are not allowed here. - :param pulumi.Input['URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs'] custom_error_response_policy: customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + :param pulumi.Input['URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs'] custom_error_response_policy: 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 @@ -58065,7 +58606,7 @@ def paths(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): @pulumi.getter(name="customErrorResponsePolicy") def custom_error_response_policy(self) -> Optional[pulumi.Input['URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs']]: """ - 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/python/pulumi_gcp/compute/disk.py b/sdk/python/pulumi_gcp/compute/disk.py index 96c66dc276..ba81016644 100644 --- a/sdk/python/pulumi_gcp/compute/disk.py +++ b/sdk/python/pulumi_gcp/compute/disk.py @@ -152,10 +152,12 @@ def __init__(__self__, *, if the source snapshot is protected by a customer-supplied encryption key. Structure is documented below. - :param pulumi.Input[str] storage_pool: The URL of the storage pool in which the new disk is created. + :param pulumi.Input[str] storage_pool: 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} :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk. :param pulumi.Input[str] zone: A reference to the zone where the disk resides. @@ -565,10 +567,12 @@ def source_snapshot_encryption_key(self, value: Optional[pulumi.Input['DiskSourc @pulumi.getter(name="storagePool") def storage_pool(self) -> Optional[pulumi.Input[str]]: """ - 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} """ return pulumi.get(self, "storage_pool") @@ -772,10 +776,12 @@ def __init__(__self__, *, that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used. - :param pulumi.Input[str] storage_pool: The URL of the storage pool in which the new disk is created. + :param pulumi.Input[str] storage_pool: 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} :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk. :param pulumi.Input[Sequence[pulumi.Input[str]]] users: Links to the users of the disk (attached instances) in form: @@ -1356,10 +1362,12 @@ def source_snapshot_id(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="storagePool") def storage_pool(self) -> Optional[pulumi.Input[str]]: """ - 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} """ return pulumi.get(self, "storage_pool") @@ -1662,10 +1670,12 @@ def __init__(__self__, if the source snapshot is protected by a customer-supplied encryption key. Structure is documented below. - :param pulumi.Input[str] storage_pool: The URL of the storage pool in which the new disk is created. + :param pulumi.Input[str] storage_pool: 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} :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk. :param pulumi.Input[str] zone: A reference to the zone where the disk resides. @@ -2065,10 +2075,12 @@ def get(resource_name: str, that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used. - :param pulumi.Input[str] storage_pool: The URL of the storage pool in which the new disk is created. + :param pulumi.Input[str] storage_pool: 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} :param pulumi.Input[str] type: URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk. :param pulumi.Input[Sequence[pulumi.Input[str]]] users: Links to the users of the disk (attached instances) in form: @@ -2482,10 +2494,12 @@ def source_snapshot_id(self) -> pulumi.Output[str]: @pulumi.getter(name="storagePool") def storage_pool(self) -> pulumi.Output[Optional[str]]: """ - 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} """ return pulumi.get(self, "storage_pool") diff --git a/sdk/python/pulumi_gcp/compute/firewall_policy_rule.py b/sdk/python/pulumi_gcp/compute/firewall_policy_rule.py index 8e1bd0c66c..fb69136e00 100644 --- a/sdk/python/pulumi_gcp/compute/firewall_policy_rule.py +++ b/sdk/python/pulumi_gcp/compute/firewall_policy_rule.py @@ -524,6 +524,12 @@ def __init__(__self__, tls_inspect: Optional[pulumi.Input[bool]] = None, __props__=None): """ + 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 @@ -628,6 +634,12 @@ def __init__(__self__, args: FirewallPolicyRuleArgs, opts: Optional[pulumi.ResourceOptions] = None): """ + 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/python/pulumi_gcp/compute/get_forwarding_rules.py b/sdk/python/pulumi_gcp/compute/get_forwarding_rules.py index 6eff36ae6a..22c586b700 100644 --- a/sdk/python/pulumi_gcp/compute/get_forwarding_rules.py +++ b/sdk/python/pulumi_gcp/compute/get_forwarding_rules.py @@ -106,7 +106,7 @@ def get_forwarding_rules(project: Optional[str] = None, :param str project: The name of the project. :param str region: 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. """ __args__ = dict() __args__['project'] = project @@ -139,7 +139,7 @@ def get_forwarding_rules_output(project: Optional[pulumi.Input[Optional[str]]] = :param str project: The name of the project. :param str region: 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. """ __args__ = dict() __args__['project'] = project diff --git a/sdk/python/pulumi_gcp/compute/get_global_forwarding_rule.py b/sdk/python/pulumi_gcp/compute/get_global_forwarding_rule.py index 1c65d08ba4..9dd80218fa 100644 --- a/sdk/python/pulumi_gcp/compute/get_global_forwarding_rule.py +++ b/sdk/python/pulumi_gcp/compute/get_global_forwarding_rule.py @@ -27,7 +27,7 @@ class GetGlobalForwardingRuleResult: """ A collection of values returned by getGlobalForwardingRule. """ - def __init__(__self__, allow_psc_global_access=None, base_forwarding_rule=None, description=None, effective_labels=None, id=None, ip_address=None, ip_protocol=None, ip_version=None, label_fingerprint=None, labels=None, load_balancing_scheme=None, metadata_filters=None, name=None, network=None, no_automate_dns_zone=None, port_range=None, project=None, psc_connection_id=None, psc_connection_status=None, pulumi_labels=None, self_link=None, service_directory_registrations=None, source_ip_ranges=None, subnetwork=None, target=None): + def __init__(__self__, allow_psc_global_access=None, base_forwarding_rule=None, description=None, effective_labels=None, forwarding_rule_id=None, id=None, ip_address=None, ip_protocol=None, ip_version=None, label_fingerprint=None, labels=None, load_balancing_scheme=None, metadata_filters=None, name=None, network=None, no_automate_dns_zone=None, port_range=None, project=None, psc_connection_id=None, psc_connection_status=None, pulumi_labels=None, self_link=None, service_directory_registrations=None, source_ip_ranges=None, subnetwork=None, target=None): if allow_psc_global_access and not isinstance(allow_psc_global_access, bool): raise TypeError("Expected argument 'allow_psc_global_access' to be a bool") pulumi.set(__self__, "allow_psc_global_access", allow_psc_global_access) @@ -40,6 +40,9 @@ def __init__(__self__, allow_psc_global_access=None, base_forwarding_rule=None, if effective_labels and not isinstance(effective_labels, dict): raise TypeError("Expected argument 'effective_labels' to be a dict") pulumi.set(__self__, "effective_labels", effective_labels) + if forwarding_rule_id and not isinstance(forwarding_rule_id, int): + raise TypeError("Expected argument 'forwarding_rule_id' to be a int") + pulumi.set(__self__, "forwarding_rule_id", forwarding_rule_id) if id and not isinstance(id, str): raise TypeError("Expected argument 'id' to be a str") pulumi.set(__self__, "id", id) @@ -124,6 +127,11 @@ def description(self) -> str: def effective_labels(self) -> Mapping[str, str]: return pulumi.get(self, "effective_labels") + @property + @pulumi.getter(name="forwardingRuleId") + def forwarding_rule_id(self) -> int: + return pulumi.get(self, "forwarding_rule_id") + @property @pulumi.getter def id(self) -> str: @@ -243,6 +251,7 @@ def __await__(self): base_forwarding_rule=self.base_forwarding_rule, description=self.description, effective_labels=self.effective_labels, + forwarding_rule_id=self.forwarding_rule_id, id=self.id, ip_address=self.ip_address, ip_protocol=self.ip_protocol, @@ -299,6 +308,7 @@ def get_global_forwarding_rule(name: Optional[str] = None, base_forwarding_rule=pulumi.get(__ret__, 'base_forwarding_rule'), description=pulumi.get(__ret__, 'description'), effective_labels=pulumi.get(__ret__, 'effective_labels'), + forwarding_rule_id=pulumi.get(__ret__, 'forwarding_rule_id'), id=pulumi.get(__ret__, 'id'), ip_address=pulumi.get(__ret__, 'ip_address'), ip_protocol=pulumi.get(__ret__, 'ip_protocol'), @@ -352,6 +362,7 @@ def get_global_forwarding_rule_output(name: Optional[pulumi.Input[str]] = None, base_forwarding_rule=pulumi.get(__response__, 'base_forwarding_rule'), description=pulumi.get(__response__, 'description'), effective_labels=pulumi.get(__response__, 'effective_labels'), + forwarding_rule_id=pulumi.get(__response__, 'forwarding_rule_id'), id=pulumi.get(__response__, 'id'), ip_address=pulumi.get(__response__, 'ip_address'), ip_protocol=pulumi.get(__response__, 'ip_protocol'), diff --git a/sdk/python/pulumi_gcp/compute/get_instance_group_manager.py b/sdk/python/pulumi_gcp/compute/get_instance_group_manager.py index f8740b36c6..7892bc1b61 100644 --- a/sdk/python/pulumi_gcp/compute/get_instance_group_manager.py +++ b/sdk/python/pulumi_gcp/compute/get_instance_group_manager.py @@ -27,7 +27,7 @@ class GetInstanceGroupManagerResult: """ A collection of values returned by getInstanceGroupManager. """ - def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, base_instance_name=None, creation_timestamp=None, description=None, fingerprint=None, id=None, instance_group=None, instance_lifecycle_policies=None, list_managed_instances_results=None, name=None, named_ports=None, operation=None, params=None, project=None, self_link=None, standby_policies=None, stateful_disks=None, stateful_external_ips=None, stateful_internal_ips=None, statuses=None, target_pools=None, target_size=None, target_stopped_size=None, target_suspended_size=None, update_policies=None, versions=None, wait_for_instances=None, wait_for_instances_status=None, zone=None): + def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, base_instance_name=None, creation_timestamp=None, description=None, fingerprint=None, id=None, instance_group=None, instance_group_manager_id=None, instance_lifecycle_policies=None, list_managed_instances_results=None, name=None, named_ports=None, operation=None, params=None, project=None, self_link=None, standby_policies=None, stateful_disks=None, stateful_external_ips=None, stateful_internal_ips=None, statuses=None, target_pools=None, target_size=None, target_stopped_size=None, target_suspended_size=None, update_policies=None, versions=None, wait_for_instances=None, wait_for_instances_status=None, zone=None): if all_instances_configs and not isinstance(all_instances_configs, list): raise TypeError("Expected argument 'all_instances_configs' to be a list") pulumi.set(__self__, "all_instances_configs", all_instances_configs) @@ -52,6 +52,9 @@ def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, b if instance_group and not isinstance(instance_group, str): raise TypeError("Expected argument 'instance_group' to be a str") pulumi.set(__self__, "instance_group", instance_group) + if instance_group_manager_id and not isinstance(instance_group_manager_id, int): + raise TypeError("Expected argument 'instance_group_manager_id' to be a int") + pulumi.set(__self__, "instance_group_manager_id", instance_group_manager_id) if instance_lifecycle_policies and not isinstance(instance_lifecycle_policies, list): raise TypeError("Expected argument 'instance_lifecycle_policies' to be a list") pulumi.set(__self__, "instance_lifecycle_policies", instance_lifecycle_policies) @@ -162,6 +165,11 @@ def id(self) -> str: def instance_group(self) -> str: return pulumi.get(self, "instance_group") + @property + @pulumi.getter(name="instanceGroupManagerId") + def instance_group_manager_id(self) -> int: + return pulumi.get(self, "instance_group_manager_id") + @property @pulumi.getter(name="instanceLifecyclePolicies") def instance_lifecycle_policies(self) -> Sequence['outputs.GetInstanceGroupManagerInstanceLifecyclePolicyResult']: @@ -287,6 +295,7 @@ def __await__(self): fingerprint=self.fingerprint, id=self.id, instance_group=self.instance_group, + instance_group_manager_id=self.instance_group_manager_id, instance_lifecycle_policies=self.instance_lifecycle_policies, list_managed_instances_results=self.list_managed_instances_results, name=self.name, @@ -355,6 +364,7 @@ def get_instance_group_manager(name: Optional[str] = None, fingerprint=pulumi.get(__ret__, 'fingerprint'), id=pulumi.get(__ret__, 'id'), instance_group=pulumi.get(__ret__, 'instance_group'), + instance_group_manager_id=pulumi.get(__ret__, 'instance_group_manager_id'), instance_lifecycle_policies=pulumi.get(__ret__, 'instance_lifecycle_policies'), list_managed_instances_results=pulumi.get(__ret__, 'list_managed_instances_results'), name=pulumi.get(__ret__, 'name'), @@ -420,6 +430,7 @@ def get_instance_group_manager_output(name: Optional[pulumi.Input[Optional[str]] fingerprint=pulumi.get(__response__, 'fingerprint'), id=pulumi.get(__response__, 'id'), instance_group=pulumi.get(__response__, 'instance_group'), + instance_group_manager_id=pulumi.get(__response__, 'instance_group_manager_id'), instance_lifecycle_policies=pulumi.get(__response__, 'instance_lifecycle_policies'), list_managed_instances_results=pulumi.get(__response__, 'list_managed_instances_results'), name=pulumi.get(__response__, 'name'), diff --git a/sdk/python/pulumi_gcp/compute/get_network.py b/sdk/python/pulumi_gcp/compute/get_network.py index 3d82d0e918..302275dd78 100644 --- a/sdk/python/pulumi_gcp/compute/get_network.py +++ b/sdk/python/pulumi_gcp/compute/get_network.py @@ -26,7 +26,7 @@ class GetNetworkResult: """ A collection of values returned by getNetwork. """ - def __init__(__self__, description=None, gateway_ipv4=None, id=None, internal_ipv6_range=None, name=None, project=None, self_link=None, subnetworks_self_links=None): + def __init__(__self__, description=None, gateway_ipv4=None, id=None, internal_ipv6_range=None, name=None, network_profile=None, numeric_id=None, project=None, self_link=None, subnetworks_self_links=None): if description and not isinstance(description, str): raise TypeError("Expected argument 'description' to be a str") pulumi.set(__self__, "description", description) @@ -42,6 +42,12 @@ def __init__(__self__, description=None, gateway_ipv4=None, id=None, internal_ip if name and not isinstance(name, str): raise TypeError("Expected argument 'name' to be a str") pulumi.set(__self__, "name", name) + if network_profile and not isinstance(network_profile, str): + raise TypeError("Expected argument 'network_profile' to be a str") + pulumi.set(__self__, "network_profile", network_profile) + if numeric_id and not isinstance(numeric_id, str): + raise TypeError("Expected argument 'numeric_id' to be a str") + pulumi.set(__self__, "numeric_id", numeric_id) if project and not isinstance(project, str): raise TypeError("Expected argument 'project' to be a str") pulumi.set(__self__, "project", project) @@ -89,6 +95,22 @@ def internal_ipv6_range(self) -> str: def name(self) -> str: return pulumi.get(self, "name") + @property + @pulumi.getter(name="networkProfile") + def network_profile(self) -> Optional[str]: + """ + Beta A full or partial URL of the network profile to apply to this network. + """ + return pulumi.get(self, "network_profile") + + @property + @pulumi.getter(name="numericId") + def numeric_id(self) -> str: + """ + The numeric unique identifier for the resource. + """ + return pulumi.get(self, "numeric_id") + @property @pulumi.getter def project(self) -> Optional[str]: @@ -122,12 +144,15 @@ def __await__(self): id=self.id, internal_ipv6_range=self.internal_ipv6_range, name=self.name, + network_profile=self.network_profile, + numeric_id=self.numeric_id, project=self.project, self_link=self.self_link, subnetworks_self_links=self.subnetworks_self_links) def get_network(name: Optional[str] = None, + network_profile: Optional[str] = None, project: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetNetworkResult: """ @@ -147,11 +172,13 @@ def get_network(name: Optional[str] = None, - - - + :param str network_profile: Beta A full or partial URL of the network profile to apply to this network. :param str project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. """ __args__ = dict() __args__['name'] = name + __args__['networkProfile'] = network_profile __args__['project'] = project opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) __ret__ = pulumi.runtime.invoke('gcp:compute/getNetwork:getNetwork', __args__, opts=opts, typ=GetNetworkResult).value @@ -162,10 +189,13 @@ def get_network(name: Optional[str] = None, id=pulumi.get(__ret__, 'id'), internal_ipv6_range=pulumi.get(__ret__, 'internal_ipv6_range'), name=pulumi.get(__ret__, 'name'), + network_profile=pulumi.get(__ret__, 'network_profile'), + numeric_id=pulumi.get(__ret__, 'numeric_id'), project=pulumi.get(__ret__, 'project'), self_link=pulumi.get(__ret__, 'self_link'), subnetworks_self_links=pulumi.get(__ret__, 'subnetworks_self_links')) def get_network_output(name: Optional[pulumi.Input[str]] = None, + network_profile: Optional[pulumi.Input[Optional[str]]] = None, project: Optional[pulumi.Input[Optional[str]]] = None, opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetNetworkResult]: """ @@ -185,11 +215,13 @@ def get_network_output(name: Optional[pulumi.Input[str]] = None, - - - + :param str network_profile: Beta A full or partial URL of the network profile to apply to this network. :param str project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. """ __args__ = dict() __args__['name'] = name + __args__['networkProfile'] = network_profile __args__['project'] = project opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) __ret__ = pulumi.runtime.invoke_output('gcp:compute/getNetwork:getNetwork', __args__, opts=opts, typ=GetNetworkResult) @@ -199,6 +231,8 @@ def get_network_output(name: Optional[pulumi.Input[str]] = None, id=pulumi.get(__response__, 'id'), internal_ipv6_range=pulumi.get(__response__, 'internal_ipv6_range'), name=pulumi.get(__response__, 'name'), + network_profile=pulumi.get(__response__, 'network_profile'), + numeric_id=pulumi.get(__response__, 'numeric_id'), project=pulumi.get(__response__, 'project'), self_link=pulumi.get(__response__, 'self_link'), subnetworks_self_links=pulumi.get(__response__, 'subnetworks_self_links'))) diff --git a/sdk/python/pulumi_gcp/compute/get_region_instance_group_manager.py b/sdk/python/pulumi_gcp/compute/get_region_instance_group_manager.py index 537aa78c29..ee3b27587f 100644 --- a/sdk/python/pulumi_gcp/compute/get_region_instance_group_manager.py +++ b/sdk/python/pulumi_gcp/compute/get_region_instance_group_manager.py @@ -27,7 +27,7 @@ class GetRegionInstanceGroupManagerResult: """ A collection of values returned by getRegionInstanceGroupManager. """ - def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, base_instance_name=None, creation_timestamp=None, description=None, distribution_policy_target_shape=None, distribution_policy_zones=None, fingerprint=None, id=None, instance_flexibility_policies=None, instance_group=None, instance_lifecycle_policies=None, list_managed_instances_results=None, name=None, named_ports=None, params=None, project=None, region=None, self_link=None, standby_policies=None, stateful_disks=None, stateful_external_ips=None, stateful_internal_ips=None, statuses=None, target_pools=None, target_size=None, target_stopped_size=None, target_suspended_size=None, update_policies=None, versions=None, wait_for_instances=None, wait_for_instances_status=None): + def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, base_instance_name=None, creation_timestamp=None, description=None, distribution_policy_target_shape=None, distribution_policy_zones=None, fingerprint=None, id=None, instance_flexibility_policies=None, instance_group=None, instance_group_manager_id=None, instance_lifecycle_policies=None, list_managed_instances_results=None, name=None, named_ports=None, params=None, project=None, region=None, self_link=None, standby_policies=None, stateful_disks=None, stateful_external_ips=None, stateful_internal_ips=None, statuses=None, target_pools=None, target_size=None, target_stopped_size=None, target_suspended_size=None, update_policies=None, versions=None, wait_for_instances=None, wait_for_instances_status=None): if all_instances_configs and not isinstance(all_instances_configs, list): raise TypeError("Expected argument 'all_instances_configs' to be a list") pulumi.set(__self__, "all_instances_configs", all_instances_configs) @@ -61,6 +61,9 @@ def __init__(__self__, all_instances_configs=None, auto_healing_policies=None, b if instance_group and not isinstance(instance_group, str): raise TypeError("Expected argument 'instance_group' to be a str") pulumi.set(__self__, "instance_group", instance_group) + if instance_group_manager_id and not isinstance(instance_group_manager_id, int): + raise TypeError("Expected argument 'instance_group_manager_id' to be a int") + pulumi.set(__self__, "instance_group_manager_id", instance_group_manager_id) if instance_lifecycle_policies and not isinstance(instance_lifecycle_policies, list): raise TypeError("Expected argument 'instance_lifecycle_policies' to be a list") pulumi.set(__self__, "instance_lifecycle_policies", instance_lifecycle_policies) @@ -183,6 +186,11 @@ def instance_flexibility_policies(self) -> Sequence['outputs.GetRegionInstanceGr def instance_group(self) -> str: return pulumi.get(self, "instance_group") + @property + @pulumi.getter(name="instanceGroupManagerId") + def instance_group_manager_id(self) -> int: + return pulumi.get(self, "instance_group_manager_id") + @property @pulumi.getter(name="instanceLifecyclePolicies") def instance_lifecycle_policies(self) -> Sequence['outputs.GetRegionInstanceGroupManagerInstanceLifecyclePolicyResult']: @@ -306,6 +314,7 @@ def __await__(self): id=self.id, instance_flexibility_policies=self.instance_flexibility_policies, instance_group=self.instance_group, + instance_group_manager_id=self.instance_group_manager_id, instance_lifecycle_policies=self.instance_lifecycle_policies, list_managed_instances_results=self.list_managed_instances_results, name=self.name, @@ -376,6 +385,7 @@ def get_region_instance_group_manager(name: Optional[str] = None, id=pulumi.get(__ret__, 'id'), instance_flexibility_policies=pulumi.get(__ret__, 'instance_flexibility_policies'), instance_group=pulumi.get(__ret__, 'instance_group'), + instance_group_manager_id=pulumi.get(__ret__, 'instance_group_manager_id'), instance_lifecycle_policies=pulumi.get(__ret__, 'instance_lifecycle_policies'), list_managed_instances_results=pulumi.get(__ret__, 'list_managed_instances_results'), name=pulumi.get(__ret__, 'name'), @@ -443,6 +453,7 @@ def get_region_instance_group_manager_output(name: Optional[pulumi.Input[Optiona id=pulumi.get(__response__, 'id'), instance_flexibility_policies=pulumi.get(__response__, 'instance_flexibility_policies'), instance_group=pulumi.get(__response__, 'instance_group'), + instance_group_manager_id=pulumi.get(__response__, 'instance_group_manager_id'), instance_lifecycle_policies=pulumi.get(__response__, 'instance_lifecycle_policies'), list_managed_instances_results=pulumi.get(__response__, 'list_managed_instances_results'), name=pulumi.get(__response__, 'name'), diff --git a/sdk/python/pulumi_gcp/compute/get_region_network_endpoint_group.py b/sdk/python/pulumi_gcp/compute/get_region_network_endpoint_group.py index d2710983a2..f4000ff0ab 100644 --- a/sdk/python/pulumi_gcp/compute/get_region_network_endpoint_group.py +++ b/sdk/python/pulumi_gcp/compute/get_region_network_endpoint_group.py @@ -27,7 +27,7 @@ class GetRegionNetworkEndpointGroupResult: """ A collection of values returned by getRegionNetworkEndpointGroup. """ - def __init__(__self__, app_engines=None, cloud_functions=None, cloud_runs=None, description=None, id=None, name=None, network=None, network_endpoint_type=None, project=None, psc_target_service=None, region=None, self_link=None, serverless_deployments=None, subnetwork=None): + def __init__(__self__, app_engines=None, cloud_functions=None, cloud_runs=None, description=None, id=None, name=None, network=None, network_endpoint_type=None, project=None, psc_datas=None, psc_target_service=None, region=None, self_link=None, serverless_deployments=None, subnetwork=None): if app_engines and not isinstance(app_engines, list): raise TypeError("Expected argument 'app_engines' to be a list") pulumi.set(__self__, "app_engines", app_engines) @@ -55,6 +55,9 @@ def __init__(__self__, app_engines=None, cloud_functions=None, cloud_runs=None, if project and not isinstance(project, str): raise TypeError("Expected argument 'project' to be a str") pulumi.set(__self__, "project", project) + if psc_datas and not isinstance(psc_datas, list): + raise TypeError("Expected argument 'psc_datas' to be a list") + pulumi.set(__self__, "psc_datas", psc_datas) if psc_target_service and not isinstance(psc_target_service, str): raise TypeError("Expected argument 'psc_target_service' to be a str") pulumi.set(__self__, "psc_target_service", psc_target_service) @@ -128,6 +131,11 @@ def network_endpoint_type(self) -> str: def project(self) -> Optional[str]: return pulumi.get(self, "project") + @property + @pulumi.getter(name="pscDatas") + def psc_datas(self) -> Sequence['outputs.GetRegionNetworkEndpointGroupPscDataResult']: + return pulumi.get(self, "psc_datas") + @property @pulumi.getter(name="pscTargetService") def psc_target_service(self) -> str: @@ -175,6 +183,7 @@ def __await__(self): network=self.network, network_endpoint_type=self.network_endpoint_type, project=self.project, + psc_datas=self.psc_datas, psc_target_service=self.psc_target_service, region=self.region, self_link=self.self_link, @@ -227,6 +236,7 @@ def get_region_network_endpoint_group(name: Optional[str] = None, network=pulumi.get(__ret__, 'network'), network_endpoint_type=pulumi.get(__ret__, 'network_endpoint_type'), project=pulumi.get(__ret__, 'project'), + psc_datas=pulumi.get(__ret__, 'psc_datas'), psc_target_service=pulumi.get(__ret__, 'psc_target_service'), region=pulumi.get(__ret__, 'region'), self_link=pulumi.get(__ret__, 'self_link'), @@ -276,6 +286,7 @@ def get_region_network_endpoint_group_output(name: Optional[pulumi.Input[Optiona network=pulumi.get(__response__, 'network'), network_endpoint_type=pulumi.get(__response__, 'network_endpoint_type'), project=pulumi.get(__response__, 'project'), + psc_datas=pulumi.get(__response__, 'psc_datas'), psc_target_service=pulumi.get(__response__, 'psc_target_service'), region=pulumi.get(__response__, 'region'), self_link=pulumi.get(__response__, 'self_link'), diff --git a/sdk/python/pulumi_gcp/compute/global_forwarding_rule.py b/sdk/python/pulumi_gcp/compute/global_forwarding_rule.py index f49eb969a6..ecc8aa9535 100644 --- a/sdk/python/pulumi_gcp/compute/global_forwarding_rule.py +++ b/sdk/python/pulumi_gcp/compute/global_forwarding_rule.py @@ -532,6 +532,7 @@ def __init__(__self__, *, base_forwarding_rule: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + forwarding_rule_id: Optional[pulumi.Input[int]] = None, ip_address: Optional[pulumi.Input[str]] = None, ip_protocol: Optional[pulumi.Input[str]] = None, ip_version: Optional[pulumi.Input[str]] = None, @@ -559,6 +560,7 @@ def __init__(__self__, *, :param pulumi.Input[str] description: An optional description of this resource. Provide this property when you create the resource. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[int] forwarding_rule_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input[str] ip_address: IP address for which this forwarding rule accepts traffic. When a client sends traffic to this IP address, the forwarding rule directs the traffic to the referenced `target`. @@ -703,6 +705,8 @@ def __init__(__self__, *, pulumi.set(__self__, "description", description) if effective_labels is not None: pulumi.set(__self__, "effective_labels", effective_labels) + if forwarding_rule_id is not None: + pulumi.set(__self__, "forwarding_rule_id", forwarding_rule_id) if ip_address is not None: pulumi.set(__self__, "ip_address", ip_address) if ip_protocol is not None: @@ -793,6 +797,18 @@ def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[st def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "effective_labels", value) + @property + @pulumi.getter(name="forwardingRuleId") + def forwarding_rule_id(self) -> Optional[pulumi.Input[int]]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "forwarding_rule_id") + + @forwarding_rule_id.setter + def forwarding_rule_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "forwarding_rule_id", value) + @property @pulumi.getter(name="ipAddress") def ip_address(self) -> Optional[pulumi.Input[str]]: @@ -2120,6 +2136,7 @@ def _internal_init(__self__, __props__.__dict__["target"] = target __props__.__dict__["base_forwarding_rule"] = None __props__.__dict__["effective_labels"] = None + __props__.__dict__["forwarding_rule_id"] = None __props__.__dict__["label_fingerprint"] = None __props__.__dict__["psc_connection_id"] = None __props__.__dict__["psc_connection_status"] = None @@ -2141,6 +2158,7 @@ def get(resource_name: str, base_forwarding_rule: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + forwarding_rule_id: Optional[pulumi.Input[int]] = None, ip_address: Optional[pulumi.Input[str]] = None, ip_protocol: Optional[pulumi.Input[str]] = None, ip_version: Optional[pulumi.Input[str]] = None, @@ -2173,6 +2191,7 @@ def get(resource_name: str, :param pulumi.Input[str] description: An optional description of this resource. Provide this property when you create the resource. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[int] forwarding_rule_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input[str] ip_address: IP address for which this forwarding rule accepts traffic. When a client sends traffic to this IP address, the forwarding rule directs the traffic to the referenced `target`. @@ -2317,6 +2336,7 @@ def get(resource_name: str, __props__.__dict__["base_forwarding_rule"] = base_forwarding_rule __props__.__dict__["description"] = description __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["forwarding_rule_id"] = forwarding_rule_id __props__.__dict__["ip_address"] = ip_address __props__.__dict__["ip_protocol"] = ip_protocol __props__.__dict__["ip_version"] = ip_version @@ -2372,6 +2392,14 @@ def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: """ return pulumi.get(self, "effective_labels") + @property + @pulumi.getter(name="forwardingRuleId") + def forwarding_rule_id(self) -> pulumi.Output[int]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "forwarding_rule_id") + @property @pulumi.getter(name="ipAddress") def ip_address(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/compute/instance_group_manager.py b/sdk/python/pulumi_gcp/compute/instance_group_manager.py index b2986dd8da..a897febae5 100644 --- a/sdk/python/pulumi_gcp/compute/instance_group_manager.py +++ b/sdk/python/pulumi_gcp/compute/instance_group_manager.py @@ -470,6 +470,7 @@ def __init__(__self__, *, description: Optional[pulumi.Input[str]] = None, fingerprint: Optional[pulumi.Input[str]] = None, instance_group: Optional[pulumi.Input[str]] = None, + instance_group_manager_id: Optional[pulumi.Input[int]] = None, instance_lifecycle_policy: Optional[pulumi.Input['InstanceGroupManagerInstanceLifecyclePolicyArgs']] = None, list_managed_instances_results: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, @@ -510,6 +511,7 @@ def __init__(__self__, *, group manager. :param pulumi.Input[str] fingerprint: The fingerprint of the instance group manager. :param pulumi.Input[str] instance_group: The full URL of the instance group created by the manager. + :param pulumi.Input[int] instance_group_manager_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input['InstanceGroupManagerInstanceLifecyclePolicyArgs'] instance_lifecycle_policy: The instance lifecycle policy for this managed instance group. :param pulumi.Input[str] list_managed_instances_results: Pagination behavior of the `listManagedInstances` API method for this managed instance group. Valid values are: `PAGELESS`, `PAGINATED`. @@ -571,6 +573,8 @@ def __init__(__self__, *, pulumi.set(__self__, "fingerprint", fingerprint) if instance_group is not None: pulumi.set(__self__, "instance_group", instance_group) + if instance_group_manager_id is not None: + pulumi.set(__self__, "instance_group_manager_id", instance_group_manager_id) if instance_lifecycle_policy is not None: pulumi.set(__self__, "instance_lifecycle_policy", instance_lifecycle_policy) if list_managed_instances_results is not None: @@ -709,6 +713,18 @@ def instance_group(self) -> Optional[pulumi.Input[str]]: def instance_group(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "instance_group", value) + @property + @pulumi.getter(name="instanceGroupManagerId") + def instance_group_manager_id(self) -> Optional[pulumi.Input[int]]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "instance_group_manager_id") + + @instance_group_manager_id.setter + def instance_group_manager_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "instance_group_manager_id", value) + @property @pulumi.getter(name="instanceLifecyclePolicy") def instance_lifecycle_policy(self) -> Optional[pulumi.Input['InstanceGroupManagerInstanceLifecyclePolicyArgs']]: @@ -1428,6 +1444,7 @@ def _internal_init(__self__, __props__.__dict__["creation_timestamp"] = None __props__.__dict__["fingerprint"] = None __props__.__dict__["instance_group"] = None + __props__.__dict__["instance_group_manager_id"] = None __props__.__dict__["operation"] = None __props__.__dict__["self_link"] = None __props__.__dict__["statuses"] = None @@ -1448,6 +1465,7 @@ def get(resource_name: str, description: Optional[pulumi.Input[str]] = None, fingerprint: Optional[pulumi.Input[str]] = None, instance_group: Optional[pulumi.Input[str]] = None, + instance_group_manager_id: Optional[pulumi.Input[int]] = None, instance_lifecycle_policy: Optional[pulumi.Input[Union['InstanceGroupManagerInstanceLifecyclePolicyArgs', 'InstanceGroupManagerInstanceLifecyclePolicyArgsDict']]] = None, list_managed_instances_results: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, @@ -1493,6 +1511,7 @@ def get(resource_name: str, group manager. :param pulumi.Input[str] fingerprint: The fingerprint of the instance group manager. :param pulumi.Input[str] instance_group: The full URL of the instance group created by the manager. + :param pulumi.Input[int] instance_group_manager_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input[Union['InstanceGroupManagerInstanceLifecyclePolicyArgs', 'InstanceGroupManagerInstanceLifecyclePolicyArgsDict']] instance_lifecycle_policy: The instance lifecycle policy for this managed instance group. :param pulumi.Input[str] list_managed_instances_results: Pagination behavior of the `listManagedInstances` API method for this managed instance group. Valid values are: `PAGELESS`, `PAGINATED`. @@ -1551,6 +1570,7 @@ def get(resource_name: str, __props__.__dict__["description"] = description __props__.__dict__["fingerprint"] = fingerprint __props__.__dict__["instance_group"] = instance_group + __props__.__dict__["instance_group_manager_id"] = instance_group_manager_id __props__.__dict__["instance_lifecycle_policy"] = instance_lifecycle_policy __props__.__dict__["list_managed_instances_results"] = list_managed_instances_results __props__.__dict__["name"] = name @@ -1640,6 +1660,14 @@ def instance_group(self) -> pulumi.Output[str]: """ return pulumi.get(self, "instance_group") + @property + @pulumi.getter(name="instanceGroupManagerId") + def instance_group_manager_id(self) -> pulumi.Output[int]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "instance_group_manager_id") + @property @pulumi.getter(name="instanceLifecyclePolicy") def instance_lifecycle_policy(self) -> pulumi.Output['outputs.InstanceGroupManagerInstanceLifecyclePolicy']: diff --git a/sdk/python/pulumi_gcp/compute/network.py b/sdk/python/pulumi_gcp/compute/network.py index ab3caa0949..b82fff37f8 100644 --- a/sdk/python/pulumi_gcp/compute/network.py +++ b/sdk/python/pulumi_gcp/compute/network.py @@ -30,6 +30,7 @@ def __init__(__self__, *, mtu: Optional[pulumi.Input[int]] = None, name: Optional[pulumi.Input[str]] = None, network_firewall_policy_enforcement_order: Optional[pulumi.Input[str]] = None, + network_profile: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, routing_mode: Optional[pulumi.Input[str]] = None): """ @@ -74,6 +75,11 @@ def __init__(__self__, *, :param pulumi.Input[str] network_firewall_policy_enforcement_order: Set the order that Firewall Rules and Firewall Policies are evaluated. Default value is `AFTER_CLASSIC_FIREWALL`. Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. + :param pulumi.Input[str] network_profile: 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} :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] routing_mode: The network-wide routing mode to use. If set to `REGIONAL`, this @@ -105,6 +111,8 @@ def __init__(__self__, *, pulumi.set(__self__, "name", name) if network_firewall_policy_enforcement_order is not None: pulumi.set(__self__, "network_firewall_policy_enforcement_order", network_firewall_policy_enforcement_order) + if network_profile is not None: + pulumi.set(__self__, "network_profile", network_profile) if project is not None: pulumi.set(__self__, "project", project) if routing_mode is not None: @@ -271,6 +279,22 @@ def network_firewall_policy_enforcement_order(self) -> Optional[pulumi.Input[str def network_firewall_policy_enforcement_order(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "network_firewall_policy_enforcement_order", value) + @property + @pulumi.getter(name="networkProfile") + def network_profile(self) -> Optional[pulumi.Input[str]]: + """ + 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} + """ + return pulumi.get(self, "network_profile") + + @network_profile.setter + def network_profile(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "network_profile", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -317,6 +341,7 @@ def __init__(__self__, *, mtu: Optional[pulumi.Input[int]] = None, name: Optional[pulumi.Input[str]] = None, network_firewall_policy_enforcement_order: Optional[pulumi.Input[str]] = None, + network_profile: Optional[pulumi.Input[str]] = None, numeric_id: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, routing_mode: Optional[pulumi.Input[str]] = None, @@ -365,6 +390,11 @@ def __init__(__self__, *, :param pulumi.Input[str] network_firewall_policy_enforcement_order: Set the order that Firewall Rules and Firewall Policies are evaluated. Default value is `AFTER_CLASSIC_FIREWALL`. Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. + :param pulumi.Input[str] network_profile: 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} :param pulumi.Input[str] numeric_id: The unique identifier for the resource. This identifier is defined by the server. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. @@ -400,6 +430,8 @@ def __init__(__self__, *, pulumi.set(__self__, "name", name) if network_firewall_policy_enforcement_order is not None: pulumi.set(__self__, "network_firewall_policy_enforcement_order", network_firewall_policy_enforcement_order) + if network_profile is not None: + pulumi.set(__self__, "network_profile", network_profile) if numeric_id is not None: pulumi.set(__self__, "numeric_id", numeric_id) if project is not None: @@ -583,6 +615,22 @@ def network_firewall_policy_enforcement_order(self) -> Optional[pulumi.Input[str def network_firewall_policy_enforcement_order(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "network_firewall_policy_enforcement_order", value) + @property + @pulumi.getter(name="networkProfile") + def network_profile(self) -> Optional[pulumi.Input[str]]: + """ + 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} + """ + return pulumi.get(self, "network_profile") + + @network_profile.setter + def network_profile(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "network_profile", value) + @property @pulumi.getter(name="numericId") def numeric_id(self) -> Optional[pulumi.Input[str]]: @@ -654,6 +702,7 @@ def __init__(__self__, mtu: Optional[pulumi.Input[int]] = None, name: Optional[pulumi.Input[str]] = None, network_firewall_policy_enforcement_order: Optional[pulumi.Input[str]] = None, + network_profile: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, routing_mode: Optional[pulumi.Input[str]] = None, __props__=None): @@ -804,6 +853,11 @@ def __init__(__self__, :param pulumi.Input[str] network_firewall_policy_enforcement_order: Set the order that Firewall Rules and Firewall Policies are evaluated. Default value is `AFTER_CLASSIC_FIREWALL`. Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. + :param pulumi.Input[str] network_profile: 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} :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] routing_mode: The network-wide routing mode to use. If set to `REGIONAL`, this @@ -950,6 +1004,7 @@ def _internal_init(__self__, mtu: Optional[pulumi.Input[int]] = None, name: Optional[pulumi.Input[str]] = None, network_firewall_policy_enforcement_order: Optional[pulumi.Input[str]] = None, + network_profile: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, routing_mode: Optional[pulumi.Input[str]] = None, __props__=None): @@ -972,6 +1027,7 @@ def _internal_init(__self__, __props__.__dict__["mtu"] = mtu __props__.__dict__["name"] = name __props__.__dict__["network_firewall_policy_enforcement_order"] = network_firewall_policy_enforcement_order + __props__.__dict__["network_profile"] = network_profile __props__.__dict__["project"] = project __props__.__dict__["routing_mode"] = routing_mode __props__.__dict__["gateway_ipv4"] = None @@ -999,6 +1055,7 @@ def get(resource_name: str, mtu: Optional[pulumi.Input[int]] = None, name: Optional[pulumi.Input[str]] = None, network_firewall_policy_enforcement_order: Optional[pulumi.Input[str]] = None, + network_profile: Optional[pulumi.Input[str]] = None, numeric_id: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, routing_mode: Optional[pulumi.Input[str]] = None, @@ -1052,6 +1109,11 @@ def get(resource_name: str, :param pulumi.Input[str] network_firewall_policy_enforcement_order: Set the order that Firewall Rules and Firewall Policies are evaluated. Default value is `AFTER_CLASSIC_FIREWALL`. Possible values are: `BEFORE_CLASSIC_FIREWALL`, `AFTER_CLASSIC_FIREWALL`. + :param pulumi.Input[str] network_profile: 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} :param pulumi.Input[str] numeric_id: The unique identifier for the resource. This identifier is defined by the server. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. @@ -1079,6 +1141,7 @@ def get(resource_name: str, __props__.__dict__["mtu"] = mtu __props__.__dict__["name"] = name __props__.__dict__["network_firewall_policy_enforcement_order"] = network_firewall_policy_enforcement_order + __props__.__dict__["network_profile"] = network_profile __props__.__dict__["numeric_id"] = numeric_id __props__.__dict__["project"] = project __props__.__dict__["routing_mode"] = routing_mode @@ -1211,6 +1274,18 @@ def network_firewall_policy_enforcement_order(self) -> pulumi.Output[Optional[st """ return pulumi.get(self, "network_firewall_policy_enforcement_order") + @property + @pulumi.getter(name="networkProfile") + def network_profile(self) -> pulumi.Output[Optional[str]]: + """ + 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} + """ + return pulumi.get(self, "network_profile") + @property @pulumi.getter(name="numericId") def numeric_id(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/compute/outputs.py b/sdk/python/pulumi_gcp/compute/outputs.py index 12cff2499c..238cdacc11 100644 --- a/sdk/python/pulumi_gcp/compute/outputs.py +++ b/sdk/python/pulumi_gcp/compute/outputs.py @@ -337,6 +337,7 @@ 'RegionNetworkEndpointGroupAppEngine', 'RegionNetworkEndpointGroupCloudFunction', 'RegionNetworkEndpointGroupCloudRun', + 'RegionNetworkEndpointGroupPscData', 'RegionNetworkEndpointGroupServerlessDeployment', 'RegionNetworkFirewallPolicyRuleMatch', 'RegionNetworkFirewallPolicyRuleMatchLayer4Config', @@ -514,6 +515,8 @@ 'SecurityPolicyAdaptiveProtectionConfig', 'SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig', 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig', + 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig', + 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig', 'SecurityPolicyAdvancedOptionsConfig', 'SecurityPolicyAdvancedOptionsConfigJsonCustomConfig', 'SecurityPolicyRecaptchaOptionsConfig', @@ -802,6 +805,7 @@ 'GetRegionNetworkEndpointGroupAppEngineResult', 'GetRegionNetworkEndpointGroupCloudFunctionResult', 'GetRegionNetworkEndpointGroupCloudRunResult', + 'GetRegionNetworkEndpointGroupPscDataResult', 'GetRegionNetworkEndpointGroupServerlessDeploymentResult', 'GetReservationShareSettingResult', 'GetReservationShareSettingProjectMapResult', @@ -833,6 +837,8 @@ 'GetSecurityPolicyAdaptiveProtectionConfigResult', 'GetSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigResult', 'GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult', + 'GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigResult', + 'GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigResult', 'GetSecurityPolicyAdvancedOptionsConfigResult', 'GetSecurityPolicyAdvancedOptionsConfigJsonCustomConfigResult', 'GetSecurityPolicyRecaptchaOptionsConfigResult', @@ -7207,6 +7213,10 @@ def __key_warning(key: str): suggest = None if key == "enableNestedVirtualization": suggest = "enable_nested_virtualization" + elif key == "enableUefiNetworking": + suggest = "enable_uefi_networking" + elif key == "performanceMonitoringUnit": + suggest = "performance_monitoring_unit" elif key == "threadsPerCore": suggest = "threads_per_core" elif key == "turboMode": @@ -7227,17 +7237,25 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, enable_nested_virtualization: Optional[bool] = None, + enable_uefi_networking: Optional[bool] = None, + performance_monitoring_unit: Optional[str] = None, threads_per_core: Optional[int] = None, turbo_mode: Optional[str] = None, visible_core_count: Optional[int] = None): """ :param bool enable_nested_virtualization: Defines whether the instance should have nested virtualization enabled. Defaults to false. + :param bool enable_uefi_networking: Whether to enable UEFI networking for instance creation. + :param str performance_monitoring_unit: [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`. :param int threads_per_core: 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. :param str turbo_mode: Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). :param int visible_core_count: The number of physical cores to expose to an instance. [visible cores info (VC)](https://cloud.google.com/compute/docs/instances/customize-visible-cores). """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -7253,6 +7271,22 @@ def enable_nested_virtualization(self) -> Optional[bool]: """ return pulumi.get(self, "enable_nested_virtualization") + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[bool]: + """ + Whether to enable UEFI networking for instance creation. + """ + return pulumi.get(self, "enable_uefi_networking") + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[str]: + """ + [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`. + """ + return pulumi.get(self, "performance_monitoring_unit") + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[int]: @@ -7645,10 +7679,12 @@ def __init__(__self__, *, :param str resource_policies: A list of self_links of resource policies to attach to the instance's boot disk. Modifying this list will cause the instance to recreate. Currently a max of 1 resource policy is supported. :param int size: The size of the image in gigabytes. If not specified, it will inherit the size of its base image. - :param str storage_pool: The URL of the storage pool in which the new disk is created. + :param str storage_pool: 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} :param str type: The GCE disk type. Such as pd-standard, pd-balanced or pd-ssd. """ if enable_confidential_compute is not None: @@ -7763,10 +7799,12 @@ def size(self) -> Optional[int]: @pulumi.getter(name="storagePool") def storage_pool(self) -> Optional[str]: """ - 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} """ return pulumi.get(self, "storage_pool") @@ -7836,6 +7874,10 @@ def __key_warning(key: str): suggest = None if key == "enableNestedVirtualization": suggest = "enable_nested_virtualization" + elif key == "enableUefiNetworking": + suggest = "enable_uefi_networking" + elif key == "performanceMonitoringUnit": + suggest = "performance_monitoring_unit" elif key == "threadsPerCore": suggest = "threads_per_core" elif key == "turboMode": @@ -7856,17 +7898,25 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, enable_nested_virtualization: Optional[bool] = None, + enable_uefi_networking: Optional[bool] = None, + performance_monitoring_unit: Optional[str] = None, threads_per_core: Optional[int] = None, turbo_mode: Optional[str] = None, visible_core_count: Optional[int] = None): """ :param bool enable_nested_virtualization: Whether to enable nested virtualization or not. + :param bool enable_uefi_networking: Whether to enable UEFI networking for the instance. + :param str performance_monitoring_unit: 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". :param int threads_per_core: 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. :param str turbo_mode: Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". :param int visible_core_count: The number of physical cores to expose to an instance. Multiply by the number of threads per core to compute the total number of virtual CPUs to expose to the instance. If unset, the number of cores is inferred from the instance\\'s nominal CPU count and the underlying platform\\'s SMT width. """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -7882,6 +7932,22 @@ def enable_nested_virtualization(self) -> Optional[bool]: """ return pulumi.get(self, "enable_nested_virtualization") + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[bool]: + """ + Whether to enable UEFI networking for the instance. + """ + return pulumi.get(self, "enable_uefi_networking") + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[str]: + """ + 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". + """ + return pulumi.get(self, "performance_monitoring_unit") + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[int]: @@ -8461,7 +8527,7 @@ def __init__(__self__, *, :param str network: The name or self_link of the network attached to this interface. :param str network_attachment: The URL of the network attachment that this interface should connect to in the following format: projects/{projectNumber}/regions/{region_name}/networkAttachments/{network_attachment_name}. :param str network_ip: The private IP address assigned to the instance. - :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param str security_policy: A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. If not specified, IPV4_ONLY will be used. @@ -8586,7 +8652,7 @@ def network_ip(self) -> Optional[str]: @pulumi.getter(name="nicType") def nic_type(self) -> Optional[str]: """ - 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 """ return pulumi.get(self, "nic_type") @@ -9498,6 +9564,10 @@ def __key_warning(key: str): suggest = None if key == "enableNestedVirtualization": suggest = "enable_nested_virtualization" + elif key == "enableUefiNetworking": + suggest = "enable_uefi_networking" + elif key == "performanceMonitoringUnit": + suggest = "performance_monitoring_unit" elif key == "threadsPerCore": suggest = "threads_per_core" elif key == "turboMode": @@ -9518,17 +9588,25 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, enable_nested_virtualization: Optional[bool] = None, + enable_uefi_networking: Optional[bool] = None, + performance_monitoring_unit: Optional[str] = None, threads_per_core: Optional[int] = None, turbo_mode: Optional[str] = None, visible_core_count: Optional[int] = None): """ :param bool enable_nested_virtualization: Whether to enable nested virtualization or not. + :param bool enable_uefi_networking: Whether to enable UEFI networking for the instance. + :param str performance_monitoring_unit: 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". :param int threads_per_core: 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. :param str turbo_mode: Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". :param int visible_core_count: The number of physical cores to expose to an instance. Multiply by the number of threads per core to compute the total number of virtual CPUs to expose to the instance. If unset, the number of cores is inferred from the instance\\'s nominal CPU count and the underlying platform\\'s SMT width. """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -9544,6 +9622,22 @@ def enable_nested_virtualization(self) -> Optional[bool]: """ return pulumi.get(self, "enable_nested_virtualization") + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[bool]: + """ + Whether to enable UEFI networking for the instance. + """ + return pulumi.get(self, "enable_uefi_networking") + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[str]: + """ + 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". + """ + return pulumi.get(self, "performance_monitoring_unit") + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[int]: @@ -10123,7 +10217,7 @@ def __init__(__self__, *, :param str network: The name or self_link of the network attached to this interface. :param str network_attachment: The URL of the network attachment that this interface should connect to in the following format: projects/{projectNumber}/regions/{region_name}/networkAttachments/{network_attachment_name}. :param str network_ip: The private IP address assigned to the instance. - :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param str security_policy: A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. If not specified, IPV4_ONLY will be used. @@ -10248,7 +10342,7 @@ def network_ip(self) -> Optional[str]: @pulumi.getter(name="nicType") def nic_type(self) -> Optional[str]: """ - 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 """ return pulumi.get(self, "nic_type") @@ -12290,7 +12384,7 @@ def __init__(__self__, *, :param str network_attachment: The URL of the network attachment that this interface should connect to in the following format: `projects/{projectNumber}/regions/{region_name}/networkAttachments/{network_attachment_name}`. :param str network_ip: The private IP address to assign to the instance. If empty, the address will be automatically assigned. - :param str nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET, IDPF. + :param str nic_type: 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. :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param str security_policy: A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. @@ -12432,7 +12526,7 @@ def network_ip(self) -> Optional[str]: @pulumi.getter(name="nicType") def nic_type(self) -> Optional[str]: """ - 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. """ return pulumi.get(self, "nic_type") @@ -13454,6 +13548,10 @@ def __key_warning(key: str): suggest = None if key == "enableNestedVirtualization": suggest = "enable_nested_virtualization" + elif key == "enableUefiNetworking": + suggest = "enable_uefi_networking" + elif key == "performanceMonitoringUnit": + suggest = "performance_monitoring_unit" elif key == "threadsPerCore": suggest = "threads_per_core" elif key == "turboMode": @@ -13474,17 +13572,25 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, enable_nested_virtualization: Optional[bool] = None, + enable_uefi_networking: Optional[bool] = None, + performance_monitoring_unit: Optional[str] = None, threads_per_core: Optional[int] = None, turbo_mode: Optional[str] = None, visible_core_count: Optional[int] = None): """ :param bool enable_nested_virtualization: Defines whether the instance should have nested virtualization enabled. Defaults to false. + :param bool enable_uefi_networking: Whether to enable UEFI networking for instance creation. + :param str performance_monitoring_unit: [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`. :param int threads_per_core: 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. :param str turbo_mode: Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). :param int visible_core_count: The number of physical cores to expose to an instance. [visible cores info (VC)](https://cloud.google.com/compute/docs/instances/customize-visible-cores). """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -13500,6 +13606,22 @@ def enable_nested_virtualization(self) -> Optional[bool]: """ return pulumi.get(self, "enable_nested_virtualization") + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[bool]: + """ + Whether to enable UEFI networking for instance creation. + """ + return pulumi.get(self, "enable_uefi_networking") + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[str]: + """ + [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`. + """ + return pulumi.get(self, "performance_monitoring_unit") + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[int]: @@ -14206,7 +14328,7 @@ def __init__(__self__, *, :param str network_attachment: The URL of the network attachment that this interface should connect to in the following format: projects/{projectNumber}/regions/{region_name}/networkAttachments/{network_attachment_name}. :param str network_ip: The private IP address to assign to the instance. If empty, the address will be automatically assigned. - :param str nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + :param str nic_type: 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. :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param str subnetwork: the name of the subnetwork to attach this interface @@ -14343,7 +14465,7 @@ def network_ip(self) -> Optional[str]: @pulumi.getter(name="nicType") def nic_type(self) -> Optional[str]: """ - 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. """ return pulumi.get(self, "nic_type") @@ -23591,6 +23713,10 @@ def __key_warning(key: str): suggest = None if key == "enableNestedVirtualization": suggest = "enable_nested_virtualization" + elif key == "enableUefiNetworking": + suggest = "enable_uefi_networking" + elif key == "performanceMonitoringUnit": + suggest = "performance_monitoring_unit" elif key == "threadsPerCore": suggest = "threads_per_core" elif key == "turboMode": @@ -23611,17 +23737,25 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, enable_nested_virtualization: Optional[bool] = None, + enable_uefi_networking: Optional[bool] = None, + performance_monitoring_unit: Optional[str] = None, threads_per_core: Optional[int] = None, turbo_mode: Optional[str] = None, visible_core_count: Optional[int] = None): """ :param bool enable_nested_virtualization: Defines whether the instance should have nested virtualization enabled. Defaults to false. + :param bool enable_uefi_networking: Whether to enable UEFI networking for instance creation. + :param str performance_monitoring_unit: [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`. :param int threads_per_core: 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. :param str turbo_mode: Turbo frequency mode to use for the instance. Supported modes are currently either `ALL_CORE_MAX` or unset (default). :param int visible_core_count: The number of physical cores to expose to an instance. [visible cores info (VC)](https://cloud.google.com/compute/docs/instances/customize-visible-cores). """ if enable_nested_virtualization is not None: pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + if enable_uefi_networking is not None: + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + if performance_monitoring_unit is not None: + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) if threads_per_core is not None: pulumi.set(__self__, "threads_per_core", threads_per_core) if turbo_mode is not None: @@ -23637,6 +23771,22 @@ def enable_nested_virtualization(self) -> Optional[bool]: """ return pulumi.get(self, "enable_nested_virtualization") + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> Optional[bool]: + """ + Whether to enable UEFI networking for instance creation. + """ + return pulumi.get(self, "enable_uefi_networking") + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> Optional[str]: + """ + [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`. + """ + return pulumi.get(self, "performance_monitoring_unit") + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> Optional[int]: @@ -24332,7 +24482,7 @@ def __init__(__self__, *, `subnetwork` for custom subnetted networks. :param str network_ip: The private IP address to assign to the instance. If empty, the address will be automatically assigned. - :param str nic_type: The type of vNIC to be used on this interface. Possible values: GVNIC, VIRTIO_NET. + :param str nic_type: 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. :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. Values are IPV4_IPV6 or IPV4_ONLY. If not specified, IPV4_ONLY will be used. :param str subnetwork: the name of the subnetwork to attach this interface @@ -24450,7 +24600,7 @@ def network_ip(self) -> Optional[str]: @pulumi.getter(name="nicType") def nic_type(self) -> Optional[str]: """ - 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. """ return pulumi.get(self, "nic_type") @@ -25533,6 +25683,48 @@ def url_mask(self) -> Optional[str]: return pulumi.get(self, "url_mask") +@pulumi.output_type +class RegionNetworkEndpointGroupPscData(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "producerPort": + suggest = "producer_port" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RegionNetworkEndpointGroupPscData. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RegionNetworkEndpointGroupPscData.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RegionNetworkEndpointGroupPscData.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + producer_port: Optional[str] = None): + """ + :param str producer_port: 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. + """ + if producer_port is not None: + pulumi.set(__self__, "producer_port", producer_port) + + @property + @pulumi.getter(name="producerPort") + def producer_port(self) -> Optional[str]: + """ + 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. + """ + return pulumi.get(self, "producer_port") + + @pulumi.output_type class RegionNetworkEndpointGroupServerlessDeployment(dict): @staticmethod @@ -38442,6 +38634,8 @@ def __key_warning(key: str): suggest = None if key == "ruleVisibility": suggest = "rule_visibility" + elif key == "thresholdConfigs": + suggest = "threshold_configs" if suggest: pulumi.log.warn(f"Key '{key}' not found in SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig. Access the value via the '{suggest}' property getter instead.") @@ -38456,15 +38650,19 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, enable: Optional[bool] = None, - rule_visibility: Optional[str] = None): + rule_visibility: Optional[str] = None, + threshold_configs: Optional[Sequence['outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig']] = None): """ :param bool enable: If set to true, enables CAAP for L7 DDoS detection. :param str rule_visibility: Rule visibility. Supported values include: "STANDARD", "PREMIUM". + :param Sequence['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs'] threshold_configs: Configuration options for layer7 adaptive protection for various customizable thresholds. """ if enable is not None: pulumi.set(__self__, "enable", enable) if rule_visibility is not None: pulumi.set(__self__, "rule_visibility", rule_visibility) + if threshold_configs is not None: + pulumi.set(__self__, "threshold_configs", threshold_configs) @property @pulumi.getter @@ -38482,6 +38680,222 @@ def rule_visibility(self) -> Optional[str]: """ return pulumi.get(self, "rule_visibility") + @property + @pulumi.getter(name="thresholdConfigs") + def threshold_configs(self) -> Optional[Sequence['outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig']]: + """ + Configuration options for layer7 adaptive protection for various customizable thresholds. + """ + return pulumi.get(self, "threshold_configs") + + +@pulumi.output_type +class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "autoDeployConfidenceThreshold": + suggest = "auto_deploy_confidence_threshold" + elif key == "autoDeployExpirationSec": + suggest = "auto_deploy_expiration_sec" + elif key == "autoDeployImpactedBaselineThreshold": + suggest = "auto_deploy_impacted_baseline_threshold" + elif key == "autoDeployLoadThreshold": + suggest = "auto_deploy_load_threshold" + elif key == "detectionAbsoluteQps": + suggest = "detection_absolute_qps" + elif key == "detectionLoadThreshold": + suggest = "detection_load_threshold" + elif key == "detectionRelativeToBaselineQps": + suggest = "detection_relative_to_baseline_qps" + elif key == "trafficGranularityConfigs": + suggest = "traffic_granularity_configs" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + name: str, + auto_deploy_confidence_threshold: Optional[float] = None, + auto_deploy_expiration_sec: Optional[int] = None, + auto_deploy_impacted_baseline_threshold: Optional[float] = None, + auto_deploy_load_threshold: Optional[float] = None, + detection_absolute_qps: Optional[float] = None, + detection_load_threshold: Optional[float] = None, + detection_relative_to_baseline_qps: Optional[float] = None, + traffic_granularity_configs: Optional[Sequence['outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig']] = None): + """ + :param str name: 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. + :param float auto_deploy_confidence_threshold: Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + :param int auto_deploy_expiration_sec: Duration over which Adaptive Protection's auto-deployed actions last. + :param float auto_deploy_impacted_baseline_threshold: Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + :param float auto_deploy_load_threshold: Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + :param float detection_absolute_qps: Detection threshold based on absolute QPS. + :param float detection_load_threshold: Detection threshold based on the backend service's load. + :param float detection_relative_to_baseline_qps: Detection threshold based on QPS relative to the average of baseline traffic. + :param Sequence['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigArgs'] traffic_granularity_configs: Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + """ + pulumi.set(__self__, "name", name) + if auto_deploy_confidence_threshold is not None: + pulumi.set(__self__, "auto_deploy_confidence_threshold", auto_deploy_confidence_threshold) + if auto_deploy_expiration_sec is not None: + pulumi.set(__self__, "auto_deploy_expiration_sec", auto_deploy_expiration_sec) + if auto_deploy_impacted_baseline_threshold is not None: + pulumi.set(__self__, "auto_deploy_impacted_baseline_threshold", auto_deploy_impacted_baseline_threshold) + if auto_deploy_load_threshold is not None: + pulumi.set(__self__, "auto_deploy_load_threshold", auto_deploy_load_threshold) + if detection_absolute_qps is not None: + pulumi.set(__self__, "detection_absolute_qps", detection_absolute_qps) + if detection_load_threshold is not None: + pulumi.set(__self__, "detection_load_threshold", detection_load_threshold) + if detection_relative_to_baseline_qps is not None: + pulumi.set(__self__, "detection_relative_to_baseline_qps", detection_relative_to_baseline_qps) + if traffic_granularity_configs is not None: + pulumi.set(__self__, "traffic_granularity_configs", traffic_granularity_configs) + + @property + @pulumi.getter + def name(self) -> str: + """ + 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. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="autoDeployConfidenceThreshold") + def auto_deploy_confidence_threshold(self) -> Optional[float]: + """ + Confidence threshold above which Adaptive Protection's auto-deploy takes actions. + """ + return pulumi.get(self, "auto_deploy_confidence_threshold") + + @property + @pulumi.getter(name="autoDeployExpirationSec") + def auto_deploy_expiration_sec(self) -> Optional[int]: + """ + Duration over which Adaptive Protection's auto-deployed actions last. + """ + return pulumi.get(self, "auto_deploy_expiration_sec") + + @property + @pulumi.getter(name="autoDeployImpactedBaselineThreshold") + def auto_deploy_impacted_baseline_threshold(self) -> Optional[float]: + """ + Impacted baseline threshold below which Adaptive Protection's auto-deploy takes actions. + """ + return pulumi.get(self, "auto_deploy_impacted_baseline_threshold") + + @property + @pulumi.getter(name="autoDeployLoadThreshold") + def auto_deploy_load_threshold(self) -> Optional[float]: + """ + Load threshold above which Adaptive Protection automatically deploy threshold based on the backend load threshold and detect a new rule during an alerted attack. + """ + return pulumi.get(self, "auto_deploy_load_threshold") + + @property + @pulumi.getter(name="detectionAbsoluteQps") + def detection_absolute_qps(self) -> Optional[float]: + """ + Detection threshold based on absolute QPS. + """ + return pulumi.get(self, "detection_absolute_qps") + + @property + @pulumi.getter(name="detectionLoadThreshold") + def detection_load_threshold(self) -> Optional[float]: + """ + Detection threshold based on the backend service's load. + """ + return pulumi.get(self, "detection_load_threshold") + + @property + @pulumi.getter(name="detectionRelativeToBaselineQps") + def detection_relative_to_baseline_qps(self) -> Optional[float]: + """ + Detection threshold based on QPS relative to the average of baseline traffic. + """ + return pulumi.get(self, "detection_relative_to_baseline_qps") + + @property + @pulumi.getter(name="trafficGranularityConfigs") + def traffic_granularity_configs(self) -> Optional[Sequence['outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig']]: + """ + Configuration options for enabling Adaptive Protection to work on the specified service granularity. Structure is documented below. + """ + return pulumi.get(self, "traffic_granularity_configs") + + +@pulumi.output_type +class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "enableEachUniqueValue": + suggest = "enable_each_unique_value" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + type: str, + enable_each_unique_value: Optional[bool] = None, + value: Optional[str] = None): + """ + :param str type: The type of this configuration, a granular traffic unit can be one of the following: + * `HTTP_HEADER_HOST` + * `HTTP_PATH` + :param bool enable_each_unique_value: 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. + :param str value: Requests that match this value constitute a granular traffic unit. + """ + pulumi.set(__self__, "type", type) + if enable_each_unique_value is not None: + pulumi.set(__self__, "enable_each_unique_value", enable_each_unique_value) + if value is not None: + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def type(self) -> str: + """ + The type of this configuration, a granular traffic unit can be one of the following: + * `HTTP_HEADER_HOST` + * `HTTP_PATH` + """ + return pulumi.get(self, "type") + + @property + @pulumi.getter(name="enableEachUniqueValue") + def enable_each_unique_value(self) -> Optional[bool]: + """ + 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. + """ + return pulumi.get(self, "enable_each_unique_value") + + @property + @pulumi.getter + def value(self) -> Optional[str]: + """ + Requests that match this value constitute a granular traffic unit. + """ + return pulumi.get(self, "value") + @pulumi.output_type class SecurityPolicyAdvancedOptionsConfig(dict): @@ -42363,7 +42777,7 @@ def __init__(__self__, *, route_rules: Optional[Sequence['outputs.URLMapPathMatcherRouteRule']] = None): """ :param str name: The name to which this PathMatcher is referred by the HostRule. - :param 'URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs' default_custom_error_response_policy: defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + :param 'URLMapPathMatcherDefaultCustomErrorResponsePolicyArgs' default_custom_error_response_policy: 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 @@ -42434,7 +42848,7 @@ def name(self) -> str: @pulumi.getter(name="defaultCustomErrorResponsePolicy") def default_custom_error_response_policy(self) -> Optional['outputs.URLMapPathMatcherDefaultCustomErrorResponsePolicy']: """ - 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 @@ -44101,7 +44515,7 @@ def __init__(__self__, *, \\* is allowed is at the end following a /. The string fed to the path matcher does not include any text after the first ? or #, and those chars are not allowed here. - :param 'URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs' custom_error_response_policy: customErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + :param 'URLMapPathMatcherPathRuleCustomErrorResponsePolicyArgs' custom_error_response_policy: 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 @@ -44147,7 +44561,7 @@ def paths(self) -> Sequence[str]: @pulumi.getter(name="customErrorResponsePolicy") def custom_error_response_policy(self) -> Optional['outputs.URLMapPathMatcherPathRuleCustomErrorResponsePolicy']: """ - 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 @@ -50025,7 +50439,7 @@ def __init__(__self__, *, and default labels configured on the provider. :param str region: 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. :param str self_link: The URI of the resource. :param Sequence['GetForwardingRulesRuleServiceDirectoryRegistrationArgs'] service_directory_registrations: Service Directory resources to register this forwarding rule with. @@ -50487,7 +50901,7 @@ def region(self) -> str: """ 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. """ return pulumi.get(self, "region") @@ -51501,16 +51915,22 @@ def response(self) -> str: class GetInstanceAdvancedMachineFeatureResult(dict): def __init__(__self__, *, enable_nested_virtualization: bool, + enable_uefi_networking: bool, + performance_monitoring_unit: str, threads_per_core: int, turbo_mode: str, visible_core_count: int): """ :param bool enable_nested_virtualization: Whether to enable nested virtualization or not. + :param bool enable_uefi_networking: Whether to enable UEFI networking for the instance. + :param str performance_monitoring_unit: 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". :param int threads_per_core: 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. :param str turbo_mode: Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". :param int visible_core_count: The number of physical cores to expose to an instance. Multiply by the number of threads per core to compute the total number of virtual CPUs to expose to the instance. If unset, the number of cores is inferred from the instance\\'s nominal CPU count and the underlying platform\\'s SMT width. """ pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) pulumi.set(__self__, "threads_per_core", threads_per_core) pulumi.set(__self__, "turbo_mode", turbo_mode) pulumi.set(__self__, "visible_core_count", visible_core_count) @@ -51523,6 +51943,22 @@ def enable_nested_virtualization(self) -> bool: """ return pulumi.get(self, "enable_nested_virtualization") + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> bool: + """ + Whether to enable UEFI networking for the instance. + """ + return pulumi.get(self, "enable_uefi_networking") + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> str: + """ + 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". + """ + return pulumi.get(self, "performance_monitoring_unit") + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> int: @@ -52588,7 +53024,7 @@ def __init__(__self__, *, :param str network: The name or self_link of the network attached to this interface. :param str network_attachment: Beta The URL of the network attachment to this interface. :param str network_ip: The internal ip address of the instance, either manually or dynamically assigned. - :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF + :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, IDPF, MRDMA, and IRDMA :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param str security_policy: A full or partial URL to a security policy to add to this instance. If this field is set to an empty string it will remove the associated security policy. :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. If not specified, IPV4_ONLY will be used. @@ -52697,7 +53133,7 @@ def network_ip(self) -> str: @pulumi.getter(name="nicType") def nic_type(self) -> str: """ - 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 """ return pulumi.get(self, "nic_type") @@ -53373,16 +53809,22 @@ def enable_vtpm(self) -> bool: class GetInstanceTemplateAdvancedMachineFeatureResult(dict): def __init__(__self__, *, enable_nested_virtualization: bool, + enable_uefi_networking: bool, + performance_monitoring_unit: str, threads_per_core: int, turbo_mode: str, visible_core_count: int): """ :param bool enable_nested_virtualization: Whether to enable nested virtualization or not. + :param bool enable_uefi_networking: Whether to enable UEFI networking or not. + :param str performance_monitoring_unit: 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". :param int threads_per_core: 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. :param str turbo_mode: Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". :param int visible_core_count: The number of physical cores to expose to an instance. Multiply by the number of threads per core to compute the total number of virtual CPUs to expose to the instance. If unset, the number of cores is inferred from the instance\\'s nominal CPU count and the underlying platform\\'s SMT width. """ pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) pulumi.set(__self__, "threads_per_core", threads_per_core) pulumi.set(__self__, "turbo_mode", turbo_mode) pulumi.set(__self__, "visible_core_count", visible_core_count) @@ -53395,6 +53837,22 @@ def enable_nested_virtualization(self) -> bool: """ return pulumi.get(self, "enable_nested_virtualization") + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> bool: + """ + Whether to enable UEFI networking or not. + """ + return pulumi.get(self, "enable_uefi_networking") + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> str: + """ + 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". + """ + return pulumi.get(self, "performance_monitoring_unit") + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> int: @@ -53902,7 +54360,7 @@ def __init__(__self__, *, :param str network_attachment: The URL of the network attachment that this interface should connect to in the following format: projects/{projectNumber}/regions/{region_name}/networkAttachments/{network_attachment_name}. :param str network_ip: The private IP address to assign to the instance. If empty, the address will be automatically assigned. - :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET + :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. If not specified, IPV4_ONLY will be used. :param str subnetwork: the name of the subnetwork to attach this interface @@ -54021,7 +54479,7 @@ def network_ip(self) -> str: @pulumi.getter(name="nicType") def nic_type(self) -> str: """ - 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 """ return pulumi.get(self, "nic_type") @@ -55709,16 +56167,22 @@ def percent(self) -> int: class GetRegionInstanceTemplateAdvancedMachineFeatureResult(dict): def __init__(__self__, *, enable_nested_virtualization: bool, + enable_uefi_networking: bool, + performance_monitoring_unit: str, threads_per_core: int, turbo_mode: str, visible_core_count: int): """ :param bool enable_nested_virtualization: Whether to enable nested virtualization or not. + :param bool enable_uefi_networking: Whether to enable UEFI networking or not. + :param str performance_monitoring_unit: 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". :param int threads_per_core: 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. :param str turbo_mode: Turbo frequency mode to use for the instance. Currently supported modes is "ALL_CORE_MAX". :param int visible_core_count: The number of physical cores to expose to an instance. Multiply by the number of threads per core to compute the total number of virtual CPUs to expose to the instance. If unset, the number of cores is inferred from the instance\\'s nominal CPU count and the underlying platform\\'s SMT width. """ pulumi.set(__self__, "enable_nested_virtualization", enable_nested_virtualization) + pulumi.set(__self__, "enable_uefi_networking", enable_uefi_networking) + pulumi.set(__self__, "performance_monitoring_unit", performance_monitoring_unit) pulumi.set(__self__, "threads_per_core", threads_per_core) pulumi.set(__self__, "turbo_mode", turbo_mode) pulumi.set(__self__, "visible_core_count", visible_core_count) @@ -55731,6 +56195,22 @@ def enable_nested_virtualization(self) -> bool: """ return pulumi.get(self, "enable_nested_virtualization") + @property + @pulumi.getter(name="enableUefiNetworking") + def enable_uefi_networking(self) -> bool: + """ + Whether to enable UEFI networking or not. + """ + return pulumi.get(self, "enable_uefi_networking") + + @property + @pulumi.getter(name="performanceMonitoringUnit") + def performance_monitoring_unit(self) -> str: + """ + 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". + """ + return pulumi.get(self, "performance_monitoring_unit") + @property @pulumi.getter(name="threadsPerCore") def threads_per_core(self) -> int: @@ -56230,7 +56710,7 @@ def __init__(__self__, *, `subnetwork` for custom subnetted networks. :param str network_ip: The private IP address to assign to the instance. If empty, the address will be automatically assigned. - :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET + :param str nic_type: The type of vNIC to be used on this interface. Possible values:GVNIC, VIRTIO_NET, MRDMA, and IRDMA :param int queue_count: The networking queue count that's specified by users for the network interface. Both Rx and Tx queues will be set to this number. It will be empty if not specified. :param str stack_type: The stack type for this network interface to identify whether the IPv6 feature is enabled or not. If not specified, IPV4_ONLY will be used. :param str subnetwork: the name of the subnetwork to attach this interface @@ -56332,7 +56812,7 @@ def network_ip(self) -> str: @pulumi.getter(name="nicType") def nic_type(self) -> str: """ - 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 """ return pulumi.get(self, "nic_type") @@ -57140,6 +57620,30 @@ def url_mask(self) -> str: return pulumi.get(self, "url_mask") +@pulumi.output_type +class GetRegionNetworkEndpointGroupPscDataResult(dict): + def __init__(__self__, *, + producer_port: str): + """ + :param str producer_port: 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. + """ + pulumi.set(__self__, "producer_port", producer_port) + + @property + @pulumi.getter(name="producerPort") + def producer_port(self) -> str: + """ + 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. + """ + return pulumi.get(self, "producer_port") + + @pulumi.output_type class GetRegionNetworkEndpointGroupServerlessDeploymentResult(dict): def __init__(__self__, *, @@ -58903,13 +59407,16 @@ def load_threshold(self) -> float: class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigResult(dict): def __init__(__self__, *, enable: bool, - rule_visibility: str): + rule_visibility: str, + threshold_configs: Sequence['outputs.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigResult']): """ :param bool enable: If set to true, enables CAAP for L7 DDoS detection. :param str rule_visibility: Rule visibility. Supported values include: "STANDARD", "PREMIUM". + :param Sequence['GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigArgs'] threshold_configs: Configuration options for layer7 adaptive protection for various customizable thresholds. """ pulumi.set(__self__, "enable", enable) pulumi.set(__self__, "rule_visibility", rule_visibility) + pulumi.set(__self__, "threshold_configs", threshold_configs) @property @pulumi.getter @@ -58927,6 +59434,128 @@ def rule_visibility(self) -> str: """ return pulumi.get(self, "rule_visibility") + @property + @pulumi.getter(name="thresholdConfigs") + def threshold_configs(self) -> Sequence['outputs.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigResult']: + """ + Configuration options for layer7 adaptive protection for various customizable thresholds. + """ + return pulumi.get(self, "threshold_configs") + + +@pulumi.output_type +class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigResult(dict): + def __init__(__self__, *, + auto_deploy_confidence_threshold: float, + auto_deploy_expiration_sec: int, + auto_deploy_impacted_baseline_threshold: float, + auto_deploy_load_threshold: float, + detection_absolute_qps: float, + detection_load_threshold: float, + detection_relative_to_baseline_qps: float, + name: str, + traffic_granularity_configs: Sequence['outputs.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigResult']): + """ + :param str name: The name of the security policy. Provide either this or a `self_link`. + """ + pulumi.set(__self__, "auto_deploy_confidence_threshold", auto_deploy_confidence_threshold) + pulumi.set(__self__, "auto_deploy_expiration_sec", auto_deploy_expiration_sec) + pulumi.set(__self__, "auto_deploy_impacted_baseline_threshold", auto_deploy_impacted_baseline_threshold) + pulumi.set(__self__, "auto_deploy_load_threshold", auto_deploy_load_threshold) + pulumi.set(__self__, "detection_absolute_qps", detection_absolute_qps) + pulumi.set(__self__, "detection_load_threshold", detection_load_threshold) + pulumi.set(__self__, "detection_relative_to_baseline_qps", detection_relative_to_baseline_qps) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "traffic_granularity_configs", traffic_granularity_configs) + + @property + @pulumi.getter(name="autoDeployConfidenceThreshold") + def auto_deploy_confidence_threshold(self) -> float: + return pulumi.get(self, "auto_deploy_confidence_threshold") + + @property + @pulumi.getter(name="autoDeployExpirationSec") + def auto_deploy_expiration_sec(self) -> int: + return pulumi.get(self, "auto_deploy_expiration_sec") + + @property + @pulumi.getter(name="autoDeployImpactedBaselineThreshold") + def auto_deploy_impacted_baseline_threshold(self) -> float: + return pulumi.get(self, "auto_deploy_impacted_baseline_threshold") + + @property + @pulumi.getter(name="autoDeployLoadThreshold") + def auto_deploy_load_threshold(self) -> float: + return pulumi.get(self, "auto_deploy_load_threshold") + + @property + @pulumi.getter(name="detectionAbsoluteQps") + def detection_absolute_qps(self) -> float: + return pulumi.get(self, "detection_absolute_qps") + + @property + @pulumi.getter(name="detectionLoadThreshold") + def detection_load_threshold(self) -> float: + return pulumi.get(self, "detection_load_threshold") + + @property + @pulumi.getter(name="detectionRelativeToBaselineQps") + def detection_relative_to_baseline_qps(self) -> float: + return pulumi.get(self, "detection_relative_to_baseline_qps") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the security policy. Provide either this or a `self_link`. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="trafficGranularityConfigs") + def traffic_granularity_configs(self) -> Sequence['outputs.GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigResult']: + return pulumi.get(self, "traffic_granularity_configs") + + +@pulumi.output_type +class GetSecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigThresholdConfigTrafficGranularityConfigResult(dict): + def __init__(__self__, *, + enable_each_unique_value: bool, + type: str, + value: str): + """ + :param bool enable_each_unique_value: 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. + :param str type: Type of this configuration. + :param str value: Requests that match this value constitute a granular traffic unit. + """ + pulumi.set(__self__, "enable_each_unique_value", enable_each_unique_value) + pulumi.set(__self__, "type", type) + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter(name="enableEachUniqueValue") + def enable_each_unique_value(self) -> bool: + """ + 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. + """ + return pulumi.get(self, "enable_each_unique_value") + + @property + @pulumi.getter + def type(self) -> str: + """ + Type of this configuration. + """ + return pulumi.get(self, "type") + + @property + @pulumi.getter + def value(self) -> str: + """ + Requests that match this value constitute a granular traffic unit. + """ + return pulumi.get(self, "value") + @pulumi.output_type class GetSecurityPolicyAdvancedOptionsConfigResult(dict): diff --git a/sdk/python/pulumi_gcp/compute/region_health_check.py b/sdk/python/pulumi_gcp/compute/region_health_check.py index 926fc64399..4d9bc21e75 100644 --- a/sdk/python/pulumi_gcp/compute/region_health_check.py +++ b/sdk/python/pulumi_gcp/compute/region_health_check.py @@ -321,6 +321,7 @@ def __init__(__self__, *, creation_timestamp: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, grpc_health_check: Optional[pulumi.Input['RegionHealthCheckGrpcHealthCheckArgs']] = None, + health_check_id: Optional[pulumi.Input[int]] = None, healthy_threshold: Optional[pulumi.Input[int]] = None, http2_health_check: Optional[pulumi.Input['RegionHealthCheckHttp2HealthCheckArgs']] = None, http_health_check: Optional[pulumi.Input['RegionHealthCheckHttpHealthCheckArgs']] = None, @@ -344,6 +345,7 @@ def __init__(__self__, *, you create the resource. :param pulumi.Input['RegionHealthCheckGrpcHealthCheckArgs'] grpc_health_check: A nested object resource. Structure is documented below. + :param pulumi.Input[int] health_check_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input[int] healthy_threshold: A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2. :param pulumi.Input['RegionHealthCheckHttp2HealthCheckArgs'] http2_health_check: A nested object resource. @@ -388,6 +390,8 @@ def __init__(__self__, *, pulumi.set(__self__, "description", description) if grpc_health_check is not None: pulumi.set(__self__, "grpc_health_check", grpc_health_check) + if health_check_id is not None: + pulumi.set(__self__, "health_check_id", health_check_id) if healthy_threshold is not None: pulumi.set(__self__, "healthy_threshold", healthy_threshold) if http2_health_check is not None: @@ -468,6 +472,18 @@ def grpc_health_check(self) -> Optional[pulumi.Input['RegionHealthCheckGrpcHealt def grpc_health_check(self, value: Optional[pulumi.Input['RegionHealthCheckGrpcHealthCheckArgs']]): pulumi.set(self, "grpc_health_check", value) + @property + @pulumi.getter(name="healthCheckId") + def health_check_id(self) -> Optional[pulumi.Input[int]]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "health_check_id") + + @health_check_id.setter + def health_check_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "health_check_id", value) + @property @pulumi.getter(name="healthyThreshold") def healthy_threshold(self) -> Optional[pulumi.Input[int]]: @@ -1336,6 +1352,7 @@ def _internal_init(__self__, __props__.__dict__["timeout_sec"] = timeout_sec __props__.__dict__["unhealthy_threshold"] = unhealthy_threshold __props__.__dict__["creation_timestamp"] = None + __props__.__dict__["health_check_id"] = None __props__.__dict__["self_link"] = None __props__.__dict__["type"] = None super(RegionHealthCheck, __self__).__init__( @@ -1352,6 +1369,7 @@ def get(resource_name: str, creation_timestamp: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, grpc_health_check: Optional[pulumi.Input[Union['RegionHealthCheckGrpcHealthCheckArgs', 'RegionHealthCheckGrpcHealthCheckArgsDict']]] = None, + health_check_id: Optional[pulumi.Input[int]] = None, healthy_threshold: Optional[pulumi.Input[int]] = None, http2_health_check: Optional[pulumi.Input[Union['RegionHealthCheckHttp2HealthCheckArgs', 'RegionHealthCheckHttp2HealthCheckArgsDict']]] = None, http_health_check: Optional[pulumi.Input[Union['RegionHealthCheckHttpHealthCheckArgs', 'RegionHealthCheckHttpHealthCheckArgsDict']]] = None, @@ -1380,6 +1398,7 @@ def get(resource_name: str, you create the resource. :param pulumi.Input[Union['RegionHealthCheckGrpcHealthCheckArgs', 'RegionHealthCheckGrpcHealthCheckArgsDict']] grpc_health_check: A nested object resource. Structure is documented below. + :param pulumi.Input[int] health_check_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input[int] healthy_threshold: A so-far unhealthy instance will be marked healthy after this many consecutive successes. The default value is 2. :param pulumi.Input[Union['RegionHealthCheckHttp2HealthCheckArgs', 'RegionHealthCheckHttp2HealthCheckArgsDict']] http2_health_check: A nested object resource. @@ -1424,6 +1443,7 @@ def get(resource_name: str, __props__.__dict__["creation_timestamp"] = creation_timestamp __props__.__dict__["description"] = description __props__.__dict__["grpc_health_check"] = grpc_health_check + __props__.__dict__["health_check_id"] = health_check_id __props__.__dict__["healthy_threshold"] = healthy_threshold __props__.__dict__["http2_health_check"] = http2_health_check __props__.__dict__["http_health_check"] = http_health_check @@ -1475,6 +1495,14 @@ def grpc_health_check(self) -> pulumi.Output[Optional['outputs.RegionHealthCheck """ return pulumi.get(self, "grpc_health_check") + @property + @pulumi.getter(name="healthCheckId") + def health_check_id(self) -> pulumi.Output[int]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "health_check_id") + @property @pulumi.getter(name="healthyThreshold") def healthy_threshold(self) -> pulumi.Output[Optional[int]]: diff --git a/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py b/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py index 331a884fec..da2b80184d 100644 --- a/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py +++ b/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py @@ -519,6 +519,7 @@ def __init__(__self__, *, fingerprint: Optional[pulumi.Input[str]] = None, instance_flexibility_policy: Optional[pulumi.Input['RegionInstanceGroupManagerInstanceFlexibilityPolicyArgs']] = None, instance_group: Optional[pulumi.Input[str]] = None, + instance_group_manager_id: Optional[pulumi.Input[int]] = None, instance_lifecycle_policy: Optional[pulumi.Input['RegionInstanceGroupManagerInstanceLifecyclePolicyArgs']] = None, list_managed_instances_results: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, @@ -563,6 +564,7 @@ def __init__(__self__, *, :param pulumi.Input['RegionInstanceGroupManagerInstanceFlexibilityPolicyArgs'] instance_flexibility_policy: The flexibility policy for managed instance group. Instance flexibility allows managed instance group to create VMs from multiple types of machines. Instance flexibility configuration on managed instance group overrides instance template configuration. Structure is documented below. - - - :param pulumi.Input[str] instance_group: The full URL of the instance group created by the manager. + :param pulumi.Input[int] instance_group_manager_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input['RegionInstanceGroupManagerInstanceLifecyclePolicyArgs'] instance_lifecycle_policy: The instance lifecycle policy for this managed instance group. :param pulumi.Input[str] list_managed_instances_results: Pagination behavior of the `listManagedInstances` API method for this managed instance group. Valid values are: `PAGELESS`, `PAGINATED`. @@ -627,6 +629,8 @@ def __init__(__self__, *, pulumi.set(__self__, "instance_flexibility_policy", instance_flexibility_policy) if instance_group is not None: pulumi.set(__self__, "instance_group", instance_group) + if instance_group_manager_id is not None: + pulumi.set(__self__, "instance_group_manager_id", instance_group_manager_id) if instance_lifecycle_policy is not None: pulumi.set(__self__, "instance_lifecycle_policy", instance_lifecycle_policy) if list_managed_instances_results is not None: @@ -801,6 +805,18 @@ def instance_group(self) -> Optional[pulumi.Input[str]]: def instance_group(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "instance_group", value) + @property + @pulumi.getter(name="instanceGroupManagerId") + def instance_group_manager_id(self) -> Optional[pulumi.Input[int]]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "instance_group_manager_id") + + @instance_group_manager_id.setter + def instance_group_manager_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "instance_group_manager_id", value) + @property @pulumi.getter(name="instanceLifecyclePolicy") def instance_lifecycle_policy(self) -> Optional[pulumi.Input['RegionInstanceGroupManagerInstanceLifecyclePolicyArgs']]: @@ -1497,6 +1513,7 @@ def _internal_init(__self__, __props__.__dict__["creation_timestamp"] = None __props__.__dict__["fingerprint"] = None __props__.__dict__["instance_group"] = None + __props__.__dict__["instance_group_manager_id"] = None __props__.__dict__["self_link"] = None __props__.__dict__["statuses"] = None super(RegionInstanceGroupManager, __self__).__init__( @@ -1519,6 +1536,7 @@ def get(resource_name: str, fingerprint: Optional[pulumi.Input[str]] = None, instance_flexibility_policy: Optional[pulumi.Input[Union['RegionInstanceGroupManagerInstanceFlexibilityPolicyArgs', 'RegionInstanceGroupManagerInstanceFlexibilityPolicyArgsDict']]] = None, instance_group: Optional[pulumi.Input[str]] = None, + instance_group_manager_id: Optional[pulumi.Input[int]] = None, instance_lifecycle_policy: Optional[pulumi.Input[Union['RegionInstanceGroupManagerInstanceLifecyclePolicyArgs', 'RegionInstanceGroupManagerInstanceLifecyclePolicyArgsDict']]] = None, list_managed_instances_results: Optional[pulumi.Input[str]] = None, name: Optional[pulumi.Input[str]] = None, @@ -1568,6 +1586,7 @@ def get(resource_name: str, :param pulumi.Input[Union['RegionInstanceGroupManagerInstanceFlexibilityPolicyArgs', 'RegionInstanceGroupManagerInstanceFlexibilityPolicyArgsDict']] instance_flexibility_policy: The flexibility policy for managed instance group. Instance flexibility allows managed instance group to create VMs from multiple types of machines. Instance flexibility configuration on managed instance group overrides instance template configuration. Structure is documented below. - - - :param pulumi.Input[str] instance_group: The full URL of the instance group created by the manager. + :param pulumi.Input[int] instance_group_manager_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input[Union['RegionInstanceGroupManagerInstanceLifecyclePolicyArgs', 'RegionInstanceGroupManagerInstanceLifecyclePolicyArgsDict']] instance_lifecycle_policy: The instance lifecycle policy for this managed instance group. :param pulumi.Input[str] list_managed_instances_results: Pagination behavior of the `listManagedInstances` API method for this managed instance group. Valid values are: `PAGELESS`, `PAGINATED`. @@ -1626,6 +1645,7 @@ def get(resource_name: str, __props__.__dict__["fingerprint"] = fingerprint __props__.__dict__["instance_flexibility_policy"] = instance_flexibility_policy __props__.__dict__["instance_group"] = instance_group + __props__.__dict__["instance_group_manager_id"] = instance_group_manager_id __props__.__dict__["instance_lifecycle_policy"] = instance_lifecycle_policy __props__.__dict__["list_managed_instances_results"] = list_managed_instances_results __props__.__dict__["name"] = name @@ -1740,6 +1760,14 @@ def instance_group(self) -> pulumi.Output[str]: """ return pulumi.get(self, "instance_group") + @property + @pulumi.getter(name="instanceGroupManagerId") + def instance_group_manager_id(self) -> pulumi.Output[int]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "instance_group_manager_id") + @property @pulumi.getter(name="instanceLifecyclePolicy") def instance_lifecycle_policy(self) -> pulumi.Output['outputs.RegionInstanceGroupManagerInstanceLifecyclePolicy']: diff --git a/sdk/python/pulumi_gcp/compute/region_network_endpoint.py b/sdk/python/pulumi_gcp/compute/region_network_endpoint.py index d17f599648..b9f0d51acb 100644 --- a/sdk/python/pulumi_gcp/compute/region_network_endpoint.py +++ b/sdk/python/pulumi_gcp/compute/region_network_endpoint.py @@ -171,6 +171,7 @@ def __init__(__self__, *, fqdn: Optional[pulumi.Input[str]] = None, instance: Optional[pulumi.Input[str]] = None, ip_address: Optional[pulumi.Input[str]] = None, + network_endpoint_id: Optional[pulumi.Input[int]] = None, port: Optional[pulumi.Input[int]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, @@ -184,6 +185,7 @@ def __init__(__self__, *, This is required for network endpoints of type GCE_VM_IP_PORTMAP. :param pulumi.Input[str] ip_address: IPv4 address external endpoint. This can only be specified when network_endpoint_type of the NEG is INTERNET_IP_PORT. + :param pulumi.Input[int] network_endpoint_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input[int] port: Port number of network endpoint. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. @@ -201,6 +203,8 @@ def __init__(__self__, *, pulumi.set(__self__, "instance", instance) if ip_address is not None: pulumi.set(__self__, "ip_address", ip_address) + if network_endpoint_id is not None: + pulumi.set(__self__, "network_endpoint_id", network_endpoint_id) if port is not None: pulumi.set(__self__, "port", port) if project is not None: @@ -261,6 +265,18 @@ def ip_address(self) -> Optional[pulumi.Input[str]]: def ip_address(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "ip_address", value) + @property + @pulumi.getter(name="networkEndpointId") + def network_endpoint_id(self) -> Optional[pulumi.Input[int]]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "network_endpoint_id") + + @network_endpoint_id.setter + def network_endpoint_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "network_endpoint_id", value) + @property @pulumi.getter def port(self) -> Optional[pulumi.Input[int]]: @@ -654,6 +670,7 @@ def _internal_init(__self__, if region_network_endpoint_group is None and not opts.urn: raise TypeError("Missing required property 'region_network_endpoint_group'") __props__.__dict__["region_network_endpoint_group"] = region_network_endpoint_group + __props__.__dict__["network_endpoint_id"] = None super(RegionNetworkEndpoint, __self__).__init__( 'gcp:compute/regionNetworkEndpoint:RegionNetworkEndpoint', resource_name, @@ -668,6 +685,7 @@ def get(resource_name: str, fqdn: Optional[pulumi.Input[str]] = None, instance: Optional[pulumi.Input[str]] = None, ip_address: Optional[pulumi.Input[str]] = None, + network_endpoint_id: Optional[pulumi.Input[int]] = None, port: Optional[pulumi.Input[int]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, @@ -686,6 +704,7 @@ def get(resource_name: str, This is required for network endpoints of type GCE_VM_IP_PORTMAP. :param pulumi.Input[str] ip_address: IPv4 address external endpoint. This can only be specified when network_endpoint_type of the NEG is INTERNET_IP_PORT. + :param pulumi.Input[int] network_endpoint_id: The unique identifier number for the resource. This identifier is defined by the server. :param pulumi.Input[int] port: Port number of network endpoint. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. @@ -703,6 +722,7 @@ def get(resource_name: str, __props__.__dict__["fqdn"] = fqdn __props__.__dict__["instance"] = instance __props__.__dict__["ip_address"] = ip_address + __props__.__dict__["network_endpoint_id"] = network_endpoint_id __props__.__dict__["port"] = port __props__.__dict__["project"] = project __props__.__dict__["region"] = region @@ -744,6 +764,14 @@ def ip_address(self) -> pulumi.Output[Optional[str]]: """ return pulumi.get(self, "ip_address") + @property + @pulumi.getter(name="networkEndpointId") + def network_endpoint_id(self) -> pulumi.Output[int]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "network_endpoint_id") + @property @pulumi.getter def port(self) -> pulumi.Output[int]: diff --git a/sdk/python/pulumi_gcp/compute/region_network_endpoint_group.py b/sdk/python/pulumi_gcp/compute/region_network_endpoint_group.py index 97b1ba2876..5dd1d16e85 100644 --- a/sdk/python/pulumi_gcp/compute/region_network_endpoint_group.py +++ b/sdk/python/pulumi_gcp/compute/region_network_endpoint_group.py @@ -30,6 +30,7 @@ def __init__(__self__, *, network: Optional[pulumi.Input[str]] = None, network_endpoint_type: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + psc_data: Optional[pulumi.Input['RegionNetworkEndpointGroupPscDataArgs']] = None, psc_target_service: Optional[pulumi.Input[str]] = None, serverless_deployment: Optional[pulumi.Input['RegionNetworkEndpointGroupServerlessDeploymentArgs']] = None, subnetwork: Optional[pulumi.Input[str]] = None): @@ -65,6 +66,8 @@ def __init__(__self__, *, Possible values are: `SERVERLESS`, `PRIVATE_SERVICE_CONNECT`, `INTERNET_IP_PORT`, `INTERNET_FQDN_PORT`, `GCE_VM_IP_PORTMAP`. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. + :param pulumi.Input['RegionNetworkEndpointGroupPscDataArgs'] psc_data: This field is only used for PSC NEGs. + Structure is documented below. :param pulumi.Input[str] psc_target_service: This field is only used for PSC and INTERNET NEGs. The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. @@ -91,6 +94,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_endpoint_type", network_endpoint_type) if project is not None: pulumi.set(__self__, "project", project) + if psc_data is not None: + pulumi.set(__self__, "psc_data", psc_data) if psc_target_service is not None: pulumi.set(__self__, "psc_target_service", psc_target_service) if serverless_deployment is not None: @@ -227,6 +232,19 @@ def project(self) -> Optional[pulumi.Input[str]]: def project(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "project", value) + @property + @pulumi.getter(name="pscData") + def psc_data(self) -> Optional[pulumi.Input['RegionNetworkEndpointGroupPscDataArgs']]: + """ + This field is only used for PSC NEGs. + Structure is documented below. + """ + return pulumi.get(self, "psc_data") + + @psc_data.setter + def psc_data(self, value: Optional[pulumi.Input['RegionNetworkEndpointGroupPscDataArgs']]): + pulumi.set(self, "psc_data", value) + @property @pulumi.getter(name="pscTargetService") def psc_target_service(self) -> Optional[pulumi.Input[str]]: @@ -280,6 +298,7 @@ def __init__(__self__, *, network: Optional[pulumi.Input[str]] = None, network_endpoint_type: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + psc_data: Optional[pulumi.Input['RegionNetworkEndpointGroupPscDataArgs']] = None, psc_target_service: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, @@ -313,6 +332,8 @@ def __init__(__self__, *, Possible values are: `SERVERLESS`, `PRIVATE_SERVICE_CONNECT`, `INTERNET_IP_PORT`, `INTERNET_FQDN_PORT`, `GCE_VM_IP_PORTMAP`. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. + :param pulumi.Input['RegionNetworkEndpointGroupPscDataArgs'] psc_data: This field is only used for PSC NEGs. + Structure is documented below. :param pulumi.Input[str] psc_target_service: This field is only used for PSC and INTERNET NEGs. The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. @@ -343,6 +364,8 @@ def __init__(__self__, *, pulumi.set(__self__, "network_endpoint_type", network_endpoint_type) if project is not None: pulumi.set(__self__, "project", project) + if psc_data is not None: + pulumi.set(__self__, "psc_data", psc_data) if psc_target_service is not None: pulumi.set(__self__, "psc_target_service", psc_target_service) if region is not None: @@ -468,6 +491,19 @@ def project(self) -> Optional[pulumi.Input[str]]: def project(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "project", value) + @property + @pulumi.getter(name="pscData") + def psc_data(self) -> Optional[pulumi.Input['RegionNetworkEndpointGroupPscDataArgs']]: + """ + This field is only used for PSC NEGs. + Structure is documented below. + """ + return pulumi.get(self, "psc_data") + + @psc_data.setter + def psc_data(self, value: Optional[pulumi.Input['RegionNetworkEndpointGroupPscDataArgs']]): + pulumi.set(self, "psc_data", value) + @property @pulumi.getter(name="pscTargetService") def psc_target_service(self) -> Optional[pulumi.Input[str]]: @@ -550,6 +586,7 @@ def __init__(__self__, network: Optional[pulumi.Input[str]] = None, network_endpoint_type: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + psc_data: Optional[pulumi.Input[Union['RegionNetworkEndpointGroupPscDataArgs', 'RegionNetworkEndpointGroupPscDataArgsDict']]] = None, psc_target_service: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, serverless_deployment: Optional[pulumi.Input[Union['RegionNetworkEndpointGroupServerlessDeploymentArgs', 'RegionNetworkEndpointGroupServerlessDeploymentArgsDict']]] = None, @@ -758,7 +795,11 @@ def __init__(__self__, region="europe-west4", load_balancing_scheme="INTERNAL", backend_service=default_region_backend_service.id, - all_ports=True, + ports=[ + "80", + "88", + "443", + ], network=default.name, subnetwork=default_subnetwork.name) default_service_attachment = gcp.compute.ServiceAttachment("default", @@ -774,6 +815,9 @@ def __init__(__self__, region="europe-west4", network_endpoint_type="PRIVATE_SERVICE_CONNECT", psc_target_service=default_service_attachment.self_link, + psc_data={ + "producer_port": "88", + }, network=default.self_link, subnetwork=default_subnetwork.self_link) ``` @@ -881,6 +925,8 @@ def __init__(__self__, Possible values are: `SERVERLESS`, `PRIVATE_SERVICE_CONNECT`, `INTERNET_IP_PORT`, `INTERNET_FQDN_PORT`, `GCE_VM_IP_PORTMAP`. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. + :param pulumi.Input[Union['RegionNetworkEndpointGroupPscDataArgs', 'RegionNetworkEndpointGroupPscDataArgsDict']] psc_data: This field is only used for PSC NEGs. + Structure is documented below. :param pulumi.Input[str] psc_target_service: This field is only used for PSC and INTERNET NEGs. The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. @@ -1103,7 +1149,11 @@ def __init__(__self__, region="europe-west4", load_balancing_scheme="INTERNAL", backend_service=default_region_backend_service.id, - all_ports=True, + ports=[ + "80", + "88", + "443", + ], network=default.name, subnetwork=default_subnetwork.name) default_service_attachment = gcp.compute.ServiceAttachment("default", @@ -1119,6 +1169,9 @@ def __init__(__self__, region="europe-west4", network_endpoint_type="PRIVATE_SERVICE_CONNECT", psc_target_service=default_service_attachment.self_link, + psc_data={ + "producer_port": "88", + }, network=default.self_link, subnetwork=default_subnetwork.self_link) ``` @@ -1221,6 +1274,7 @@ def _internal_init(__self__, network: Optional[pulumi.Input[str]] = None, network_endpoint_type: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + psc_data: Optional[pulumi.Input[Union['RegionNetworkEndpointGroupPscDataArgs', 'RegionNetworkEndpointGroupPscDataArgsDict']]] = None, psc_target_service: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, serverless_deployment: Optional[pulumi.Input[Union['RegionNetworkEndpointGroupServerlessDeploymentArgs', 'RegionNetworkEndpointGroupServerlessDeploymentArgsDict']]] = None, @@ -1242,6 +1296,7 @@ def _internal_init(__self__, __props__.__dict__["network"] = network __props__.__dict__["network_endpoint_type"] = network_endpoint_type __props__.__dict__["project"] = project + __props__.__dict__["psc_data"] = psc_data __props__.__dict__["psc_target_service"] = psc_target_service if region is None and not opts.urn: raise TypeError("Missing required property 'region'") @@ -1267,6 +1322,7 @@ def get(resource_name: str, network: Optional[pulumi.Input[str]] = None, network_endpoint_type: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + psc_data: Optional[pulumi.Input[Union['RegionNetworkEndpointGroupPscDataArgs', 'RegionNetworkEndpointGroupPscDataArgsDict']]] = None, psc_target_service: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, @@ -1305,6 +1361,8 @@ def get(resource_name: str, Possible values are: `SERVERLESS`, `PRIVATE_SERVICE_CONNECT`, `INTERNET_IP_PORT`, `INTERNET_FQDN_PORT`, `GCE_VM_IP_PORTMAP`. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. + :param pulumi.Input[Union['RegionNetworkEndpointGroupPscDataArgs', 'RegionNetworkEndpointGroupPscDataArgsDict']] psc_data: This field is only used for PSC NEGs. + Structure is documented below. :param pulumi.Input[str] psc_target_service: This field is only used for PSC and INTERNET NEGs. The target service url used to set up private service connection to a Google API or a PSC Producer Service Attachment. @@ -1331,6 +1389,7 @@ def get(resource_name: str, __props__.__dict__["network"] = network __props__.__dict__["network_endpoint_type"] = network_endpoint_type __props__.__dict__["project"] = project + __props__.__dict__["psc_data"] = psc_data __props__.__dict__["psc_target_service"] = psc_target_service __props__.__dict__["region"] = region __props__.__dict__["self_link"] = self_link @@ -1420,6 +1479,15 @@ def project(self) -> pulumi.Output[str]: """ return pulumi.get(self, "project") + @property + @pulumi.getter(name="pscData") + def psc_data(self) -> pulumi.Output[Optional['outputs.RegionNetworkEndpointGroupPscData']]: + """ + This field is only used for PSC NEGs. + Structure is documented below. + """ + return pulumi.get(self, "psc_data") + @property @pulumi.getter(name="pscTargetService") def psc_target_service(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/compute/subnetwork.py b/sdk/python/pulumi_gcp/compute/subnetwork.py index 967b86e10d..64c63e5a86 100644 --- a/sdk/python/pulumi_gcp/compute/subnetwork.py +++ b/sdk/python/pulumi_gcp/compute/subnetwork.py @@ -441,7 +441,8 @@ def __init__(__self__, *, secondary_ip_ranges: Optional[pulumi.Input[Sequence[pulumi.Input['SubnetworkSecondaryIpRangeArgs']]]] = None, self_link: Optional[pulumi.Input[str]] = None, send_secondary_ip_range_if_empty: Optional[pulumi.Input[bool]] = None, - stack_type: Optional[pulumi.Input[str]] = None): + stack_type: Optional[pulumi.Input[str]] = None, + subnetwork_id: Optional[pulumi.Input[int]] = None): """ Input properties used for looking up and filtering Subnetwork resources. :param pulumi.Input[bool] allow_subnet_cidr_routes_overlap: Typically packets destined to IPs within the subnetwork range that do not match @@ -520,6 +521,7 @@ def __init__(__self__, *, :param pulumi.Input[str] stack_type: The stack type for this subnet to identify whether the IPv6 feature is enabled or not. If not specified IPV4_ONLY will be used. Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + :param pulumi.Input[int] subnetwork_id: The unique identifier number for the resource. This identifier is defined by the server. """ if allow_subnet_cidr_routes_overlap is not None: pulumi.set(__self__, "allow_subnet_cidr_routes_overlap", allow_subnet_cidr_routes_overlap) @@ -572,6 +574,8 @@ def __init__(__self__, *, pulumi.set(__self__, "send_secondary_ip_range_if_empty", send_secondary_ip_range_if_empty) if stack_type is not None: pulumi.set(__self__, "stack_type", stack_type) + if subnetwork_id is not None: + pulumi.set(__self__, "subnetwork_id", subnetwork_id) @property @pulumi.getter(name="allowSubnetCidrRoutesOverlap") @@ -914,6 +918,18 @@ def stack_type(self) -> Optional[pulumi.Input[str]]: def stack_type(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "stack_type", value) + @property + @pulumi.getter(name="subnetworkId") + def subnetwork_id(self) -> Optional[pulumi.Input[int]]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "subnetwork_id") + + @subnetwork_id.setter + def subnetwork_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "subnetwork_id", value) + class Subnetwork(pulumi.CustomResource): @overload @@ -1569,6 +1585,7 @@ def _internal_init(__self__, __props__.__dict__["internal_ipv6_prefix"] = None __props__.__dict__["ipv6_cidr_range"] = None __props__.__dict__["self_link"] = None + __props__.__dict__["subnetwork_id"] = None super(Subnetwork, __self__).__init__( 'gcp:compute/subnetwork:Subnetwork', resource_name, @@ -1602,7 +1619,8 @@ def get(resource_name: str, secondary_ip_ranges: Optional[pulumi.Input[Sequence[pulumi.Input[Union['SubnetworkSecondaryIpRangeArgs', 'SubnetworkSecondaryIpRangeArgsDict']]]]] = None, self_link: Optional[pulumi.Input[str]] = None, send_secondary_ip_range_if_empty: Optional[pulumi.Input[bool]] = None, - stack_type: Optional[pulumi.Input[str]] = None) -> 'Subnetwork': + stack_type: Optional[pulumi.Input[str]] = None, + subnetwork_id: Optional[pulumi.Input[int]] = None) -> 'Subnetwork': """ Get an existing Subnetwork resource's state with the given name, id, and optional extra properties used to qualify the lookup. @@ -1686,6 +1704,7 @@ def get(resource_name: str, :param pulumi.Input[str] stack_type: The stack type for this subnet to identify whether the IPv6 feature is enabled or not. If not specified IPV4_ONLY will be used. Possible values are: `IPV4_ONLY`, `IPV4_IPV6`. + :param pulumi.Input[int] subnetwork_id: The unique identifier number for the resource. This identifier is defined by the server. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -1715,6 +1734,7 @@ def get(resource_name: str, __props__.__dict__["self_link"] = self_link __props__.__dict__["send_secondary_ip_range_if_empty"] = send_secondary_ip_range_if_empty __props__.__dict__["stack_type"] = stack_type + __props__.__dict__["subnetwork_id"] = subnetwork_id return Subnetwork(resource_name, opts=opts, __props__=__props__) @property @@ -1962,3 +1982,11 @@ def stack_type(self) -> pulumi.Output[str]: """ return pulumi.get(self, "stack_type") + @property + @pulumi.getter(name="subnetworkId") + def subnetwork_id(self) -> pulumi.Output[int]: + """ + The unique identifier number for the resource. This identifier is defined by the server. + """ + return pulumi.get(self, "subnetwork_id") + diff --git a/sdk/python/pulumi_gcp/compute/url_map.py b/sdk/python/pulumi_gcp/compute/url_map.py index 05b563d342..ecf12a7640 100644 --- a/sdk/python/pulumi_gcp/compute/url_map.py +++ b/sdk/python/pulumi_gcp/compute/url_map.py @@ -34,7 +34,7 @@ def __init__(__self__, *, tests: Optional[pulumi.Input[Sequence[pulumi.Input['URLMapTestArgs']]]] = None): """ The set of arguments for constructing a URLMap resource. - :param pulumi.Input['URLMapDefaultCustomErrorResponsePolicyArgs'] default_custom_error_response_policy: defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + :param pulumi.Input['URLMapDefaultCustomErrorResponsePolicyArgs'] default_custom_error_response_policy: 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 @@ -107,7 +107,7 @@ def __init__(__self__, *, @pulumi.getter(name="defaultCustomErrorResponsePolicy") def default_custom_error_response_policy(self) -> Optional[pulumi.Input['URLMapDefaultCustomErrorResponsePolicyArgs']]: """ - 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 @@ -291,7 +291,7 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering URLMap resources. :param pulumi.Input[str] creation_timestamp: Creation timestamp in RFC3339 text format. - :param pulumi.Input['URLMapDefaultCustomErrorResponsePolicyArgs'] default_custom_error_response_policy: defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + :param pulumi.Input['URLMapDefaultCustomErrorResponsePolicyArgs'] default_custom_error_response_policy: 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 @@ -388,7 +388,7 @@ def creation_timestamp(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="defaultCustomErrorResponsePolicy") def default_custom_error_response_policy(self) -> Optional[pulumi.Input['URLMapDefaultCustomErrorResponsePolicyArgs']]: """ - 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 @@ -1291,7 +1291,7 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[Union['URLMapDefaultCustomErrorResponsePolicyArgs', 'URLMapDefaultCustomErrorResponsePolicyArgsDict']] default_custom_error_response_policy: defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + :param pulumi.Input[Union['URLMapDefaultCustomErrorResponsePolicyArgs', 'URLMapDefaultCustomErrorResponsePolicyArgsDict']] default_custom_error_response_policy: 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 @@ -2110,7 +2110,7 @@ def get(resource_name: str, :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] creation_timestamp: Creation timestamp in RFC3339 text format. - :param pulumi.Input[Union['URLMapDefaultCustomErrorResponsePolicyArgs', 'URLMapDefaultCustomErrorResponsePolicyArgsDict']] default_custom_error_response_policy: defaultCustomErrorResponsePolicy specifies how the Load Balancer returns error responses when BackendServiceor BackendBucket responds with an error. + :param pulumi.Input[Union['URLMapDefaultCustomErrorResponsePolicyArgs', 'URLMapDefaultCustomErrorResponsePolicyArgsDict']] default_custom_error_response_policy: 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 @@ -2193,7 +2193,7 @@ def creation_timestamp(self) -> pulumi.Output[str]: @pulumi.getter(name="defaultCustomErrorResponsePolicy") def default_custom_error_response_policy(self) -> pulumi.Output[Optional['outputs.URLMapDefaultCustomErrorResponsePolicy']]: """ - 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/python/pulumi_gcp/config/__init__.pyi b/sdk/python/pulumi_gcp/config/__init__.pyi index 2bf7b4001f..576a3ffec6 100644 --- a/sdk/python/pulumi_gcp/config/__init__.pyi +++ b/sdk/python/pulumi_gcp/config/__init__.pyi @@ -195,6 +195,8 @@ firebaserulesCustomEndpoint: Optional[str] firestoreCustomEndpoint: Optional[str] +geminiCustomEndpoint: Optional[str] + gkeBackupCustomEndpoint: Optional[str] gkeHub2CustomEndpoint: Optional[str] diff --git a/sdk/python/pulumi_gcp/config/vars.py b/sdk/python/pulumi_gcp/config/vars.py index 18689f7cf5..2f1089c794 100644 --- a/sdk/python/pulumi_gcp/config/vars.py +++ b/sdk/python/pulumi_gcp/config/vars.py @@ -381,6 +381,10 @@ def firebaserules_custom_endpoint(self) -> Optional[str]: def firestore_custom_endpoint(self) -> Optional[str]: return __config__.get('firestoreCustomEndpoint') + @property + def gemini_custom_endpoint(self) -> Optional[str]: + return __config__.get('geminiCustomEndpoint') + @property def gke_backup_custom_endpoint(self) -> Optional[str]: return __config__.get('gkeBackupCustomEndpoint') diff --git a/sdk/python/pulumi_gcp/container/_inputs.py b/sdk/python/pulumi_gcp/container/_inputs.py index 793aa9cb01..3e9619f93c 100644 --- a/sdk/python/pulumi_gcp/container/_inputs.py +++ b/sdk/python/pulumi_gcp/container/_inputs.py @@ -229,6 +229,8 @@ 'ClusterDnsConfigArgsDict', 'ClusterEnableK8sBetaApisArgs', 'ClusterEnableK8sBetaApisArgsDict', + 'ClusterEnterpriseConfigArgs', + 'ClusterEnterpriseConfigArgsDict', 'ClusterFleetArgs', 'ClusterFleetArgsDict', 'ClusterGatewayApiConfigArgs', @@ -333,6 +335,8 @@ 'ClusterNodePoolArgsDict', 'ClusterNodePoolAutoConfigArgs', 'ClusterNodePoolAutoConfigArgsDict', + 'ClusterNodePoolAutoConfigLinuxNodeConfigArgs', + 'ClusterNodePoolAutoConfigLinuxNodeConfigArgsDict', 'ClusterNodePoolAutoConfigNetworkTagsArgs', 'ClusterNodePoolAutoConfigNetworkTagsArgsDict', 'ClusterNodePoolAutoConfigNodeKubeletConfigArgs', @@ -5770,7 +5774,7 @@ class ClusterClusterAutoscalingAutoProvisioningDefaultsArgsDict(TypedDict): """ disk_type: NotRequired[pulumi.Input[str]] """ - 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`. """ image_type: NotRequired[pulumi.Input[str]] """ @@ -5823,7 +5827,7 @@ def __init__(__self__, *, """ :param pulumi.Input[str] boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption :param pulumi.Input[int] disk_size: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. Defaults to `100` - :param pulumi.Input[str] disk_type: Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard` + :param pulumi.Input[str] disk_type: 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`. :param pulumi.Input[str] image_type: The default image type used by NAP once a new node pool is being created. Please note that according to the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#default-image-type) the value must be one of the [COS_CONTAINERD, COS, UBUNTU_CONTAINERD, UBUNTU]. __NOTE__ : COS AND UBUNTU are deprecated as of `GKE 1.24` :param pulumi.Input['ClusterClusterAutoscalingAutoProvisioningDefaultsManagementArgs'] management: NodeManagement configuration for this NodePool. Structure is documented below. :param pulumi.Input[str] min_cpu_platform: Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the @@ -5885,7 +5889,7 @@ def disk_size(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="diskType") def disk_type(self) -> Optional[pulumi.Input[str]]: """ - 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`. """ return pulumi.get(self, "disk_type") @@ -6869,6 +6873,58 @@ def enabled_apis(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): pulumi.set(self, "enabled_apis", value) +if not MYPY: + class ClusterEnterpriseConfigArgsDict(TypedDict): + cluster_tier: NotRequired[pulumi.Input[str]] + """ + The effective tier of the cluster. + """ + desired_tier: NotRequired[pulumi.Input[str]] + """ + Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + """ +elif False: + ClusterEnterpriseConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterEnterpriseConfigArgs: + def __init__(__self__, *, + cluster_tier: Optional[pulumi.Input[str]] = None, + desired_tier: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] cluster_tier: The effective tier of the cluster. + :param pulumi.Input[str] desired_tier: Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + """ + if cluster_tier is not None: + pulumi.set(__self__, "cluster_tier", cluster_tier) + if desired_tier is not None: + pulumi.set(__self__, "desired_tier", desired_tier) + + @property + @pulumi.getter(name="clusterTier") + def cluster_tier(self) -> Optional[pulumi.Input[str]]: + """ + The effective tier of the cluster. + """ + return pulumi.get(self, "cluster_tier") + + @cluster_tier.setter + def cluster_tier(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cluster_tier", value) + + @property + @pulumi.getter(name="desiredTier") + def desired_tier(self) -> Optional[pulumi.Input[str]]: + """ + Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + """ + return pulumi.get(self, "desired_tier") + + @desired_tier.setter + def desired_tier(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "desired_tier", value) + + if not MYPY: class ClusterFleetArgsDict(TypedDict): membership: NotRequired[pulumi.Input[str]] @@ -8418,6 +8474,13 @@ class ClusterNodeConfigArgsDict(TypedDict): The amount of local SSD disks that will be attached to each cluster node. Defaults to 0. """ + local_ssd_encryption_mode: NotRequired[pulumi.Input[str]] + """ + 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. + """ logging_variant: NotRequired[pulumi.Input[str]] """ 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. @@ -8554,6 +8617,7 @@ def __init__(__self__, *, linux_node_config: Optional[pulumi.Input['ClusterNodeConfigLinuxNodeConfigArgs']] = None, local_nvme_ssd_block_config: Optional[pulumi.Input['ClusterNodeConfigLocalNvmeSsdBlockConfigArgs']] = None, local_ssd_count: Optional[pulumi.Input[int]] = None, + local_ssd_encryption_mode: Optional[pulumi.Input[str]] = None, logging_variant: Optional[pulumi.Input[str]] = None, machine_type: Optional[pulumi.Input[str]] = None, metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -8625,6 +8689,10 @@ def __init__(__self__, *, :param pulumi.Input['ClusterNodeConfigLocalNvmeSsdBlockConfigArgs'] local_nvme_ssd_block_config: Parameters for the local NVMe SSDs. Structure is documented below. :param pulumi.Input[int] local_ssd_count: The amount of local SSD disks that will be attached to each cluster node. Defaults to 0. + :param pulumi.Input[str] local_ssd_encryption_mode: 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. :param pulumi.Input[str] logging_variant: 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. :param pulumi.Input[str] machine_type: The name of a Google Compute Engine machine type. Defaults to `e2-medium`. To create a custom machine type, value should be set as specified @@ -8717,6 +8785,8 @@ def __init__(__self__, *, pulumi.set(__self__, "local_nvme_ssd_block_config", local_nvme_ssd_block_config) if local_ssd_count is not None: pulumi.set(__self__, "local_ssd_count", local_ssd_count) + if local_ssd_encryption_mode is not None: + pulumi.set(__self__, "local_ssd_encryption_mode", local_ssd_encryption_mode) if logging_variant is not None: pulumi.set(__self__, "logging_variant", logging_variant) if machine_type is not None: @@ -9039,6 +9109,21 @@ def local_ssd_count(self) -> Optional[pulumi.Input[int]]: def local_ssd_count(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "local_ssd_count", value) + @property + @pulumi.getter(name="localSsdEncryptionMode") + def local_ssd_encryption_mode(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "local_ssd_encryption_mode") + + @local_ssd_encryption_mode.setter + def local_ssd_encryption_mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "local_ssd_encryption_mode", value) + @property @pulumi.getter(name="loggingVariant") def logging_variant(self) -> Optional[pulumi.Input[str]]: @@ -11198,6 +11283,10 @@ def version(self, value: Optional[pulumi.Input[str]]): if not MYPY: class ClusterNodePoolAutoConfigArgsDict(TypedDict): + linux_node_config: NotRequired[pulumi.Input['ClusterNodePoolAutoConfigLinuxNodeConfigArgsDict']] + """ + 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. + """ network_tags: NotRequired[pulumi.Input['ClusterNodePoolAutoConfigNetworkTagsArgsDict']] """ The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. @@ -11217,15 +11306,19 @@ class ClusterNodePoolAutoConfigArgsDict(TypedDict): @pulumi.input_type class ClusterNodePoolAutoConfigArgs: def __init__(__self__, *, + linux_node_config: Optional[pulumi.Input['ClusterNodePoolAutoConfigLinuxNodeConfigArgs']] = None, network_tags: Optional[pulumi.Input['ClusterNodePoolAutoConfigNetworkTagsArgs']] = None, node_kubelet_config: Optional[pulumi.Input['ClusterNodePoolAutoConfigNodeKubeletConfigArgs']] = None, resource_manager_tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None): """ + :param pulumi.Input['ClusterNodePoolAutoConfigLinuxNodeConfigArgs'] linux_node_config: 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. :param pulumi.Input['ClusterNodePoolAutoConfigNetworkTagsArgs'] network_tags: The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. :param pulumi.Input['ClusterNodePoolAutoConfigNodeKubeletConfigArgs'] node_kubelet_config: Kubelet configuration for Autopilot clusters. Currently, only `insecure_kubelet_readonly_port_enabled` is supported here. Structure is documented below. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] resource_manager_tags: 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}`. """ + if linux_node_config is not None: + pulumi.set(__self__, "linux_node_config", linux_node_config) if network_tags is not None: pulumi.set(__self__, "network_tags", network_tags) if node_kubelet_config is not None: @@ -11233,6 +11326,18 @@ def __init__(__self__, *, if resource_manager_tags is not None: pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) + @property + @pulumi.getter(name="linuxNodeConfig") + def linux_node_config(self) -> Optional[pulumi.Input['ClusterNodePoolAutoConfigLinuxNodeConfigArgs']]: + """ + 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. + """ + return pulumi.get(self, "linux_node_config") + + @linux_node_config.setter + def linux_node_config(self, value: Optional[pulumi.Input['ClusterNodePoolAutoConfigLinuxNodeConfigArgs']]): + pulumi.set(self, "linux_node_config", value) + @property @pulumi.getter(name="networkTags") def network_tags(self) -> Optional[pulumi.Input['ClusterNodePoolAutoConfigNetworkTagsArgs']]: @@ -11271,6 +11376,50 @@ def resource_manager_tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi pulumi.set(self, "resource_manager_tags", value) +if not MYPY: + class ClusterNodePoolAutoConfigLinuxNodeConfigArgsDict(TypedDict): + cgroup_mode: NotRequired[pulumi.Input[str]] + """ + 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. + """ +elif False: + ClusterNodePoolAutoConfigLinuxNodeConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterNodePoolAutoConfigLinuxNodeConfigArgs: + def __init__(__self__, *, + cgroup_mode: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] cgroup_mode: 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. + """ + if cgroup_mode is not None: + pulumi.set(__self__, "cgroup_mode", cgroup_mode) + + @property + @pulumi.getter(name="cgroupMode") + def cgroup_mode(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "cgroup_mode") + + @cgroup_mode.setter + def cgroup_mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cgroup_mode", value) + + if not MYPY: class ClusterNodePoolAutoConfigNetworkTagsArgsDict(TypedDict): tags: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]] @@ -12315,6 +12464,13 @@ class ClusterNodePoolNodeConfigArgsDict(TypedDict): The amount of local SSD disks that will be attached to each cluster node. Defaults to 0. """ + local_ssd_encryption_mode: NotRequired[pulumi.Input[str]] + """ + 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. + """ logging_variant: NotRequired[pulumi.Input[str]] """ 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. @@ -12451,6 +12607,7 @@ def __init__(__self__, *, linux_node_config: Optional[pulumi.Input['ClusterNodePoolNodeConfigLinuxNodeConfigArgs']] = None, local_nvme_ssd_block_config: Optional[pulumi.Input['ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArgs']] = None, local_ssd_count: Optional[pulumi.Input[int]] = None, + local_ssd_encryption_mode: Optional[pulumi.Input[str]] = None, logging_variant: Optional[pulumi.Input[str]] = None, machine_type: Optional[pulumi.Input[str]] = None, metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -12522,6 +12679,10 @@ def __init__(__self__, *, :param pulumi.Input['ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArgs'] local_nvme_ssd_block_config: Parameters for the local NVMe SSDs. Structure is documented below. :param pulumi.Input[int] local_ssd_count: The amount of local SSD disks that will be attached to each cluster node. Defaults to 0. + :param pulumi.Input[str] local_ssd_encryption_mode: 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. :param pulumi.Input[str] logging_variant: 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. :param pulumi.Input[str] machine_type: The name of a Google Compute Engine machine type. Defaults to `e2-medium`. To create a custom machine type, value should be set as specified @@ -12614,6 +12775,8 @@ def __init__(__self__, *, pulumi.set(__self__, "local_nvme_ssd_block_config", local_nvme_ssd_block_config) if local_ssd_count is not None: pulumi.set(__self__, "local_ssd_count", local_ssd_count) + if local_ssd_encryption_mode is not None: + pulumi.set(__self__, "local_ssd_encryption_mode", local_ssd_encryption_mode) if logging_variant is not None: pulumi.set(__self__, "logging_variant", logging_variant) if machine_type is not None: @@ -12936,6 +13099,21 @@ def local_ssd_count(self) -> Optional[pulumi.Input[int]]: def local_ssd_count(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "local_ssd_count", value) + @property + @pulumi.getter(name="localSsdEncryptionMode") + def local_ssd_encryption_mode(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "local_ssd_encryption_mode") + + @local_ssd_encryption_mode.setter + def local_ssd_encryption_mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "local_ssd_encryption_mode", value) + @property @pulumi.getter(name="loggingVariant") def logging_variant(self) -> Optional[pulumi.Input[str]]: @@ -16796,6 +16974,10 @@ class NodePoolNodeConfigArgsDict(TypedDict): """ The number of local SSD disks to be attached to the node. """ + local_ssd_encryption_mode: NotRequired[pulumi.Input[str]] + """ + LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + """ logging_variant: NotRequired[pulumi.Input[str]] """ Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. @@ -16906,6 +17088,7 @@ def __init__(__self__, *, linux_node_config: Optional[pulumi.Input['NodePoolNodeConfigLinuxNodeConfigArgs']] = None, local_nvme_ssd_block_config: Optional[pulumi.Input['NodePoolNodeConfigLocalNvmeSsdBlockConfigArgs']] = None, local_ssd_count: Optional[pulumi.Input[int]] = None, + local_ssd_encryption_mode: Optional[pulumi.Input[str]] = None, logging_variant: Optional[pulumi.Input[str]] = None, machine_type: Optional[pulumi.Input[str]] = None, metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -16948,6 +17131,7 @@ def __init__(__self__, *, :param pulumi.Input['NodePoolNodeConfigLinuxNodeConfigArgs'] linux_node_config: Parameters that can be configured on Linux nodes. :param pulumi.Input['NodePoolNodeConfigLocalNvmeSsdBlockConfigArgs'] local_nvme_ssd_block_config: Parameters for raw-block local NVMe SSDs. :param pulumi.Input[int] local_ssd_count: The number of local SSD disks to be attached to the node. + :param pulumi.Input[str] local_ssd_encryption_mode: LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. :param pulumi.Input[str] logging_variant: Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. :param pulumi.Input[str] machine_type: The name of a Google Compute Engine machine type. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] metadata: The metadata key/value pairs assigned to instances in the cluster. @@ -17014,6 +17198,8 @@ def __init__(__self__, *, pulumi.set(__self__, "local_nvme_ssd_block_config", local_nvme_ssd_block_config) if local_ssd_count is not None: pulumi.set(__self__, "local_ssd_count", local_ssd_count) + if local_ssd_encryption_mode is not None: + pulumi.set(__self__, "local_ssd_encryption_mode", local_ssd_encryption_mode) if logging_variant is not None: pulumi.set(__self__, "logging_variant", logging_variant) if machine_type is not None: @@ -17307,6 +17493,18 @@ def local_ssd_count(self) -> Optional[pulumi.Input[int]]: def local_ssd_count(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "local_ssd_count", value) + @property + @pulumi.getter(name="localSsdEncryptionMode") + def local_ssd_encryption_mode(self) -> Optional[pulumi.Input[str]]: + """ + LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + """ + return pulumi.get(self, "local_ssd_encryption_mode") + + @local_ssd_encryption_mode.setter + def local_ssd_encryption_mode(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "local_ssd_encryption_mode", value) + @property @pulumi.getter(name="loggingVariant") def logging_variant(self) -> Optional[pulumi.Input[str]]: diff --git a/sdk/python/pulumi_gcp/container/cluster.py b/sdk/python/pulumi_gcp/container/cluster.py index bd06a95670..ef4781ad7a 100644 --- a/sdk/python/pulumi_gcp/container/cluster.py +++ b/sdk/python/pulumi_gcp/container/cluster.py @@ -49,6 +49,7 @@ def __init__(__self__, *, enable_multi_networking: Optional[pulumi.Input[bool]] = None, enable_shielded_nodes: Optional[pulumi.Input[bool]] = None, enable_tpu: Optional[pulumi.Input[bool]] = None, + enterprise_config: Optional[pulumi.Input['ClusterEnterpriseConfigArgs']] = None, fleet: Optional[pulumi.Input['ClusterFleetArgs']] = None, gateway_api_config: Optional[pulumi.Input['ClusterGatewayApiConfigArgs']] = None, identity_service_config: Optional[pulumi.Input['ClusterIdentityServiceConfigArgs']] = None, @@ -153,6 +154,10 @@ def __init__(__self__, *, :param pulumi.Input[bool] enable_shielded_nodes: Enable Shielded Nodes features on all nodes in this cluster. Defaults to `true`. :param pulumi.Input[bool] enable_tpu: Whether to enable Cloud TPU resources in this cluster. See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). + :param pulumi.Input['ClusterEnterpriseConfigArgs'] enterprise_config: Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + + + The `default_snat_status` block supports :param pulumi.Input['ClusterFleetArgs'] fleet: Fleet configuration for the cluster. Structure is documented below. :param pulumi.Input['ClusterGatewayApiConfigArgs'] gateway_api_config: Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. :param pulumi.Input['ClusterIdentityServiceConfigArgs'] identity_service_config: . Structure is documented below. @@ -300,8 +305,6 @@ def __init__(__self__, *, :param pulumi.Input['ClusterVerticalPodAutoscalingArgs'] vertical_pod_autoscaling: Vertical Pod Autoscaling automatically adjusts the resources of pods controlled by it. Structure is documented below. :param pulumi.Input['ClusterWorkloadAltsConfigArgs'] workload_alts_config: 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. - - The `default_snat_status` block supports :param pulumi.Input['ClusterWorkloadIdentityConfigArgs'] workload_identity_config: Workload Identity allows Kubernetes service accounts to act as a user-managed [Google IAM Service Account](https://cloud.google.com/iam/docs/service-accounts#user-managed_service_accounts). Structure is documented below. @@ -362,6 +365,8 @@ def __init__(__self__, *, pulumi.set(__self__, "enable_shielded_nodes", enable_shielded_nodes) if enable_tpu is not None: pulumi.set(__self__, "enable_tpu", enable_tpu) + if enterprise_config is not None: + pulumi.set(__self__, "enterprise_config", enterprise_config) if fleet is not None: pulumi.set(__self__, "fleet", fleet) if gateway_api_config is not None: @@ -815,6 +820,21 @@ def enable_tpu(self) -> Optional[pulumi.Input[bool]]: def enable_tpu(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "enable_tpu", value) + @property + @pulumi.getter(name="enterpriseConfig") + def enterprise_config(self) -> Optional[pulumi.Input['ClusterEnterpriseConfigArgs']]: + """ + Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + + + The `default_snat_status` block supports + """ + return pulumi.get(self, "enterprise_config") + + @enterprise_config.setter + def enterprise_config(self, value: Optional[pulumi.Input['ClusterEnterpriseConfigArgs']]): + pulumi.set(self, "enterprise_config", value) + @property @pulumi.getter def fleet(self) -> Optional[pulumi.Input['ClusterFleetArgs']]: @@ -1428,8 +1448,6 @@ def vertical_pod_autoscaling(self, value: Optional[pulumi.Input['ClusterVertical def workload_alts_config(self) -> Optional[pulumi.Input['ClusterWorkloadAltsConfigArgs']]: """ 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. - - The `default_snat_status` block supports """ return pulumi.get(self, "workload_alts_config") @@ -1485,6 +1503,7 @@ def __init__(__self__, *, enable_shielded_nodes: Optional[pulumi.Input[bool]] = None, enable_tpu: Optional[pulumi.Input[bool]] = None, endpoint: Optional[pulumi.Input[str]] = None, + enterprise_config: Optional[pulumi.Input['ClusterEnterpriseConfigArgs']] = None, fleet: Optional[pulumi.Input['ClusterFleetArgs']] = None, gateway_api_config: Optional[pulumi.Input['ClusterGatewayApiConfigArgs']] = None, identity_service_config: Optional[pulumi.Input['ClusterIdentityServiceConfigArgs']] = None, @@ -1598,6 +1617,10 @@ def __init__(__self__, *, :param pulumi.Input[bool] enable_tpu: Whether to enable Cloud TPU resources in this cluster. See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). :param pulumi.Input[str] endpoint: The IP address of this cluster's Kubernetes master. + :param pulumi.Input['ClusterEnterpriseConfigArgs'] enterprise_config: Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + + + The `default_snat_status` block supports :param pulumi.Input['ClusterFleetArgs'] fleet: Fleet configuration for the cluster. Structure is documented below. :param pulumi.Input['ClusterGatewayApiConfigArgs'] gateway_api_config: Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. :param pulumi.Input['ClusterIdentityServiceConfigArgs'] identity_service_config: . Structure is documented below. @@ -1758,8 +1781,6 @@ def __init__(__self__, *, :param pulumi.Input['ClusterVerticalPodAutoscalingArgs'] vertical_pod_autoscaling: Vertical Pod Autoscaling automatically adjusts the resources of pods controlled by it. Structure is documented below. :param pulumi.Input['ClusterWorkloadAltsConfigArgs'] workload_alts_config: 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. - - The `default_snat_status` block supports :param pulumi.Input['ClusterWorkloadIdentityConfigArgs'] workload_identity_config: Workload Identity allows Kubernetes service accounts to act as a user-managed [Google IAM Service Account](https://cloud.google.com/iam/docs/service-accounts#user-managed_service_accounts). Structure is documented below. @@ -1824,6 +1845,8 @@ def __init__(__self__, *, pulumi.set(__self__, "enable_tpu", enable_tpu) if endpoint is not None: pulumi.set(__self__, "endpoint", endpoint) + if enterprise_config is not None: + pulumi.set(__self__, "enterprise_config", enterprise_config) if fleet is not None: pulumi.set(__self__, "fleet", fleet) if gateway_api_config is not None: @@ -2315,6 +2338,21 @@ def endpoint(self) -> Optional[pulumi.Input[str]]: def endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "endpoint", value) + @property + @pulumi.getter(name="enterpriseConfig") + def enterprise_config(self) -> Optional[pulumi.Input['ClusterEnterpriseConfigArgs']]: + """ + Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + + + The `default_snat_status` block supports + """ + return pulumi.get(self, "enterprise_config") + + @enterprise_config.setter + def enterprise_config(self, value: Optional[pulumi.Input['ClusterEnterpriseConfigArgs']]): + pulumi.set(self, "enterprise_config", value) + @property @pulumi.getter def fleet(self) -> Optional[pulumi.Input['ClusterFleetArgs']]: @@ -3016,8 +3054,6 @@ def vertical_pod_autoscaling(self, value: Optional[pulumi.Input['ClusterVertical def workload_alts_config(self) -> Optional[pulumi.Input['ClusterWorkloadAltsConfigArgs']]: """ 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. - - The `default_snat_status` block supports """ return pulumi.get(self, "workload_alts_config") @@ -3073,6 +3109,7 @@ def __init__(__self__, enable_multi_networking: Optional[pulumi.Input[bool]] = None, enable_shielded_nodes: Optional[pulumi.Input[bool]] = None, enable_tpu: Optional[pulumi.Input[bool]] = None, + enterprise_config: Optional[pulumi.Input[Union['ClusterEnterpriseConfigArgs', 'ClusterEnterpriseConfigArgsDict']]] = None, fleet: Optional[pulumi.Input[Union['ClusterFleetArgs', 'ClusterFleetArgsDict']]] = None, gateway_api_config: Optional[pulumi.Input[Union['ClusterGatewayApiConfigArgs', 'ClusterGatewayApiConfigArgsDict']]] = None, identity_service_config: Optional[pulumi.Input[Union['ClusterIdentityServiceConfigArgs', 'ClusterIdentityServiceConfigArgsDict']]] = None, @@ -3299,6 +3336,10 @@ def __init__(__self__, :param pulumi.Input[bool] enable_shielded_nodes: Enable Shielded Nodes features on all nodes in this cluster. Defaults to `true`. :param pulumi.Input[bool] enable_tpu: Whether to enable Cloud TPU resources in this cluster. See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). + :param pulumi.Input[Union['ClusterEnterpriseConfigArgs', 'ClusterEnterpriseConfigArgsDict']] enterprise_config: Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + + + The `default_snat_status` block supports :param pulumi.Input[Union['ClusterFleetArgs', 'ClusterFleetArgsDict']] fleet: Fleet configuration for the cluster. Structure is documented below. :param pulumi.Input[Union['ClusterGatewayApiConfigArgs', 'ClusterGatewayApiConfigArgsDict']] gateway_api_config: Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. :param pulumi.Input[Union['ClusterIdentityServiceConfigArgs', 'ClusterIdentityServiceConfigArgsDict']] identity_service_config: . Structure is documented below. @@ -3446,8 +3487,6 @@ def __init__(__self__, :param pulumi.Input[Union['ClusterVerticalPodAutoscalingArgs', 'ClusterVerticalPodAutoscalingArgsDict']] vertical_pod_autoscaling: Vertical Pod Autoscaling automatically adjusts the resources of pods controlled by it. Structure is documented below. :param pulumi.Input[Union['ClusterWorkloadAltsConfigArgs', 'ClusterWorkloadAltsConfigArgsDict']] workload_alts_config: 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. - - The `default_snat_status` block supports :param pulumi.Input[Union['ClusterWorkloadIdentityConfigArgs', 'ClusterWorkloadIdentityConfigArgsDict']] workload_identity_config: Workload Identity allows Kubernetes service accounts to act as a user-managed [Google IAM Service Account](https://cloud.google.com/iam/docs/service-accounts#user-managed_service_accounts). Structure is documented below. @@ -3622,6 +3661,7 @@ def _internal_init(__self__, enable_multi_networking: Optional[pulumi.Input[bool]] = None, enable_shielded_nodes: Optional[pulumi.Input[bool]] = None, enable_tpu: Optional[pulumi.Input[bool]] = None, + enterprise_config: Optional[pulumi.Input[Union['ClusterEnterpriseConfigArgs', 'ClusterEnterpriseConfigArgsDict']]] = None, fleet: Optional[pulumi.Input[Union['ClusterFleetArgs', 'ClusterFleetArgsDict']]] = None, gateway_api_config: Optional[pulumi.Input[Union['ClusterGatewayApiConfigArgs', 'ClusterGatewayApiConfigArgsDict']]] = None, identity_service_config: Optional[pulumi.Input[Union['ClusterIdentityServiceConfigArgs', 'ClusterIdentityServiceConfigArgsDict']]] = None, @@ -3703,6 +3743,7 @@ def _internal_init(__self__, __props__.__dict__["enable_multi_networking"] = enable_multi_networking __props__.__dict__["enable_shielded_nodes"] = enable_shielded_nodes __props__.__dict__["enable_tpu"] = enable_tpu + __props__.__dict__["enterprise_config"] = enterprise_config __props__.__dict__["fleet"] = fleet __props__.__dict__["gateway_api_config"] = gateway_api_config __props__.__dict__["identity_service_config"] = identity_service_config @@ -3798,6 +3839,7 @@ def get(resource_name: str, enable_shielded_nodes: Optional[pulumi.Input[bool]] = None, enable_tpu: Optional[pulumi.Input[bool]] = None, endpoint: Optional[pulumi.Input[str]] = None, + enterprise_config: Optional[pulumi.Input[Union['ClusterEnterpriseConfigArgs', 'ClusterEnterpriseConfigArgsDict']]] = None, fleet: Optional[pulumi.Input[Union['ClusterFleetArgs', 'ClusterFleetArgsDict']]] = None, gateway_api_config: Optional[pulumi.Input[Union['ClusterGatewayApiConfigArgs', 'ClusterGatewayApiConfigArgsDict']]] = None, identity_service_config: Optional[pulumi.Input[Union['ClusterIdentityServiceConfigArgs', 'ClusterIdentityServiceConfigArgsDict']]] = None, @@ -3916,6 +3958,10 @@ def get(resource_name: str, :param pulumi.Input[bool] enable_tpu: Whether to enable Cloud TPU resources in this cluster. See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). :param pulumi.Input[str] endpoint: The IP address of this cluster's Kubernetes master. + :param pulumi.Input[Union['ClusterEnterpriseConfigArgs', 'ClusterEnterpriseConfigArgsDict']] enterprise_config: Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + + + The `default_snat_status` block supports :param pulumi.Input[Union['ClusterFleetArgs', 'ClusterFleetArgsDict']] fleet: Fleet configuration for the cluster. Structure is documented below. :param pulumi.Input[Union['ClusterGatewayApiConfigArgs', 'ClusterGatewayApiConfigArgsDict']] gateway_api_config: Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. :param pulumi.Input[Union['ClusterIdentityServiceConfigArgs', 'ClusterIdentityServiceConfigArgsDict']] identity_service_config: . Structure is documented below. @@ -4076,8 +4122,6 @@ def get(resource_name: str, :param pulumi.Input[Union['ClusterVerticalPodAutoscalingArgs', 'ClusterVerticalPodAutoscalingArgsDict']] vertical_pod_autoscaling: Vertical Pod Autoscaling automatically adjusts the resources of pods controlled by it. Structure is documented below. :param pulumi.Input[Union['ClusterWorkloadAltsConfigArgs', 'ClusterWorkloadAltsConfigArgsDict']] workload_alts_config: 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. - - The `default_snat_status` block supports :param pulumi.Input[Union['ClusterWorkloadIdentityConfigArgs', 'ClusterWorkloadIdentityConfigArgsDict']] workload_identity_config: Workload Identity allows Kubernetes service accounts to act as a user-managed [Google IAM Service Account](https://cloud.google.com/iam/docs/service-accounts#user-managed_service_accounts). Structure is documented below. @@ -4116,6 +4160,7 @@ def get(resource_name: str, __props__.__dict__["enable_shielded_nodes"] = enable_shielded_nodes __props__.__dict__["enable_tpu"] = enable_tpu __props__.__dict__["endpoint"] = endpoint + __props__.__dict__["enterprise_config"] = enterprise_config __props__.__dict__["fleet"] = fleet __props__.__dict__["gateway_api_config"] = gateway_api_config __props__.__dict__["identity_service_config"] = identity_service_config @@ -4437,6 +4482,17 @@ def endpoint(self) -> pulumi.Output[str]: """ return pulumi.get(self, "endpoint") + @property + @pulumi.getter(name="enterpriseConfig") + def enterprise_config(self) -> pulumi.Output['outputs.ClusterEnterpriseConfig']: + """ + Configuration for [Enterprise edition].(https://cloud.google.com/kubernetes-engine/enterprise/docs/concepts/gke-editions). Structure is documented below. + + + The `default_snat_status` block supports + """ + return pulumi.get(self, "enterprise_config") + @property @pulumi.getter def fleet(self) -> pulumi.Output[Optional['outputs.ClusterFleet']]: @@ -4942,8 +4998,6 @@ def vertical_pod_autoscaling(self) -> pulumi.Output['outputs.ClusterVerticalPodA def workload_alts_config(self) -> pulumi.Output['outputs.ClusterWorkloadAltsConfig']: """ 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. - - The `default_snat_status` block supports """ return pulumi.get(self, "workload_alts_config") diff --git a/sdk/python/pulumi_gcp/container/get_cluster.py b/sdk/python/pulumi_gcp/container/get_cluster.py index 7a4bec3ddb..af2b22fd6b 100644 --- a/sdk/python/pulumi_gcp/container/get_cluster.py +++ b/sdk/python/pulumi_gcp/container/get_cluster.py @@ -27,7 +27,7 @@ class GetClusterResult: """ A collection of values returned by getCluster. """ - def __init__(__self__, addons_configs=None, allow_net_admin=None, authenticator_groups_configs=None, binary_authorizations=None, cluster_autoscalings=None, cluster_ipv4_cidr=None, cluster_telemetries=None, confidential_nodes=None, control_plane_endpoints_configs=None, cost_management_configs=None, database_encryptions=None, datapath_provider=None, default_max_pods_per_node=None, default_snat_statuses=None, deletion_protection=None, description=None, dns_configs=None, effective_labels=None, enable_autopilot=None, enable_cilium_clusterwide_network_policy=None, enable_fqdn_network_policy=None, enable_intranode_visibility=None, enable_k8s_beta_apis=None, enable_kubernetes_alpha=None, enable_l4_ilb_subsetting=None, enable_legacy_abac=None, enable_multi_networking=None, enable_shielded_nodes=None, enable_tpu=None, endpoint=None, fleets=None, gateway_api_configs=None, id=None, identity_service_configs=None, initial_node_count=None, ip_allocation_policies=None, label_fingerprint=None, location=None, logging_configs=None, logging_service=None, maintenance_policies=None, master_authorized_networks_configs=None, master_auths=None, master_version=None, mesh_certificates=None, min_master_version=None, monitoring_configs=None, monitoring_service=None, name=None, network=None, network_policies=None, networking_mode=None, node_configs=None, node_locations=None, node_pool_auto_configs=None, node_pool_defaults=None, node_pools=None, node_version=None, notification_configs=None, operation=None, pod_security_policy_configs=None, private_cluster_configs=None, private_ipv6_google_access=None, project=None, protect_configs=None, pulumi_labels=None, release_channels=None, remove_default_node_pool=None, resource_labels=None, resource_usage_export_configs=None, secret_manager_configs=None, security_posture_configs=None, self_link=None, service_external_ips_configs=None, services_ipv4_cidr=None, subnetwork=None, tpu_configs=None, tpu_ipv4_cidr_block=None, user_managed_keys_configs=None, vertical_pod_autoscalings=None, workload_alts_configs=None, workload_identity_configs=None): + def __init__(__self__, addons_configs=None, allow_net_admin=None, authenticator_groups_configs=None, binary_authorizations=None, cluster_autoscalings=None, cluster_ipv4_cidr=None, cluster_telemetries=None, confidential_nodes=None, control_plane_endpoints_configs=None, cost_management_configs=None, database_encryptions=None, datapath_provider=None, default_max_pods_per_node=None, default_snat_statuses=None, deletion_protection=None, description=None, dns_configs=None, effective_labels=None, enable_autopilot=None, enable_cilium_clusterwide_network_policy=None, enable_fqdn_network_policy=None, enable_intranode_visibility=None, enable_k8s_beta_apis=None, enable_kubernetes_alpha=None, enable_l4_ilb_subsetting=None, enable_legacy_abac=None, enable_multi_networking=None, enable_shielded_nodes=None, enable_tpu=None, endpoint=None, enterprise_configs=None, fleets=None, gateway_api_configs=None, id=None, identity_service_configs=None, initial_node_count=None, ip_allocation_policies=None, label_fingerprint=None, location=None, logging_configs=None, logging_service=None, maintenance_policies=None, master_authorized_networks_configs=None, master_auths=None, master_version=None, mesh_certificates=None, min_master_version=None, monitoring_configs=None, monitoring_service=None, name=None, network=None, network_policies=None, networking_mode=None, node_configs=None, node_locations=None, node_pool_auto_configs=None, node_pool_defaults=None, node_pools=None, node_version=None, notification_configs=None, operation=None, pod_security_policy_configs=None, private_cluster_configs=None, private_ipv6_google_access=None, project=None, protect_configs=None, pulumi_labels=None, release_channels=None, remove_default_node_pool=None, resource_labels=None, resource_usage_export_configs=None, secret_manager_configs=None, security_posture_configs=None, self_link=None, service_external_ips_configs=None, services_ipv4_cidr=None, subnetwork=None, tpu_configs=None, tpu_ipv4_cidr_block=None, user_managed_keys_configs=None, vertical_pod_autoscalings=None, workload_alts_configs=None, workload_identity_configs=None): if addons_configs and not isinstance(addons_configs, list): raise TypeError("Expected argument 'addons_configs' to be a list") pulumi.set(__self__, "addons_configs", addons_configs) @@ -118,6 +118,9 @@ def __init__(__self__, addons_configs=None, allow_net_admin=None, authenticator_ if endpoint and not isinstance(endpoint, str): raise TypeError("Expected argument 'endpoint' to be a str") pulumi.set(__self__, "endpoint", endpoint) + if enterprise_configs and not isinstance(enterprise_configs, list): + raise TypeError("Expected argument 'enterprise_configs' to be a list") + pulumi.set(__self__, "enterprise_configs", enterprise_configs) if fleets and not isinstance(fleets, list): raise TypeError("Expected argument 'fleets' to be a list") pulumi.set(__self__, "fleets", fleets) @@ -425,6 +428,11 @@ def enable_tpu(self) -> bool: def endpoint(self) -> str: return pulumi.get(self, "endpoint") + @property + @pulumi.getter(name="enterpriseConfigs") + def enterprise_configs(self) -> Sequence['outputs.GetClusterEnterpriseConfigResult']: + return pulumi.get(self, "enterprise_configs") + @property @pulumi.getter def fleets(self) -> Sequence['outputs.GetClusterFleetResult']: @@ -725,6 +733,7 @@ def __await__(self): enable_shielded_nodes=self.enable_shielded_nodes, enable_tpu=self.enable_tpu, endpoint=self.endpoint, + enterprise_configs=self.enterprise_configs, fleets=self.fleets, gateway_api_configs=self.gateway_api_configs, id=self.id, @@ -846,6 +855,7 @@ def get_cluster(location: Optional[str] = None, enable_shielded_nodes=pulumi.get(__ret__, 'enable_shielded_nodes'), enable_tpu=pulumi.get(__ret__, 'enable_tpu'), endpoint=pulumi.get(__ret__, 'endpoint'), + enterprise_configs=pulumi.get(__ret__, 'enterprise_configs'), fleets=pulumi.get(__ret__, 'fleets'), gateway_api_configs=pulumi.get(__ret__, 'gateway_api_configs'), id=pulumi.get(__ret__, 'id'), @@ -964,6 +974,7 @@ def get_cluster_output(location: Optional[pulumi.Input[Optional[str]]] = None, enable_shielded_nodes=pulumi.get(__response__, 'enable_shielded_nodes'), enable_tpu=pulumi.get(__response__, 'enable_tpu'), endpoint=pulumi.get(__response__, 'endpoint'), + enterprise_configs=pulumi.get(__response__, 'enterprise_configs'), fleets=pulumi.get(__response__, 'fleets'), gateway_api_configs=pulumi.get(__response__, 'gateway_api_configs'), id=pulumi.get(__response__, 'id'), diff --git a/sdk/python/pulumi_gcp/container/outputs.py b/sdk/python/pulumi_gcp/container/outputs.py index a71c529222..63c9253d92 100644 --- a/sdk/python/pulumi_gcp/container/outputs.py +++ b/sdk/python/pulumi_gcp/container/outputs.py @@ -123,6 +123,7 @@ 'ClusterDefaultSnatStatus', 'ClusterDnsConfig', 'ClusterEnableK8sBetaApis', + 'ClusterEnterpriseConfig', 'ClusterFleet', 'ClusterGatewayApiConfig', 'ClusterIdentityServiceConfig', @@ -175,6 +176,7 @@ 'ClusterNodeConfigWorkloadMetadataConfig', 'ClusterNodePool', 'ClusterNodePoolAutoConfig', + 'ClusterNodePoolAutoConfigLinuxNodeConfig', 'ClusterNodePoolAutoConfigNetworkTags', 'ClusterNodePoolAutoConfigNodeKubeletConfig', 'ClusterNodePoolAutoscaling', @@ -323,6 +325,7 @@ 'GetClusterDefaultSnatStatusResult', 'GetClusterDnsConfigResult', 'GetClusterEnableK8sBetaApiResult', + 'GetClusterEnterpriseConfigResult', 'GetClusterFleetResult', 'GetClusterGatewayApiConfigResult', 'GetClusterIdentityServiceConfigResult', @@ -375,6 +378,7 @@ 'GetClusterNodeConfigWorkloadMetadataConfigResult', 'GetClusterNodePoolResult', 'GetClusterNodePoolAutoConfigResult', + 'GetClusterNodePoolAutoConfigLinuxNodeConfigResult', 'GetClusterNodePoolAutoConfigNetworkTagResult', 'GetClusterNodePoolAutoConfigNodeKubeletConfigResult', 'GetClusterNodePoolAutoscalingResult', @@ -4780,7 +4784,7 @@ def __init__(__self__, *, """ :param str boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption :param int disk_size: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. Defaults to `100` - :param str disk_type: Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard` + :param str disk_type: 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`. :param str image_type: The default image type used by NAP once a new node pool is being created. Please note that according to the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#default-image-type) the value must be one of the [COS_CONTAINERD, COS, UBUNTU_CONTAINERD, UBUNTU]. __NOTE__ : COS AND UBUNTU are deprecated as of `GKE 1.24` :param 'ClusterClusterAutoscalingAutoProvisioningDefaultsManagementArgs' management: NodeManagement configuration for this NodePool. Structure is documented below. :param str min_cpu_platform: Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the @@ -4834,7 +4838,7 @@ def disk_size(self) -> Optional[int]: @pulumi.getter(name="diskType") def disk_type(self) -> Optional[str]: """ - 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`. """ return pulumi.get(self, "disk_type") @@ -5654,6 +5658,56 @@ def enabled_apis(self) -> Sequence[str]: return pulumi.get(self, "enabled_apis") +@pulumi.output_type +class ClusterEnterpriseConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "clusterTier": + suggest = "cluster_tier" + elif key == "desiredTier": + suggest = "desired_tier" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterEnterpriseConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterEnterpriseConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterEnterpriseConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + cluster_tier: Optional[str] = None, + desired_tier: Optional[str] = None): + """ + :param str cluster_tier: The effective tier of the cluster. + :param str desired_tier: Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + """ + if cluster_tier is not None: + pulumi.set(__self__, "cluster_tier", cluster_tier) + if desired_tier is not None: + pulumi.set(__self__, "desired_tier", desired_tier) + + @property + @pulumi.getter(name="clusterTier") + def cluster_tier(self) -> Optional[str]: + """ + The effective tier of the cluster. + """ + return pulumi.get(self, "cluster_tier") + + @property + @pulumi.getter(name="desiredTier") + def desired_tier(self) -> Optional[str]: + """ + Sets the tier of the cluster. Available options include `STANDARD` and `ENTERPRISE`. + """ + return pulumi.get(self, "desired_tier") + + @pulumi.output_type class ClusterFleet(dict): @staticmethod @@ -6865,6 +6919,8 @@ def __key_warning(key: str): suggest = "local_nvme_ssd_block_config" elif key == "localSsdCount": suggest = "local_ssd_count" + elif key == "localSsdEncryptionMode": + suggest = "local_ssd_encryption_mode" elif key == "loggingVariant": suggest = "logging_variant" elif key == "machineType": @@ -6929,6 +6985,7 @@ def __init__(__self__, *, linux_node_config: Optional['outputs.ClusterNodeConfigLinuxNodeConfig'] = None, local_nvme_ssd_block_config: Optional['outputs.ClusterNodeConfigLocalNvmeSsdBlockConfig'] = None, local_ssd_count: Optional[int] = None, + local_ssd_encryption_mode: Optional[str] = None, logging_variant: Optional[str] = None, machine_type: Optional[str] = None, metadata: Optional[Mapping[str, str]] = None, @@ -7000,6 +7057,10 @@ def __init__(__self__, *, :param 'ClusterNodeConfigLocalNvmeSsdBlockConfigArgs' local_nvme_ssd_block_config: Parameters for the local NVMe SSDs. Structure is documented below. :param int local_ssd_count: The amount of local SSD disks that will be attached to each cluster node. Defaults to 0. + :param str local_ssd_encryption_mode: 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. :param str logging_variant: 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. :param str machine_type: The name of a Google Compute Engine machine type. Defaults to `e2-medium`. To create a custom machine type, value should be set as specified @@ -7092,6 +7153,8 @@ def __init__(__self__, *, pulumi.set(__self__, "local_nvme_ssd_block_config", local_nvme_ssd_block_config) if local_ssd_count is not None: pulumi.set(__self__, "local_ssd_count", local_ssd_count) + if local_ssd_encryption_mode is not None: + pulumi.set(__self__, "local_ssd_encryption_mode", local_ssd_encryption_mode) if logging_variant is not None: pulumi.set(__self__, "logging_variant", logging_variant) if machine_type is not None: @@ -7330,6 +7393,17 @@ def local_ssd_count(self) -> Optional[int]: """ return pulumi.get(self, "local_ssd_count") + @property + @pulumi.getter(name="localSsdEncryptionMode") + def local_ssd_encryption_mode(self) -> Optional[str]: + """ + 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. + """ + return pulumi.get(self, "local_ssd_encryption_mode") + @property @pulumi.getter(name="loggingVariant") def logging_variant(self) -> Optional[str]: @@ -9054,7 +9128,9 @@ class ClusterNodePoolAutoConfig(dict): @staticmethod def __key_warning(key: str): suggest = None - if key == "networkTags": + if key == "linuxNodeConfig": + suggest = "linux_node_config" + elif key == "networkTags": suggest = "network_tags" elif key == "nodeKubeletConfig": suggest = "node_kubelet_config" @@ -9073,15 +9149,19 @@ def get(self, key: str, default = None) -> Any: return super().get(key, default) def __init__(__self__, *, + linux_node_config: Optional['outputs.ClusterNodePoolAutoConfigLinuxNodeConfig'] = None, network_tags: Optional['outputs.ClusterNodePoolAutoConfigNetworkTags'] = None, node_kubelet_config: Optional['outputs.ClusterNodePoolAutoConfigNodeKubeletConfig'] = None, resource_manager_tags: Optional[Mapping[str, str]] = None): """ + :param 'ClusterNodePoolAutoConfigLinuxNodeConfigArgs' linux_node_config: 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. :param 'ClusterNodePoolAutoConfigNetworkTagsArgs' network_tags: The network tag config for the cluster's automatically provisioned node pools. Structure is documented below. :param 'ClusterNodePoolAutoConfigNodeKubeletConfigArgs' node_kubelet_config: Kubelet configuration for Autopilot clusters. Currently, only `insecure_kubelet_readonly_port_enabled` is supported here. Structure is documented below. :param Mapping[str, str] resource_manager_tags: 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}`. """ + if linux_node_config is not None: + pulumi.set(__self__, "linux_node_config", linux_node_config) if network_tags is not None: pulumi.set(__self__, "network_tags", network_tags) if node_kubelet_config is not None: @@ -9089,6 +9169,14 @@ def __init__(__self__, *, if resource_manager_tags is not None: pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) + @property + @pulumi.getter(name="linuxNodeConfig") + def linux_node_config(self) -> Optional['outputs.ClusterNodePoolAutoConfigLinuxNodeConfig']: + """ + 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. + """ + return pulumi.get(self, "linux_node_config") + @property @pulumi.getter(name="networkTags") def network_tags(self) -> Optional['outputs.ClusterNodePoolAutoConfigNetworkTags']: @@ -9115,6 +9203,50 @@ def resource_manager_tags(self) -> Optional[Mapping[str, str]]: return pulumi.get(self, "resource_manager_tags") +@pulumi.output_type +class ClusterNodePoolAutoConfigLinuxNodeConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "cgroupMode": + suggest = "cgroup_mode" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterNodePoolAutoConfigLinuxNodeConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterNodePoolAutoConfigLinuxNodeConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterNodePoolAutoConfigLinuxNodeConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + cgroup_mode: Optional[str] = None): + """ + :param str cgroup_mode: 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. + """ + if cgroup_mode is not None: + pulumi.set(__self__, "cgroup_mode", cgroup_mode) + + @property + @pulumi.getter(name="cgroupMode") + def cgroup_mode(self) -> Optional[str]: + """ + 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. + """ + return pulumi.get(self, "cgroup_mode") + + @pulumi.output_type class ClusterNodePoolAutoConfigNetworkTags(dict): def __init__(__self__, *, @@ -9947,6 +10079,8 @@ def __key_warning(key: str): suggest = "local_nvme_ssd_block_config" elif key == "localSsdCount": suggest = "local_ssd_count" + elif key == "localSsdEncryptionMode": + suggest = "local_ssd_encryption_mode" elif key == "loggingVariant": suggest = "logging_variant" elif key == "machineType": @@ -10011,6 +10145,7 @@ def __init__(__self__, *, linux_node_config: Optional['outputs.ClusterNodePoolNodeConfigLinuxNodeConfig'] = None, local_nvme_ssd_block_config: Optional['outputs.ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfig'] = None, local_ssd_count: Optional[int] = None, + local_ssd_encryption_mode: Optional[str] = None, logging_variant: Optional[str] = None, machine_type: Optional[str] = None, metadata: Optional[Mapping[str, str]] = None, @@ -10082,6 +10217,10 @@ def __init__(__self__, *, :param 'ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArgs' local_nvme_ssd_block_config: Parameters for the local NVMe SSDs. Structure is documented below. :param int local_ssd_count: The amount of local SSD disks that will be attached to each cluster node. Defaults to 0. + :param str local_ssd_encryption_mode: 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. :param str logging_variant: 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. :param str machine_type: The name of a Google Compute Engine machine type. Defaults to `e2-medium`. To create a custom machine type, value should be set as specified @@ -10174,6 +10313,8 @@ def __init__(__self__, *, pulumi.set(__self__, "local_nvme_ssd_block_config", local_nvme_ssd_block_config) if local_ssd_count is not None: pulumi.set(__self__, "local_ssd_count", local_ssd_count) + if local_ssd_encryption_mode is not None: + pulumi.set(__self__, "local_ssd_encryption_mode", local_ssd_encryption_mode) if logging_variant is not None: pulumi.set(__self__, "logging_variant", logging_variant) if machine_type is not None: @@ -10412,6 +10553,17 @@ def local_ssd_count(self) -> Optional[int]: """ return pulumi.get(self, "local_ssd_count") + @property + @pulumi.getter(name="localSsdEncryptionMode") + def local_ssd_encryption_mode(self) -> Optional[str]: + """ + 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. + """ + return pulumi.get(self, "local_ssd_encryption_mode") + @property @pulumi.getter(name="loggingVariant") def logging_variant(self) -> Optional[str]: @@ -13510,6 +13662,8 @@ def __key_warning(key: str): suggest = "local_nvme_ssd_block_config" elif key == "localSsdCount": suggest = "local_ssd_count" + elif key == "localSsdEncryptionMode": + suggest = "local_ssd_encryption_mode" elif key == "loggingVariant": suggest = "logging_variant" elif key == "machineType": @@ -13574,6 +13728,7 @@ def __init__(__self__, *, linux_node_config: Optional['outputs.NodePoolNodeConfigLinuxNodeConfig'] = None, local_nvme_ssd_block_config: Optional['outputs.NodePoolNodeConfigLocalNvmeSsdBlockConfig'] = None, local_ssd_count: Optional[int] = None, + local_ssd_encryption_mode: Optional[str] = None, logging_variant: Optional[str] = None, machine_type: Optional[str] = None, metadata: Optional[Mapping[str, str]] = None, @@ -13616,6 +13771,7 @@ def __init__(__self__, *, :param 'NodePoolNodeConfigLinuxNodeConfigArgs' linux_node_config: Parameters that can be configured on Linux nodes. :param 'NodePoolNodeConfigLocalNvmeSsdBlockConfigArgs' local_nvme_ssd_block_config: Parameters for raw-block local NVMe SSDs. :param int local_ssd_count: The number of local SSD disks to be attached to the node. + :param str local_ssd_encryption_mode: LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. :param str logging_variant: Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. :param str machine_type: The name of a Google Compute Engine machine type. :param Mapping[str, str] metadata: The metadata key/value pairs assigned to instances in the cluster. @@ -13682,6 +13838,8 @@ def __init__(__self__, *, pulumi.set(__self__, "local_nvme_ssd_block_config", local_nvme_ssd_block_config) if local_ssd_count is not None: pulumi.set(__self__, "local_ssd_count", local_ssd_count) + if local_ssd_encryption_mode is not None: + pulumi.set(__self__, "local_ssd_encryption_mode", local_ssd_encryption_mode) if logging_variant is not None: pulumi.set(__self__, "logging_variant", logging_variant) if machine_type is not None: @@ -13891,6 +14049,14 @@ def local_ssd_count(self) -> Optional[int]: """ return pulumi.get(self, "local_ssd_count") + @property + @pulumi.getter(name="localSsdEncryptionMode") + def local_ssd_encryption_mode(self) -> Optional[str]: + """ + LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + """ + return pulumi.get(self, "local_ssd_encryption_mode") + @property @pulumi.getter(name="loggingVariant") def logging_variant(self) -> Optional[str]: @@ -16657,6 +16823,35 @@ def enabled_apis(self) -> Sequence[str]: return pulumi.get(self, "enabled_apis") +@pulumi.output_type +class GetClusterEnterpriseConfigResult(dict): + def __init__(__self__, *, + cluster_tier: str, + desired_tier: str): + """ + :param str cluster_tier: Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE. + :param str desired_tier: Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE. + """ + pulumi.set(__self__, "cluster_tier", cluster_tier) + pulumi.set(__self__, "desired_tier", desired_tier) + + @property + @pulumi.getter(name="clusterTier") + def cluster_tier(self) -> str: + """ + Indicates the effective cluster tier. Available options include STANDARD and ENTERPRISE. + """ + return pulumi.get(self, "cluster_tier") + + @property + @pulumi.getter(name="desiredTier") + def desired_tier(self) -> str: + """ + Indicates the desired cluster tier. Available options include STANDARD and ENTERPRISE. + """ + return pulumi.get(self, "desired_tier") + + @pulumi.output_type class GetClusterFleetResult(dict): def __init__(__self__, *, @@ -17327,6 +17522,7 @@ def __init__(__self__, *, linux_node_configs: Sequence['outputs.GetClusterNodeConfigLinuxNodeConfigResult'], local_nvme_ssd_block_configs: Sequence['outputs.GetClusterNodeConfigLocalNvmeSsdBlockConfigResult'], local_ssd_count: int, + local_ssd_encryption_mode: str, logging_variant: str, machine_type: str, metadata: Mapping[str, str], @@ -17369,6 +17565,7 @@ def __init__(__self__, *, :param Sequence['GetClusterNodeConfigLinuxNodeConfigArgs'] linux_node_configs: Parameters that can be configured on Linux nodes. :param Sequence['GetClusterNodeConfigLocalNvmeSsdBlockConfigArgs'] local_nvme_ssd_block_configs: Parameters for raw-block local NVMe SSDs. :param int local_ssd_count: The number of local SSD disks to be attached to the node. + :param str local_ssd_encryption_mode: LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. :param str logging_variant: Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. :param str machine_type: The name of a Google Compute Engine machine type. :param Mapping[str, str] metadata: The metadata key/value pairs assigned to instances in the cluster. @@ -17411,6 +17608,7 @@ def __init__(__self__, *, pulumi.set(__self__, "linux_node_configs", linux_node_configs) pulumi.set(__self__, "local_nvme_ssd_block_configs", local_nvme_ssd_block_configs) pulumi.set(__self__, "local_ssd_count", local_ssd_count) + pulumi.set(__self__, "local_ssd_encryption_mode", local_ssd_encryption_mode) pulumi.set(__self__, "logging_variant", logging_variant) pulumi.set(__self__, "machine_type", machine_type) pulumi.set(__self__, "metadata", metadata) @@ -17600,6 +17798,14 @@ def local_ssd_count(self) -> int: """ return pulumi.get(self, "local_ssd_count") + @property + @pulumi.getter(name="localSsdEncryptionMode") + def local_ssd_encryption_mode(self) -> str: + """ + LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + """ + return pulumi.get(self, "local_ssd_encryption_mode") + @property @pulumi.getter(name="loggingVariant") def logging_variant(self) -> str: @@ -18722,18 +18928,29 @@ def version(self) -> str: @pulumi.output_type class GetClusterNodePoolAutoConfigResult(dict): def __init__(__self__, *, + linux_node_configs: Sequence['outputs.GetClusterNodePoolAutoConfigLinuxNodeConfigResult'], network_tags: Sequence['outputs.GetClusterNodePoolAutoConfigNetworkTagResult'], node_kubelet_configs: Sequence['outputs.GetClusterNodePoolAutoConfigNodeKubeletConfigResult'], resource_manager_tags: Mapping[str, str]): """ + :param Sequence['GetClusterNodePoolAutoConfigLinuxNodeConfigArgs'] linux_node_configs: Linux node configuration options. :param Sequence['GetClusterNodePoolAutoConfigNetworkTagArgs'] network_tags: Collection of Compute Engine network tags that can be applied to a node's underlying VM instance. :param Sequence['GetClusterNodePoolAutoConfigNodeKubeletConfigArgs'] node_kubelet_configs: Node kubelet configs. :param Mapping[str, str] resource_manager_tags: A map of resource manager tags. Resource manager tag keys and values have the same definition as resource manager tags. Keys must be in the format tagKeys/{tag_key_id}, and values are in the format tagValues/456. The field is ignored (both PUT & PATCH) when empty. """ + pulumi.set(__self__, "linux_node_configs", linux_node_configs) pulumi.set(__self__, "network_tags", network_tags) pulumi.set(__self__, "node_kubelet_configs", node_kubelet_configs) pulumi.set(__self__, "resource_manager_tags", resource_manager_tags) + @property + @pulumi.getter(name="linuxNodeConfigs") + def linux_node_configs(self) -> Sequence['outputs.GetClusterNodePoolAutoConfigLinuxNodeConfigResult']: + """ + Linux node configuration options. + """ + return pulumi.get(self, "linux_node_configs") + @property @pulumi.getter(name="networkTags") def network_tags(self) -> Sequence['outputs.GetClusterNodePoolAutoConfigNetworkTagResult']: @@ -18759,6 +18976,24 @@ def resource_manager_tags(self) -> Mapping[str, str]: return pulumi.get(self, "resource_manager_tags") +@pulumi.output_type +class GetClusterNodePoolAutoConfigLinuxNodeConfigResult(dict): + def __init__(__self__, *, + cgroup_mode: str): + """ + :param str cgroup_mode: cgroupMode specifies the cgroup mode to be used on the node. + """ + pulumi.set(__self__, "cgroup_mode", cgroup_mode) + + @property + @pulumi.getter(name="cgroupMode") + def cgroup_mode(self) -> str: + """ + cgroupMode specifies the cgroup mode to be used on the node. + """ + return pulumi.get(self, "cgroup_mode") + + @pulumi.output_type class GetClusterNodePoolAutoConfigNetworkTagResult(dict): def __init__(__self__, *, @@ -19285,6 +19520,7 @@ def __init__(__self__, *, linux_node_configs: Sequence['outputs.GetClusterNodePoolNodeConfigLinuxNodeConfigResult'], local_nvme_ssd_block_configs: Sequence['outputs.GetClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigResult'], local_ssd_count: int, + local_ssd_encryption_mode: str, logging_variant: str, machine_type: str, metadata: Mapping[str, str], @@ -19327,6 +19563,7 @@ def __init__(__self__, *, :param Sequence['GetClusterNodePoolNodeConfigLinuxNodeConfigArgs'] linux_node_configs: Parameters that can be configured on Linux nodes. :param Sequence['GetClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArgs'] local_nvme_ssd_block_configs: Parameters for raw-block local NVMe SSDs. :param int local_ssd_count: The number of local SSD disks to be attached to the node. + :param str local_ssd_encryption_mode: LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. :param str logging_variant: Type of logging agent that is used as the default value for node pools in the cluster. Valid values include DEFAULT and MAX_THROUGHPUT. :param str machine_type: The name of a Google Compute Engine machine type. :param Mapping[str, str] metadata: The metadata key/value pairs assigned to instances in the cluster. @@ -19369,6 +19606,7 @@ def __init__(__self__, *, pulumi.set(__self__, "linux_node_configs", linux_node_configs) pulumi.set(__self__, "local_nvme_ssd_block_configs", local_nvme_ssd_block_configs) pulumi.set(__self__, "local_ssd_count", local_ssd_count) + pulumi.set(__self__, "local_ssd_encryption_mode", local_ssd_encryption_mode) pulumi.set(__self__, "logging_variant", logging_variant) pulumi.set(__self__, "machine_type", machine_type) pulumi.set(__self__, "metadata", metadata) @@ -19558,6 +19796,14 @@ def local_ssd_count(self) -> int: """ return pulumi.get(self, "local_ssd_count") + @property + @pulumi.getter(name="localSsdEncryptionMode") + def local_ssd_encryption_mode(self) -> str: + """ + LocalSsdEncryptionMode specified the method used for encrypting the local SSDs attached to the node. + """ + return pulumi.get(self, "local_ssd_encryption_mode") + @property @pulumi.getter(name="loggingVariant") def logging_variant(self) -> str: diff --git a/sdk/python/pulumi_gcp/dataproc/_inputs.py b/sdk/python/pulumi_gcp/dataproc/_inputs.py index d820e042b7..d75f59d97c 100644 --- a/sdk/python/pulumi_gcp/dataproc/_inputs.py +++ b/sdk/python/pulumi_gcp/dataproc/_inputs.py @@ -39,6 +39,8 @@ 'BatchPysparkBatchArgsDict', 'BatchRuntimeConfigArgs', 'BatchRuntimeConfigArgsDict', + 'BatchRuntimeConfigAutotuningConfigArgs', + 'BatchRuntimeConfigAutotuningConfigArgsDict', 'BatchRuntimeInfoArgs', 'BatchRuntimeInfoArgsDict', 'BatchRuntimeInfoApproximateUsageArgs', @@ -77,6 +79,8 @@ 'ClusterClusterConfigEndpointConfigArgsDict', 'ClusterClusterConfigGceClusterConfigArgs', 'ClusterClusterConfigGceClusterConfigArgsDict', + 'ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs', + 'ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgsDict', 'ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs', 'ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgsDict', 'ClusterClusterConfigGceClusterConfigReservationAffinityArgs', @@ -105,6 +109,8 @@ 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArgsDict', 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArgs', 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArgsDict', + 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs', + 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgsDict', 'ClusterClusterConfigSecurityConfigArgs', 'ClusterClusterConfigSecurityConfigArgsDict', 'ClusterClusterConfigSecurityConfigKerberosConfigArgs', @@ -1367,6 +1373,15 @@ def python_file_uris(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[st if not MYPY: class BatchRuntimeConfigArgsDict(TypedDict): + autotuning_config: NotRequired[pulumi.Input['BatchRuntimeConfigAutotuningConfigArgsDict']] + """ + Optional. Autotuning configuration of the workload. + Structure is documented below. + """ + cohort: NotRequired[pulumi.Input[str]] + """ + Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + """ container_image: NotRequired[pulumi.Input[str]] """ Optional custom container image for the job runtime environment. If not specified, a default container image will be used. @@ -1390,17 +1405,26 @@ class BatchRuntimeConfigArgsDict(TypedDict): @pulumi.input_type class BatchRuntimeConfigArgs: def __init__(__self__, *, + autotuning_config: Optional[pulumi.Input['BatchRuntimeConfigAutotuningConfigArgs']] = None, + cohort: Optional[pulumi.Input[str]] = None, container_image: Optional[pulumi.Input[str]] = None, effective_properties: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, properties: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, version: Optional[pulumi.Input[str]] = None): """ + :param pulumi.Input['BatchRuntimeConfigAutotuningConfigArgs'] autotuning_config: Optional. Autotuning configuration of the workload. + Structure is documented below. + :param pulumi.Input[str] cohort: Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. :param pulumi.Input[str] container_image: Optional custom container image for the job runtime environment. If not specified, a default container image will be used. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_properties: (Output) A mapping of property names to values, which are used to configure workload execution. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] properties: A mapping of property names to values, which are used to configure workload execution. :param pulumi.Input[str] version: Version of the batch runtime. """ + if autotuning_config is not None: + pulumi.set(__self__, "autotuning_config", autotuning_config) + if cohort is not None: + pulumi.set(__self__, "cohort", cohort) if container_image is not None: pulumi.set(__self__, "container_image", container_image) if effective_properties is not None: @@ -1410,6 +1434,31 @@ def __init__(__self__, *, if version is not None: pulumi.set(__self__, "version", version) + @property + @pulumi.getter(name="autotuningConfig") + def autotuning_config(self) -> Optional[pulumi.Input['BatchRuntimeConfigAutotuningConfigArgs']]: + """ + Optional. Autotuning configuration of the workload. + Structure is documented below. + """ + return pulumi.get(self, "autotuning_config") + + @autotuning_config.setter + def autotuning_config(self, value: Optional[pulumi.Input['BatchRuntimeConfigAutotuningConfigArgs']]): + pulumi.set(self, "autotuning_config", value) + + @property + @pulumi.getter + def cohort(self) -> Optional[pulumi.Input[str]]: + """ + Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + """ + return pulumi.get(self, "cohort") + + @cohort.setter + def cohort(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cohort", value) + @property @pulumi.getter(name="containerImage") def container_image(self) -> Optional[pulumi.Input[str]]: @@ -1460,6 +1509,41 @@ def version(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "version", value) +if not MYPY: + class BatchRuntimeConfigAutotuningConfigArgsDict(TypedDict): + scenarios: NotRequired[pulumi.Input[Sequence[pulumi.Input[str]]]] + """ + Optional. Scenarios for which tunings are applied. + Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + """ +elif False: + BatchRuntimeConfigAutotuningConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class BatchRuntimeConfigAutotuningConfigArgs: + def __init__(__self__, *, + scenarios: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input[str]]] scenarios: Optional. Scenarios for which tunings are applied. + Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + """ + if scenarios is not None: + pulumi.set(__self__, "scenarios", scenarios) + + @property + @pulumi.getter + def scenarios(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Optional. Scenarios for which tunings are applied. + Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + """ + return pulumi.get(self, "scenarios") + + @scenarios.setter + def scenarios(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "scenarios", value) + + if not MYPY: class BatchRuntimeInfoArgsDict(TypedDict): approximate_usages: NotRequired[pulumi.Input[Sequence[pulumi.Input['BatchRuntimeInfoApproximateUsageArgsDict']]]] @@ -3390,6 +3474,10 @@ def http_ports(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str] if not MYPY: class ClusterClusterConfigGceClusterConfigArgsDict(TypedDict): + confidential_instance_config: NotRequired[pulumi.Input['ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgsDict']] + """ + Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + """ internal_ip_only: NotRequired[pulumi.Input[bool]] """ By default, clusters are not restricted to internal IP addresses, @@ -3462,6 +3550,7 @@ class ClusterClusterConfigGceClusterConfigArgsDict(TypedDict): @pulumi.input_type class ClusterClusterConfigGceClusterConfigArgs: def __init__(__self__, *, + confidential_instance_config: Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs']] = None, internal_ip_only: Optional[pulumi.Input[bool]] = None, metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, network: Optional[pulumi.Input[str]] = None, @@ -3474,6 +3563,7 @@ def __init__(__self__, *, tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, zone: Optional[pulumi.Input[str]] = None): """ + :param pulumi.Input['ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs'] confidential_instance_config: Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) :param pulumi.Input[bool] internal_ip_only: 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 instances in the cluster will only have internal IP addresses. Note: Private Google Access @@ -3508,6 +3598,8 @@ def __init__(__self__, *, which computing resources are available for use with other configs such as `cluster_config.master_config.machine_type` and `cluster_config.worker_config.machine_type`. """ + if confidential_instance_config is not None: + pulumi.set(__self__, "confidential_instance_config", confidential_instance_config) if internal_ip_only is not None: pulumi.set(__self__, "internal_ip_only", internal_ip_only) if metadata is not None: @@ -3531,6 +3623,18 @@ def __init__(__self__, *, if zone is not None: pulumi.set(__self__, "zone", zone) + @property + @pulumi.getter(name="confidentialInstanceConfig") + def confidential_instance_config(self) -> Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs']]: + """ + Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + """ + return pulumi.get(self, "confidential_instance_config") + + @confidential_instance_config.setter + def confidential_instance_config(self, value: Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs']]): + pulumi.set(self, "confidential_instance_config", value) + @property @pulumi.getter(name="internalIpOnly") def internal_ip_only(self) -> Optional[pulumi.Input[bool]]: @@ -3686,6 +3790,38 @@ def zone(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "zone", value) +if not MYPY: + class ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgsDict(TypedDict): + enable_confidential_compute: NotRequired[pulumi.Input[bool]] + """ + Defines whether the instance should have confidential compute enabled. + """ +elif False: + ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs: + def __init__(__self__, *, + enable_confidential_compute: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[bool] enable_confidential_compute: Defines whether the instance should have confidential compute enabled. + """ + if enable_confidential_compute is not None: + pulumi.set(__self__, "enable_confidential_compute", enable_confidential_compute) + + @property + @pulumi.getter(name="enableConfidentialCompute") + def enable_confidential_compute(self) -> Optional[pulumi.Input[bool]]: + """ + Defines whether the instance should have confidential compute enabled. + """ + return pulumi.get(self, "enable_confidential_compute") + + @enable_confidential_compute.setter + def enable_confidential_compute(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enable_confidential_compute", value) + + if not MYPY: class ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgsDict(TypedDict): node_group_uri: pulumi.Input[str] @@ -4676,6 +4812,10 @@ class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgsDi """ A list of instance selection results in the group. """ + provisioning_model_mix: NotRequired[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgsDict']] + """ + Defines how Dataproc should create VMs with a mixture of provisioning models. + """ elif False: ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgsDict: TypeAlias = Mapping[str, Any] @@ -4683,15 +4823,19 @@ class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgsDi class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyArgs: def __init__(__self__, *, instance_selection_lists: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArgs']]]] = None, - instance_selection_results: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArgs']]]] = None): + instance_selection_results: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArgs']]]] = None, + provisioning_model_mix: Optional[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs']] = None): """ :param pulumi.Input[Sequence[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArgs']]] instance_selection_lists: List of instance selection options that the group will use when creating new VMs. :param pulumi.Input[Sequence[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArgs']]] instance_selection_results: A list of instance selection results in the group. + :param pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs'] provisioning_model_mix: Defines how Dataproc should create VMs with a mixture of provisioning models. """ if instance_selection_lists is not None: pulumi.set(__self__, "instance_selection_lists", instance_selection_lists) if instance_selection_results is not None: pulumi.set(__self__, "instance_selection_results", instance_selection_results) + if provisioning_model_mix is not None: + pulumi.set(__self__, "provisioning_model_mix", provisioning_model_mix) @property @pulumi.getter(name="instanceSelectionLists") @@ -4717,6 +4861,18 @@ def instance_selection_results(self) -> Optional[pulumi.Input[Sequence[pulumi.In def instance_selection_results(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArgs']]]]): pulumi.set(self, "instance_selection_results", value) + @property + @pulumi.getter(name="provisioningModelMix") + def provisioning_model_mix(self) -> Optional[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs']]: + """ + Defines how Dataproc should create VMs with a mixture of provisioning models. + """ + return pulumi.get(self, "provisioning_model_mix") + + @provisioning_model_mix.setter + def provisioning_model_mix(self, value: Optional[pulumi.Input['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs']]): + pulumi.set(self, "provisioning_model_mix", value) + if not MYPY: class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArgsDict(TypedDict): @@ -4828,6 +4984,58 @@ def vm_count(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "vm_count", value) +if not MYPY: + class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgsDict(TypedDict): + standard_capacity_base: NotRequired[pulumi.Input[int]] + """ + The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + """ + standard_capacity_percent_above_base: NotRequired[pulumi.Input[int]] + """ + The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + """ +elif False: + ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs: + def __init__(__self__, *, + standard_capacity_base: Optional[pulumi.Input[int]] = None, + standard_capacity_percent_above_base: Optional[pulumi.Input[int]] = None): + """ + :param pulumi.Input[int] standard_capacity_base: The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + :param pulumi.Input[int] standard_capacity_percent_above_base: The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + """ + if standard_capacity_base is not None: + pulumi.set(__self__, "standard_capacity_base", standard_capacity_base) + if standard_capacity_percent_above_base is not None: + pulumi.set(__self__, "standard_capacity_percent_above_base", standard_capacity_percent_above_base) + + @property + @pulumi.getter(name="standardCapacityBase") + def standard_capacity_base(self) -> Optional[pulumi.Input[int]]: + """ + The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + """ + return pulumi.get(self, "standard_capacity_base") + + @standard_capacity_base.setter + def standard_capacity_base(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "standard_capacity_base", value) + + @property + @pulumi.getter(name="standardCapacityPercentAboveBase") + def standard_capacity_percent_above_base(self) -> Optional[pulumi.Input[int]]: + """ + The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + """ + return pulumi.get(self, "standard_capacity_percent_above_base") + + @standard_capacity_percent_above_base.setter + def standard_capacity_percent_above_base(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "standard_capacity_percent_above_base", value) + + if not MYPY: class ClusterClusterConfigSecurityConfigArgsDict(TypedDict): kerberos_config: pulumi.Input['ClusterClusterConfigSecurityConfigKerberosConfigArgsDict'] diff --git a/sdk/python/pulumi_gcp/dataproc/batch.py b/sdk/python/pulumi_gcp/dataproc/batch.py index 24d07180b4..bb41adf82b 100644 --- a/sdk/python/pulumi_gcp/dataproc/batch.py +++ b/sdk/python/pulumi_gcp/dataproc/batch.py @@ -846,6 +846,44 @@ def __init__(__self__, "args": ["https://storage.googleapis.com/terraform-batches/flights.csv"], }) ``` + ### Dataproc Batch Autotuning + + ```python + import pulumi + import pulumi_gcp as gcp + + example_batch_autotuning = gcp.dataproc.Batch("example_batch_autotuning", + batch_id="tf-test-batch_16511", + location="us-central1", + labels={ + "batch_test": "terraform", + }, + runtime_config={ + "version": "2.2", + "properties": { + "spark.dynamicAllocation.enabled": "false", + "spark.executor.instances": "2", + }, + "cohort": "tf-dataproc-batch-example", + "autotuning_config": { + "scenarios": [ + "SCALING", + "MEMORY", + ], + }, + }, + environment_config={ + "execution_config": { + "subnetwork_uri": "default", + "ttl": "3600s", + }, + }, + spark_batch={ + "main_class": "org.apache.spark.examples.SparkPi", + "args": ["10"], + "jar_file_uris": ["file:///usr/lib/spark/examples/jars/spark-examples.jar"], + }) + ``` ## Import @@ -1131,6 +1169,44 @@ def __init__(__self__, "args": ["https://storage.googleapis.com/terraform-batches/flights.csv"], }) ``` + ### Dataproc Batch Autotuning + + ```python + import pulumi + import pulumi_gcp as gcp + + example_batch_autotuning = gcp.dataproc.Batch("example_batch_autotuning", + batch_id="tf-test-batch_16511", + location="us-central1", + labels={ + "batch_test": "terraform", + }, + runtime_config={ + "version": "2.2", + "properties": { + "spark.dynamicAllocation.enabled": "false", + "spark.executor.instances": "2", + }, + "cohort": "tf-dataproc-batch-example", + "autotuning_config": { + "scenarios": [ + "SCALING", + "MEMORY", + ], + }, + }, + environment_config={ + "execution_config": { + "subnetwork_uri": "default", + "ttl": "3600s", + }, + }, + spark_batch={ + "main_class": "org.apache.spark.examples.SparkPi", + "args": ["10"], + "jar_file_uris": ["file:///usr/lib/spark/examples/jars/spark-examples.jar"], + }) + ``` ## Import diff --git a/sdk/python/pulumi_gcp/dataproc/outputs.py b/sdk/python/pulumi_gcp/dataproc/outputs.py index bd90c121ae..7d5c3cefa4 100644 --- a/sdk/python/pulumi_gcp/dataproc/outputs.py +++ b/sdk/python/pulumi_gcp/dataproc/outputs.py @@ -28,6 +28,7 @@ 'BatchEnvironmentConfigPeripheralsConfigSparkHistoryServerConfig', 'BatchPysparkBatch', 'BatchRuntimeConfig', + 'BatchRuntimeConfigAutotuningConfig', 'BatchRuntimeInfo', 'BatchRuntimeInfoApproximateUsage', 'BatchRuntimeInfoCurrentUsage', @@ -47,6 +48,7 @@ 'ClusterClusterConfigEncryptionConfig', 'ClusterClusterConfigEndpointConfig', 'ClusterClusterConfigGceClusterConfig', + 'ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig', 'ClusterClusterConfigGceClusterConfigNodeGroupAffinity', 'ClusterClusterConfigGceClusterConfigReservationAffinity', 'ClusterClusterConfigGceClusterConfigShieldedInstanceConfig', @@ -61,6 +63,7 @@ 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy', 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList', 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResult', + 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix', 'ClusterClusterConfigSecurityConfig', 'ClusterClusterConfigSecurityConfigKerberosConfig', 'ClusterClusterConfigSoftwareConfig', @@ -1008,7 +1011,9 @@ class BatchRuntimeConfig(dict): @staticmethod def __key_warning(key: str): suggest = None - if key == "containerImage": + if key == "autotuningConfig": + suggest = "autotuning_config" + elif key == "containerImage": suggest = "container_image" elif key == "effectiveProperties": suggest = "effective_properties" @@ -1025,17 +1030,26 @@ def get(self, key: str, default = None) -> Any: return super().get(key, default) def __init__(__self__, *, + autotuning_config: Optional['outputs.BatchRuntimeConfigAutotuningConfig'] = None, + cohort: Optional[str] = None, container_image: Optional[str] = None, effective_properties: Optional[Mapping[str, str]] = None, properties: Optional[Mapping[str, str]] = None, version: Optional[str] = None): """ + :param 'BatchRuntimeConfigAutotuningConfigArgs' autotuning_config: Optional. Autotuning configuration of the workload. + Structure is documented below. + :param str cohort: Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. :param str container_image: Optional custom container image for the job runtime environment. If not specified, a default container image will be used. :param Mapping[str, str] effective_properties: (Output) A mapping of property names to values, which are used to configure workload execution. :param Mapping[str, str] properties: A mapping of property names to values, which are used to configure workload execution. :param str version: Version of the batch runtime. """ + if autotuning_config is not None: + pulumi.set(__self__, "autotuning_config", autotuning_config) + if cohort is not None: + pulumi.set(__self__, "cohort", cohort) if container_image is not None: pulumi.set(__self__, "container_image", container_image) if effective_properties is not None: @@ -1045,6 +1059,23 @@ def __init__(__self__, *, if version is not None: pulumi.set(__self__, "version", version) + @property + @pulumi.getter(name="autotuningConfig") + def autotuning_config(self) -> Optional['outputs.BatchRuntimeConfigAutotuningConfig']: + """ + Optional. Autotuning configuration of the workload. + Structure is documented below. + """ + return pulumi.get(self, "autotuning_config") + + @property + @pulumi.getter + def cohort(self) -> Optional[str]: + """ + Optional. Cohort identifier. Identifies families of the workloads having the same shape, e.g. daily ETL jobs. + """ + return pulumi.get(self, "cohort") + @property @pulumi.getter(name="containerImage") def container_image(self) -> Optional[str]: @@ -1079,6 +1110,27 @@ def version(self) -> Optional[str]: return pulumi.get(self, "version") +@pulumi.output_type +class BatchRuntimeConfigAutotuningConfig(dict): + def __init__(__self__, *, + scenarios: Optional[Sequence[str]] = None): + """ + :param Sequence[str] scenarios: Optional. Scenarios for which tunings are applied. + Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + """ + if scenarios is not None: + pulumi.set(__self__, "scenarios", scenarios) + + @property + @pulumi.getter + def scenarios(self) -> Optional[Sequence[str]]: + """ + Optional. Scenarios for which tunings are applied. + Each value may be one of: `SCALING`, `BROADCAST_HASH_JOIN`, `MEMORY`. + """ + return pulumi.get(self, "scenarios") + + @pulumi.output_type class BatchRuntimeInfo(dict): @staticmethod @@ -2634,7 +2686,9 @@ class ClusterClusterConfigGceClusterConfig(dict): @staticmethod def __key_warning(key: str): suggest = None - if key == "internalIpOnly": + if key == "confidentialInstanceConfig": + suggest = "confidential_instance_config" + elif key == "internalIpOnly": suggest = "internal_ip_only" elif key == "nodeGroupAffinity": suggest = "node_group_affinity" @@ -2659,6 +2713,7 @@ def get(self, key: str, default = None) -> Any: return super().get(key, default) def __init__(__self__, *, + confidential_instance_config: Optional['outputs.ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig'] = None, internal_ip_only: Optional[bool] = None, metadata: Optional[Mapping[str, str]] = None, network: Optional[str] = None, @@ -2671,6 +2726,7 @@ def __init__(__self__, *, tags: Optional[Sequence[str]] = None, zone: Optional[str] = None): """ + :param 'ClusterClusterConfigGceClusterConfigConfidentialInstanceConfigArgs' confidential_instance_config: Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) :param bool internal_ip_only: 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 instances in the cluster will only have internal IP addresses. Note: Private Google Access @@ -2705,6 +2761,8 @@ def __init__(__self__, *, which computing resources are available for use with other configs such as `cluster_config.master_config.machine_type` and `cluster_config.worker_config.machine_type`. """ + if confidential_instance_config is not None: + pulumi.set(__self__, "confidential_instance_config", confidential_instance_config) if internal_ip_only is not None: pulumi.set(__self__, "internal_ip_only", internal_ip_only) if metadata is not None: @@ -2728,6 +2786,14 @@ def __init__(__self__, *, if zone is not None: pulumi.set(__self__, "zone", zone) + @property + @pulumi.getter(name="confidentialInstanceConfig") + def confidential_instance_config(self) -> Optional['outputs.ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig']: + """ + Confidential Instance Config for clusters using [Confidential VMs](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/confidential-compute) + """ + return pulumi.get(self, "confidential_instance_config") + @property @pulumi.getter(name="internalIpOnly") def internal_ip_only(self) -> Optional[bool]: @@ -2839,6 +2905,42 @@ def zone(self) -> Optional[str]: return pulumi.get(self, "zone") +@pulumi.output_type +class ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "enableConfidentialCompute": + suggest = "enable_confidential_compute" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterClusterConfigGceClusterConfigConfidentialInstanceConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + enable_confidential_compute: Optional[bool] = None): + """ + :param bool enable_confidential_compute: Defines whether the instance should have confidential compute enabled. + """ + if enable_confidential_compute is not None: + pulumi.set(__self__, "enable_confidential_compute", enable_confidential_compute) + + @property + @pulumi.getter(name="enableConfidentialCompute") + def enable_confidential_compute(self) -> Optional[bool]: + """ + Defines whether the instance should have confidential compute enabled. + """ + return pulumi.get(self, "enable_confidential_compute") + + @pulumi.output_type class ClusterClusterConfigGceClusterConfigNodeGroupAffinity(dict): @staticmethod @@ -3667,6 +3769,8 @@ def __key_warning(key: str): suggest = "instance_selection_lists" elif key == "instanceSelectionResults": suggest = "instance_selection_results" + elif key == "provisioningModelMix": + suggest = "provisioning_model_mix" if suggest: pulumi.log.warn(f"Key '{key}' not found in ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicy. Access the value via the '{suggest}' property getter instead.") @@ -3681,15 +3785,19 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, instance_selection_lists: Optional[Sequence['outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList']] = None, - instance_selection_results: Optional[Sequence['outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResult']] = None): + instance_selection_results: Optional[Sequence['outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResult']] = None, + provisioning_model_mix: Optional['outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix'] = None): """ :param Sequence['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionListArgs'] instance_selection_lists: List of instance selection options that the group will use when creating new VMs. :param Sequence['ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionResultArgs'] instance_selection_results: A list of instance selection results in the group. + :param 'ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMixArgs' provisioning_model_mix: Defines how Dataproc should create VMs with a mixture of provisioning models. """ if instance_selection_lists is not None: pulumi.set(__self__, "instance_selection_lists", instance_selection_lists) if instance_selection_results is not None: pulumi.set(__self__, "instance_selection_results", instance_selection_results) + if provisioning_model_mix is not None: + pulumi.set(__self__, "provisioning_model_mix", provisioning_model_mix) @property @pulumi.getter(name="instanceSelectionLists") @@ -3707,6 +3815,14 @@ def instance_selection_results(self) -> Optional[Sequence['outputs.ClusterCluste """ return pulumi.get(self, "instance_selection_results") + @property + @pulumi.getter(name="provisioningModelMix") + def provisioning_model_mix(self) -> Optional['outputs.ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix']: + """ + Defines how Dataproc should create VMs with a mixture of provisioning models. + """ + return pulumi.get(self, "provisioning_model_mix") + @pulumi.output_type class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyInstanceSelectionList(dict): @@ -3810,6 +3926,56 @@ def vm_count(self) -> Optional[int]: return pulumi.get(self, "vm_count") +@pulumi.output_type +class ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "standardCapacityBase": + suggest = "standard_capacity_base" + elif key == "standardCapacityPercentAboveBase": + suggest = "standard_capacity_percent_above_base" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterClusterConfigPreemptibleWorkerConfigInstanceFlexibilityPolicyProvisioningModelMix.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + standard_capacity_base: Optional[int] = None, + standard_capacity_percent_above_base: Optional[int] = None): + """ + :param int standard_capacity_base: The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + :param int standard_capacity_percent_above_base: The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + """ + if standard_capacity_base is not None: + pulumi.set(__self__, "standard_capacity_base", standard_capacity_base) + if standard_capacity_percent_above_base is not None: + pulumi.set(__self__, "standard_capacity_percent_above_base", standard_capacity_percent_above_base) + + @property + @pulumi.getter(name="standardCapacityBase") + def standard_capacity_base(self) -> Optional[int]: + """ + The base capacity that will always use Standard VMs to avoid risk of more preemption than the minimum capacity you need. + """ + return pulumi.get(self, "standard_capacity_base") + + @property + @pulumi.getter(name="standardCapacityPercentAboveBase") + def standard_capacity_percent_above_base(self) -> Optional[int]: + """ + The percentage of target capacity that should use Standard VM. The remaining percentage will use Spot VMs. + """ + return pulumi.get(self, "standard_capacity_percent_above_base") + + @pulumi.output_type class ClusterClusterConfigSecurityConfig(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/diagflow/_inputs.py b/sdk/python/pulumi_gcp/diagflow/_inputs.py index 1b94563af4..865d382060 100644 --- a/sdk/python/pulumi_gcp/diagflow/_inputs.py +++ b/sdk/python/pulumi_gcp/diagflow/_inputs.py @@ -1400,7 +1400,7 @@ class CxFlowAdvancedSettingsSpeechSettingsArgsDict(TypedDict): """ use_timeout_based_endpointing: NotRequired[pulumi.Input[bool]] """ - Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. """ elif False: CxFlowAdvancedSettingsSpeechSettingsArgsDict: TypeAlias = Mapping[str, Any] @@ -1418,7 +1418,7 @@ def __init__(__self__, *, An object containing a list of **"key": value** pairs. Example: **{ "name": "wrench", "mass": "1.3kg", "count": "3" }**. :param pulumi.Input[str] no_speech_timeout: Timeout before detecting no speech. A duration in seconds with up to nine fractional digits, ending with 's'. Example: "3.5s". - :param pulumi.Input[bool] use_timeout_based_endpointing: Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + :param pulumi.Input[bool] use_timeout_based_endpointing: Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. """ if endpointer_sensitivity is not None: pulumi.set(__self__, "endpointer_sensitivity", endpointer_sensitivity) @@ -1471,7 +1471,7 @@ def no_speech_timeout(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="useTimeoutBasedEndpointing") def use_timeout_based_endpointing(self) -> Optional[pulumi.Input[bool]]: """ - Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. """ return pulumi.get(self, "use_timeout_based_endpointing") diff --git a/sdk/python/pulumi_gcp/diagflow/outputs.py b/sdk/python/pulumi_gcp/diagflow/outputs.py index 63c15ddd19..7672fc664c 100644 --- a/sdk/python/pulumi_gcp/diagflow/outputs.py +++ b/sdk/python/pulumi_gcp/diagflow/outputs.py @@ -1069,7 +1069,7 @@ def __init__(__self__, *, An object containing a list of **"key": value** pairs. Example: **{ "name": "wrench", "mass": "1.3kg", "count": "3" }**. :param str no_speech_timeout: Timeout before detecting no speech. A duration in seconds with up to nine fractional digits, ending with 's'. Example: "3.5s". - :param bool use_timeout_based_endpointing: Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + :param bool use_timeout_based_endpointing: Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. """ if endpointer_sensitivity is not None: pulumi.set(__self__, "endpointer_sensitivity", endpointer_sensitivity) @@ -1110,7 +1110,7 @@ def no_speech_timeout(self) -> Optional[str]: @pulumi.getter(name="useTimeoutBasedEndpointing") def use_timeout_based_endpointing(self) -> Optional[bool]: """ - Use timeout based endpointing, interpreting endpointer sensitivy as seconds of timeout value. + Use timeout based endpointing, interpreting endpointer sensitivity as seconds of timeout value. """ return pulumi.get(self, "use_timeout_based_endpointing") diff --git a/sdk/python/pulumi_gcp/discoveryengine/search_engine.py b/sdk/python/pulumi_gcp/discoveryengine/search_engine.py index f2e7390348..c0baf4c50b 100644 --- a/sdk/python/pulumi_gcp/discoveryengine/search_engine.py +++ b/sdk/python/pulumi_gcp/discoveryengine/search_engine.py @@ -42,7 +42,7 @@ def __init__(__self__, *, :param pulumi.Input['SearchEngineCommonConfigArgs'] common_config: Common config spec that specifies the metadata of the engine. :param pulumi.Input[str] industry_vertical: 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"] """ pulumi.set(__self__, "collection_id", collection_id) pulumi.set(__self__, "data_store_ids", data_store_ids) @@ -148,7 +148,7 @@ def industry_vertical(self) -> Optional[pulumi.Input[str]]: """ 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"] """ return pulumi.get(self, "industry_vertical") @@ -191,7 +191,7 @@ def __init__(__self__, *, :param pulumi.Input[str] engine_id: Unique ID to use for Search Engine App. :param pulumi.Input[str] industry_vertical: 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"] :param pulumi.Input[str] location: Location. :param pulumi.Input[str] name: The unique full resource name of the search engine. Values are of the format `projects/{project}/locations/{location}/collections/{collection_id}/engines/{engine_id}`. @@ -304,7 +304,7 @@ def industry_vertical(self) -> Optional[pulumi.Input[str]]: """ 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"] """ return pulumi.get(self, "industry_vertical") @@ -456,7 +456,7 @@ def __init__(__self__, :param pulumi.Input[str] engine_id: Unique ID to use for Search Engine App. :param pulumi.Input[str] industry_vertical: 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"] :param pulumi.Input[str] location: Location. :param pulumi.Input[Union['SearchEngineSearchEngineConfigArgs', 'SearchEngineSearchEngineConfigArgsDict']] search_engine_config: Configurations for a Search Engine. Structure is documented below. @@ -619,7 +619,7 @@ def get(resource_name: str, :param pulumi.Input[str] engine_id: Unique ID to use for Search Engine App. :param pulumi.Input[str] industry_vertical: 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"] :param pulumi.Input[str] location: Location. :param pulumi.Input[str] name: The unique full resource name of the search engine. Values are of the format `projects/{project}/locations/{location}/collections/{collection_id}/engines/{engine_id}`. @@ -701,7 +701,7 @@ def industry_vertical(self) -> pulumi.Output[Optional[str]]: """ 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"] """ return pulumi.get(self, "industry_vertical") diff --git a/sdk/python/pulumi_gcp/firebaserules/release.py b/sdk/python/pulumi_gcp/firebaserules/release.py index 413e71048c..62f405acfa 100644 --- a/sdk/python/pulumi_gcp/firebaserules/release.py +++ b/sdk/python/pulumi_gcp/firebaserules/release.py @@ -205,6 +205,44 @@ def __init__(__self__, * [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 + ```python + import pulumi + import pulumi_gcp as gcp + + firestore = gcp.firebaserules.Ruleset("firestore", + project="my-project-name", + source={ + "files": [{ + "content": "service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }", + "name": "firestore.rules", + }], + }) + primary = gcp.firebaserules.Release("primary", + name="cloud.firestore", + project="my-project-name", + ruleset_name=firestore.name.apply(lambda name: f"projects/my-project-name/rulesets/{name}")) + ``` + ### Firestore_release_additional + Creates a Firebase Rules Release to an additional Cloud Firestore instance + ```python + import pulumi + import pulumi_gcp as gcp + + firestore = gcp.firebaserules.Ruleset("firestore", + project="my-project-name", + source={ + "files": [{ + "content": "service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }", + "name": "firestore.rules", + }], + }) + primary = gcp.firebaserules.Release("primary", + name="cloud.firestore/database", + project="my-project-name", + ruleset_name=firestore.name.apply(lambda name: f"projects/my-project-name/rulesets/{name}")) + ``` ## Import Release can be imported using any of these accepted formats: @@ -237,6 +275,44 @@ def __init__(__self__, * [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 + ```python + import pulumi + import pulumi_gcp as gcp + + firestore = gcp.firebaserules.Ruleset("firestore", + project="my-project-name", + source={ + "files": [{ + "content": "service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }", + "name": "firestore.rules", + }], + }) + primary = gcp.firebaserules.Release("primary", + name="cloud.firestore", + project="my-project-name", + ruleset_name=firestore.name.apply(lambda name: f"projects/my-project-name/rulesets/{name}")) + ``` + ### Firestore_release_additional + Creates a Firebase Rules Release to an additional Cloud Firestore instance + ```python + import pulumi + import pulumi_gcp as gcp + + firestore = gcp.firebaserules.Ruleset("firestore", + project="my-project-name", + source={ + "files": [{ + "content": "service cloud.firestore {match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }", + "name": "firestore.rules", + }], + }) + primary = gcp.firebaserules.Release("primary", + name="cloud.firestore/database", + project="my-project-name", + ruleset_name=firestore.name.apply(lambda name: f"projects/my-project-name/rulesets/{name}")) + ``` ## Import Release can be imported using any of these accepted formats: diff --git a/sdk/python/pulumi_gcp/firestore/field.py b/sdk/python/pulumi_gcp/firestore/field.py index d52d06d020..fbafedf010 100644 --- a/sdk/python/pulumi_gcp/firestore/field.py +++ b/sdk/python/pulumi_gcp/firestore/field.py @@ -324,7 +324,7 @@ def __init__(__self__, basic = gcp.firestore.Field("basic", project="my-project-name", database=database.name, - collection="chatrooms__16511", + collection="chatrooms__8493", field="basic", index_config={ "indexes": [ @@ -375,7 +375,7 @@ def __init__(__self__, match_override = gcp.firestore.Field("match_override", project="my-project-name", database=database.name, - collection="chatrooms__8493", + collection="chatrooms__9106", field="field_with_same_configuration_as_ancestor", index_config={ "indexes": [ @@ -462,7 +462,7 @@ def __init__(__self__, basic = gcp.firestore.Field("basic", project="my-project-name", database=database.name, - collection="chatrooms__16511", + collection="chatrooms__8493", field="basic", index_config={ "indexes": [ @@ -513,7 +513,7 @@ def __init__(__self__, match_override = gcp.firestore.Field("match_override", project="my-project-name", database=database.name, - collection="chatrooms__8493", + collection="chatrooms__9106", field="field_with_same_configuration_as_ancestor", index_config={ "indexes": [ diff --git a/sdk/python/pulumi_gcp/gemini/__init__.py b/sdk/python/pulumi_gcp/gemini/__init__.py new file mode 100644 index 0000000000..b3c75c148c --- /dev/null +++ b/sdk/python/pulumi_gcp/gemini/__init__.py @@ -0,0 +1,15 @@ +# coding=utf-8 +# *** 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! *** + +from .. import _utilities +import typing +# Export this package's modules as members: +from .code_repository_index import * +from .get_repository_group_iam_policy import * +from .repository_group import * +from .repository_group_iam_binding import * +from .repository_group_iam_member import * +from .repository_group_iam_policy import * +from ._inputs import * +from . import outputs diff --git a/sdk/python/pulumi_gcp/gemini/_inputs.py b/sdk/python/pulumi_gcp/gemini/_inputs.py new file mode 100644 index 0000000000..d74aaf95ea --- /dev/null +++ b/sdk/python/pulumi_gcp/gemini/_inputs.py @@ -0,0 +1,183 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = [ + 'RepositoryGroupIamBindingConditionArgs', + 'RepositoryGroupIamBindingConditionArgsDict', + 'RepositoryGroupIamMemberConditionArgs', + 'RepositoryGroupIamMemberConditionArgsDict', + 'RepositoryGroupRepositoryArgs', + 'RepositoryGroupRepositoryArgsDict', +] + +MYPY = False + +if not MYPY: + class RepositoryGroupIamBindingConditionArgsDict(TypedDict): + expression: pulumi.Input[str] + title: pulumi.Input[str] + description: NotRequired[pulumi.Input[str]] +elif False: + RepositoryGroupIamBindingConditionArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RepositoryGroupIamBindingConditionArgs: + def __init__(__self__, *, + expression: pulumi.Input[str], + title: pulumi.Input[str], + description: Optional[pulumi.Input[str]] = None): + pulumi.set(__self__, "expression", expression) + pulumi.set(__self__, "title", title) + if description is not None: + pulumi.set(__self__, "description", description) + + @property + @pulumi.getter + def expression(self) -> pulumi.Input[str]: + return pulumi.get(self, "expression") + + @expression.setter + def expression(self, value: pulumi.Input[str]): + pulumi.set(self, "expression", value) + + @property + @pulumi.getter + def title(self) -> pulumi.Input[str]: + return pulumi.get(self, "title") + + @title.setter + def title(self, value: pulumi.Input[str]): + pulumi.set(self, "title", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + +if not MYPY: + class RepositoryGroupIamMemberConditionArgsDict(TypedDict): + expression: pulumi.Input[str] + title: pulumi.Input[str] + description: NotRequired[pulumi.Input[str]] +elif False: + RepositoryGroupIamMemberConditionArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RepositoryGroupIamMemberConditionArgs: + def __init__(__self__, *, + expression: pulumi.Input[str], + title: pulumi.Input[str], + description: Optional[pulumi.Input[str]] = None): + pulumi.set(__self__, "expression", expression) + pulumi.set(__self__, "title", title) + if description is not None: + pulumi.set(__self__, "description", description) + + @property + @pulumi.getter + def expression(self) -> pulumi.Input[str]: + return pulumi.get(self, "expression") + + @expression.setter + def expression(self, value: pulumi.Input[str]): + pulumi.set(self, "expression", value) + + @property + @pulumi.getter + def title(self) -> pulumi.Input[str]: + return pulumi.get(self, "title") + + @title.setter + def title(self, value: pulumi.Input[str]): + pulumi.set(self, "title", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + +if not MYPY: + class RepositoryGroupRepositoryArgsDict(TypedDict): + branch_pattern: pulumi.Input[str] + """ + Required. The Git branch pattern used for indexing in RE2 syntax. + See https://github.com/google/re2/wiki/syntax for syntax. + + - - - + """ + resource: pulumi.Input[str] + """ + Required. The DeveloperConnect repository full resource name, relative resource name + or resource URL to be indexed. + """ +elif False: + RepositoryGroupRepositoryArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class RepositoryGroupRepositoryArgs: + def __init__(__self__, *, + branch_pattern: pulumi.Input[str], + resource: pulumi.Input[str]): + """ + :param pulumi.Input[str] branch_pattern: Required. The Git branch pattern used for indexing in RE2 syntax. + See https://github.com/google/re2/wiki/syntax for syntax. + + - - - + :param pulumi.Input[str] resource: Required. The DeveloperConnect repository full resource name, relative resource name + or resource URL to be indexed. + """ + pulumi.set(__self__, "branch_pattern", branch_pattern) + pulumi.set(__self__, "resource", resource) + + @property + @pulumi.getter(name="branchPattern") + def branch_pattern(self) -> pulumi.Input[str]: + """ + Required. The Git branch pattern used for indexing in RE2 syntax. + See https://github.com/google/re2/wiki/syntax for syntax. + + - - - + """ + return pulumi.get(self, "branch_pattern") + + @branch_pattern.setter + def branch_pattern(self, value: pulumi.Input[str]): + pulumi.set(self, "branch_pattern", value) + + @property + @pulumi.getter + def resource(self) -> pulumi.Input[str]: + """ + Required. The DeveloperConnect repository full resource name, relative resource name + or resource URL to be indexed. + """ + return pulumi.get(self, "resource") + + @resource.setter + def resource(self, value: pulumi.Input[str]): + pulumi.set(self, "resource", value) + + diff --git a/sdk/python/pulumi_gcp/gemini/code_repository_index.py b/sdk/python/pulumi_gcp/gemini/code_repository_index.py new file mode 100644 index 0000000000..3b05079037 --- /dev/null +++ b/sdk/python/pulumi_gcp/gemini/code_repository_index.py @@ -0,0 +1,659 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['CodeRepositoryIndexArgs', 'CodeRepositoryIndex'] + +@pulumi.input_type +class CodeRepositoryIndexArgs: + def __init__(__self__, *, + code_repository_index_id: pulumi.Input[str], + location: pulumi.Input[str], + kms_key: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a CodeRepositoryIndex resource. + :param pulumi.Input[str] code_repository_index_id: Required. Id of the Code Repository Index. + + + - - - + :param pulumi.Input[str] location: The location of the Code Repository Index, for example `us-central1`. + :param pulumi.Input[str] kms_key: Optional. Immutable. Customer-managed encryption key name, in the format + projects/*/locations/*/keyRings/*/cryptoKeys/*. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + pulumi.set(__self__, "code_repository_index_id", code_repository_index_id) + pulumi.set(__self__, "location", location) + if kms_key is not None: + pulumi.set(__self__, "kms_key", kms_key) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="codeRepositoryIndexId") + def code_repository_index_id(self) -> pulumi.Input[str]: + """ + Required. Id of the Code Repository Index. + + + - - - + """ + return pulumi.get(self, "code_repository_index_id") + + @code_repository_index_id.setter + def code_repository_index_id(self, value: pulumi.Input[str]): + pulumi.set(self, "code_repository_index_id", value) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The location of the Code Repository Index, for example `us-central1`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="kmsKey") + def kms_key(self) -> Optional[pulumi.Input[str]]: + """ + Optional. Immutable. Customer-managed encryption key name, in the format + projects/*/locations/*/keyRings/*/cryptoKeys/*. + """ + return pulumi.get(self, "kms_key") + + @kms_key.setter + def kms_key(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "kms_key", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _CodeRepositoryIndexState: + def __init__(__self__, *, + code_repository_index_id: Optional[pulumi.Input[str]] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + kms_key: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering CodeRepositoryIndex resources. + :param pulumi.Input[str] code_repository_index_id: Required. Id of the Code Repository Index. + + + - - - + :param pulumi.Input[str] create_time: Output only. Create time stamp. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] kms_key: Optional. Immutable. Customer-managed encryption key name, in the format + projects/*/locations/*/keyRings/*/cryptoKeys/*. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: The location of the Code Repository Index, for example `us-central1`. + :param pulumi.Input[str] name: Immutable. Identifier. Name of Code Repository Index. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] state: Output only. Code Repository Index instance State. + Possible values: + STATE_UNSPECIFIED + CREATING + ACTIVE + DELETING + SUSPENDED + :param pulumi.Input[str] update_time: Output only. Update time stamp. + """ + if code_repository_index_id is not None: + pulumi.set(__self__, "code_repository_index_id", code_repository_index_id) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if kms_key is not None: + pulumi.set(__self__, "kms_key", kms_key) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if state is not None: + pulumi.set(__self__, "state", state) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="codeRepositoryIndexId") + def code_repository_index_id(self) -> Optional[pulumi.Input[str]]: + """ + Required. Id of the Code Repository Index. + + + - - - + """ + return pulumi.get(self, "code_repository_index_id") + + @code_repository_index_id.setter + def code_repository_index_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "code_repository_index_id", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Create time stamp. + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter(name="kmsKey") + def kms_key(self) -> Optional[pulumi.Input[str]]: + """ + Optional. Immutable. Customer-managed encryption key name, in the format + projects/*/locations/*/keyRings/*/cryptoKeys/*. + """ + return pulumi.get(self, "kms_key") + + @kms_key.setter + def kms_key(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "kms_key", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the Code Repository Index, for example `us-central1`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. Identifier. Name of Code Repository Index. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter + def state(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Code Repository Index instance State. + Possible values: + STATE_UNSPECIFIED + CREATING + ACTIVE + DELETING + SUSPENDED + """ + return pulumi.get(self, "state") + + @state.setter + def state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "state", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Update time stamp. + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class CodeRepositoryIndex(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index_id: Optional[pulumi.Input[str]] = None, + kms_key: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Gemini Code Repository Index Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.gemini.CodeRepositoryIndex("example", + location="us-central1", + code_repository_index_id="", + kms_key="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}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] code_repository_index_id: Required. Id of the Code Repository Index. + + + - - - + :param pulumi.Input[str] kms_key: Optional. Immutable. Customer-managed encryption key name, in the format + projects/*/locations/*/keyRings/*/cryptoKeys/*. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: The location of the Code Repository Index, for example `us-central1`. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: CodeRepositoryIndexArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Gemini Code Repository Index Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + example = gcp.gemini.CodeRepositoryIndex("example", + location="us-central1", + code_repository_index_id="", + kms_key="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}} + ``` + + :param str resource_name: The name of the resource. + :param CodeRepositoryIndexArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(CodeRepositoryIndexArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index_id: Optional[pulumi.Input[str]] = None, + kms_key: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = CodeRepositoryIndexArgs.__new__(CodeRepositoryIndexArgs) + + if code_repository_index_id is None and not opts.urn: + raise TypeError("Missing required property 'code_repository_index_id'") + __props__.__dict__["code_repository_index_id"] = code_repository_index_id + __props__.__dict__["kms_key"] = kms_key + __props__.__dict__["labels"] = labels + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + __props__.__dict__["project"] = project + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["name"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["state"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(CodeRepositoryIndex, __self__).__init__( + 'gcp:gemini/codeRepositoryIndex:CodeRepositoryIndex', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index_id: Optional[pulumi.Input[str]] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + kms_key: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'CodeRepositoryIndex': + """ + Get an existing CodeRepositoryIndex resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] code_repository_index_id: Required. Id of the Code Repository Index. + + + - - - + :param pulumi.Input[str] create_time: Output only. Create time stamp. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] kms_key: Optional. Immutable. Customer-managed encryption key name, in the format + projects/*/locations/*/keyRings/*/cryptoKeys/*. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: The location of the Code Repository Index, for example `us-central1`. + :param pulumi.Input[str] name: Immutable. Identifier. Name of Code Repository Index. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[str] state: Output only. Code Repository Index instance State. + Possible values: + STATE_UNSPECIFIED + CREATING + ACTIVE + DELETING + SUSPENDED + :param pulumi.Input[str] update_time: Output only. Update time stamp. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _CodeRepositoryIndexState.__new__(_CodeRepositoryIndexState) + + __props__.__dict__["code_repository_index_id"] = code_repository_index_id + __props__.__dict__["create_time"] = create_time + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["kms_key"] = kms_key + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["state"] = state + __props__.__dict__["update_time"] = update_time + return CodeRepositoryIndex(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="codeRepositoryIndexId") + def code_repository_index_id(self) -> pulumi.Output[str]: + """ + Required. Id of the Code Repository Index. + + + - - - + """ + return pulumi.get(self, "code_repository_index_id") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. Create time stamp. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter(name="kmsKey") + def kms_key(self) -> pulumi.Output[Optional[str]]: + """ + Optional. Immutable. Customer-managed encryption key name, in the format + projects/*/locations/*/keyRings/*/cryptoKeys/*. + """ + return pulumi.get(self, "kms_key") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location of the Code Repository Index, for example `us-central1`. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Immutable. Identifier. Name of Code Repository Index. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter + def state(self) -> pulumi.Output[str]: + """ + Output only. Code Repository Index instance State. + Possible values: + STATE_UNSPECIFIED + CREATING + ACTIVE + DELETING + SUSPENDED + """ + return pulumi.get(self, "state") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. Update time stamp. + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/gemini/get_repository_group_iam_policy.py b/sdk/python/pulumi_gcp/gemini/get_repository_group_iam_policy.py new file mode 100644 index 0000000000..bef81429cc --- /dev/null +++ b/sdk/python/pulumi_gcp/gemini/get_repository_group_iam_policy.py @@ -0,0 +1,171 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = [ + 'GetRepositoryGroupIamPolicyResult', + 'AwaitableGetRepositoryGroupIamPolicyResult', + 'get_repository_group_iam_policy', + 'get_repository_group_iam_policy_output', +] + +@pulumi.output_type +class GetRepositoryGroupIamPolicyResult: + """ + A collection of values returned by getRepositoryGroupIamPolicy. + """ + def __init__(__self__, code_repository_index=None, etag=None, id=None, location=None, policy_data=None, project=None, repository_group_id=None): + if code_repository_index and not isinstance(code_repository_index, str): + raise TypeError("Expected argument 'code_repository_index' to be a str") + pulumi.set(__self__, "code_repository_index", code_repository_index) + if etag and not isinstance(etag, str): + raise TypeError("Expected argument 'etag' to be a str") + pulumi.set(__self__, "etag", etag) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if location and not isinstance(location, str): + raise TypeError("Expected argument 'location' to be a str") + pulumi.set(__self__, "location", location) + if policy_data and not isinstance(policy_data, str): + raise TypeError("Expected argument 'policy_data' to be a str") + pulumi.set(__self__, "policy_data", policy_data) + if project and not isinstance(project, str): + raise TypeError("Expected argument 'project' to be a str") + pulumi.set(__self__, "project", project) + if repository_group_id and not isinstance(repository_group_id, str): + raise TypeError("Expected argument 'repository_group_id' to be a str") + pulumi.set(__self__, "repository_group_id", repository_group_id) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> str: + return pulumi.get(self, "code_repository_index") + + @property + @pulumi.getter + def etag(self) -> str: + """ + (Computed) The etag of the IAM policy. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def location(self) -> str: + return pulumi.get(self, "location") + + @property + @pulumi.getter(name="policyData") + def policy_data(self) -> str: + """ + (Required only by `gemini.RepositoryGroupIamPolicy`) The policy data generated by + a `organizations_get_iam_policy` data source. + """ + return pulumi.get(self, "policy_data") + + @property + @pulumi.getter + def project(self) -> str: + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> str: + return pulumi.get(self, "repository_group_id") + + +class AwaitableGetRepositoryGroupIamPolicyResult(GetRepositoryGroupIamPolicyResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetRepositoryGroupIamPolicyResult( + code_repository_index=self.code_repository_index, + etag=self.etag, + id=self.id, + location=self.location, + policy_data=self.policy_data, + project=self.project, + repository_group_id=self.repository_group_id) + + +def get_repository_group_iam_policy(code_repository_index: Optional[str] = None, + location: Optional[str] = None, + project: Optional[str] = None, + repository_group_id: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetRepositoryGroupIamPolicyResult: + """ + Use this data source to access information about an existing resource. + + :param str location: 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. + :param str project: 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. + """ + __args__ = dict() + __args__['codeRepositoryIndex'] = code_repository_index + __args__['location'] = location + __args__['project'] = project + __args__['repositoryGroupId'] = repository_group_id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy', __args__, opts=opts, typ=GetRepositoryGroupIamPolicyResult).value + + return AwaitableGetRepositoryGroupIamPolicyResult( + code_repository_index=pulumi.get(__ret__, 'code_repository_index'), + etag=pulumi.get(__ret__, 'etag'), + id=pulumi.get(__ret__, 'id'), + location=pulumi.get(__ret__, 'location'), + policy_data=pulumi.get(__ret__, 'policy_data'), + project=pulumi.get(__ret__, 'project'), + repository_group_id=pulumi.get(__ret__, 'repository_group_id')) +def get_repository_group_iam_policy_output(code_repository_index: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[Optional[str]]] = None, + project: Optional[pulumi.Input[Optional[str]]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetRepositoryGroupIamPolicyResult]: + """ + Use this data source to access information about an existing resource. + + :param str location: 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. + :param str project: 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. + """ + __args__ = dict() + __args__['codeRepositoryIndex'] = code_repository_index + __args__['location'] = location + __args__['project'] = project + __args__['repositoryGroupId'] = repository_group_id + opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke_output('gcp:gemini/getRepositoryGroupIamPolicy:getRepositoryGroupIamPolicy', __args__, opts=opts, typ=GetRepositoryGroupIamPolicyResult) + return __ret__.apply(lambda __response__: GetRepositoryGroupIamPolicyResult( + code_repository_index=pulumi.get(__response__, 'code_repository_index'), + etag=pulumi.get(__response__, 'etag'), + id=pulumi.get(__response__, 'id'), + location=pulumi.get(__response__, 'location'), + policy_data=pulumi.get(__response__, 'policy_data'), + project=pulumi.get(__response__, 'project'), + repository_group_id=pulumi.get(__response__, 'repository_group_id'))) diff --git a/sdk/python/pulumi_gcp/gemini/outputs.py b/sdk/python/pulumi_gcp/gemini/outputs.py new file mode 100644 index 0000000000..1cd5533563 --- /dev/null +++ b/sdk/python/pulumi_gcp/gemini/outputs.py @@ -0,0 +1,130 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = [ + 'RepositoryGroupIamBindingCondition', + 'RepositoryGroupIamMemberCondition', + 'RepositoryGroupRepository', +] + +@pulumi.output_type +class RepositoryGroupIamBindingCondition(dict): + def __init__(__self__, *, + expression: str, + title: str, + description: Optional[str] = None): + pulumi.set(__self__, "expression", expression) + pulumi.set(__self__, "title", title) + if description is not None: + pulumi.set(__self__, "description", description) + + @property + @pulumi.getter + def expression(self) -> str: + return pulumi.get(self, "expression") + + @property + @pulumi.getter + def title(self) -> str: + return pulumi.get(self, "title") + + @property + @pulumi.getter + def description(self) -> Optional[str]: + return pulumi.get(self, "description") + + +@pulumi.output_type +class RepositoryGroupIamMemberCondition(dict): + def __init__(__self__, *, + expression: str, + title: str, + description: Optional[str] = None): + pulumi.set(__self__, "expression", expression) + pulumi.set(__self__, "title", title) + if description is not None: + pulumi.set(__self__, "description", description) + + @property + @pulumi.getter + def expression(self) -> str: + return pulumi.get(self, "expression") + + @property + @pulumi.getter + def title(self) -> str: + return pulumi.get(self, "title") + + @property + @pulumi.getter + def description(self) -> Optional[str]: + return pulumi.get(self, "description") + + +@pulumi.output_type +class RepositoryGroupRepository(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "branchPattern": + suggest = "branch_pattern" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in RepositoryGroupRepository. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + RepositoryGroupRepository.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + RepositoryGroupRepository.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + branch_pattern: str, + resource: str): + """ + :param str branch_pattern: Required. The Git branch pattern used for indexing in RE2 syntax. + See https://github.com/google/re2/wiki/syntax for syntax. + + - - - + :param str resource: Required. The DeveloperConnect repository full resource name, relative resource name + or resource URL to be indexed. + """ + pulumi.set(__self__, "branch_pattern", branch_pattern) + pulumi.set(__self__, "resource", resource) + + @property + @pulumi.getter(name="branchPattern") + def branch_pattern(self) -> str: + """ + Required. The Git branch pattern used for indexing in RE2 syntax. + See https://github.com/google/re2/wiki/syntax for syntax. + + - - - + """ + return pulumi.get(self, "branch_pattern") + + @property + @pulumi.getter + def resource(self) -> str: + """ + Required. The DeveloperConnect repository full resource name, relative resource name + or resource URL to be indexed. + """ + return pulumi.get(self, "resource") + + diff --git a/sdk/python/pulumi_gcp/gemini/repository_group.py b/sdk/python/pulumi_gcp/gemini/repository_group.py new file mode 100644 index 0000000000..43152ae7e0 --- /dev/null +++ b/sdk/python/pulumi_gcp/gemini/repository_group.py @@ -0,0 +1,586 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['RepositoryGroupArgs', 'RepositoryGroup'] + +@pulumi.input_type +class RepositoryGroupArgs: + def __init__(__self__, *, + code_repository_index: pulumi.Input[str], + location: pulumi.Input[str], + repositories: pulumi.Input[Sequence[pulumi.Input['RepositoryGroupRepositoryArgs']]], + repository_group_id: pulumi.Input[str], + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a RepositoryGroup resource. + :param pulumi.Input[str] code_repository_index: Required. Id of the Code Repository Index. + :param pulumi.Input[str] location: The location of the Code Repository Index, for example `us-central1`. + :param pulumi.Input[Sequence[pulumi.Input['RepositoryGroupRepositoryArgs']]] repositories: Required. List of repositories to group + Structure is documented below. + :param pulumi.Input[str] repository_group_id: Required. Id of the Repository Group. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + """ + pulumi.set(__self__, "code_repository_index", code_repository_index) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "repositories", repositories) + pulumi.set(__self__, "repository_group_id", repository_group_id) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> pulumi.Input[str]: + """ + Required. Id of the Code Repository Index. + """ + return pulumi.get(self, "code_repository_index") + + @code_repository_index.setter + def code_repository_index(self, value: pulumi.Input[str]): + pulumi.set(self, "code_repository_index", value) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The location of the Code Repository Index, for example `us-central1`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def repositories(self) -> pulumi.Input[Sequence[pulumi.Input['RepositoryGroupRepositoryArgs']]]: + """ + Required. List of repositories to group + Structure is documented below. + """ + return pulumi.get(self, "repositories") + + @repositories.setter + def repositories(self, value: pulumi.Input[Sequence[pulumi.Input['RepositoryGroupRepositoryArgs']]]): + pulumi.set(self, "repositories", value) + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> pulumi.Input[str]: + """ + Required. Id of the Repository Group. + """ + return pulumi.get(self, "repository_group_id") + + @repository_group_id.setter + def repository_group_id(self, value: pulumi.Input[str]): + pulumi.set(self, "repository_group_id", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _RepositoryGroupState: + def __init__(__self__, *, + code_repository_index: Optional[pulumi.Input[str]] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + repositories: Optional[pulumi.Input[Sequence[pulumi.Input['RepositoryGroupRepositoryArgs']]]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering RepositoryGroup resources. + :param pulumi.Input[str] code_repository_index: Required. Id of the Code Repository Index. + :param pulumi.Input[str] create_time: Output only. Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: The location of the Code Repository Index, for example `us-central1`. + :param pulumi.Input[str] name: Immutable. Identifier. name of resource + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[Sequence[pulumi.Input['RepositoryGroupRepositoryArgs']]] repositories: Required. List of repositories to group + Structure is documented below. + :param pulumi.Input[str] repository_group_id: Required. Id of the Repository Group. + :param pulumi.Input[str] update_time: Output only. Update time stamp + """ + if code_repository_index is not None: + pulumi.set(__self__, "code_repository_index", code_repository_index) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if repositories is not None: + pulumi.set(__self__, "repositories", repositories) + if repository_group_id is not None: + pulumi.set(__self__, "repository_group_id", repository_group_id) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> Optional[pulumi.Input[str]]: + """ + Required. Id of the Code Repository Index. + """ + return pulumi.get(self, "code_repository_index") + + @code_repository_index.setter + def code_repository_index(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "code_repository_index", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Create time stamp + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the Code Repository Index, for example `us-central1`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. Identifier. name of resource + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter + def repositories(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['RepositoryGroupRepositoryArgs']]]]: + """ + Required. List of repositories to group + Structure is documented below. + """ + return pulumi.get(self, "repositories") + + @repositories.setter + def repositories(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['RepositoryGroupRepositoryArgs']]]]): + pulumi.set(self, "repositories", value) + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> Optional[pulumi.Input[str]]: + """ + Required. Id of the Repository Group. + """ + return pulumi.get(self, "repository_group_id") + + @repository_group_id.setter + def repository_group_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "repository_group_id", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Update time stamp + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class RepositoryGroup(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repositories: Optional[pulumi.Input[Sequence[pulumi.Input[Union['RepositoryGroupRepositoryArgs', 'RepositoryGroupRepositoryArgsDict']]]]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## 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}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] code_repository_index: Required. Id of the Code Repository Index. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: The location of the Code Repository Index, for example `us-central1`. + :param pulumi.Input[Sequence[pulumi.Input[Union['RepositoryGroupRepositoryArgs', 'RepositoryGroupRepositoryArgsDict']]]] repositories: Required. List of repositories to group + Structure is documented below. + :param pulumi.Input[str] repository_group_id: Required. Id of the Repository Group. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RepositoryGroupArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## 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}} + ``` + + :param str resource_name: The name of the resource. + :param RepositoryGroupArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(RepositoryGroupArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repositories: Optional[pulumi.Input[Sequence[pulumi.Input[Union['RepositoryGroupRepositoryArgs', 'RepositoryGroupRepositoryArgsDict']]]]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = RepositoryGroupArgs.__new__(RepositoryGroupArgs) + + if code_repository_index is None and not opts.urn: + raise TypeError("Missing required property 'code_repository_index'") + __props__.__dict__["code_repository_index"] = code_repository_index + __props__.__dict__["labels"] = labels + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + __props__.__dict__["project"] = project + if repositories is None and not opts.urn: + raise TypeError("Missing required property 'repositories'") + __props__.__dict__["repositories"] = repositories + if repository_group_id is None and not opts.urn: + raise TypeError("Missing required property 'repository_group_id'") + __props__.__dict__["repository_group_id"] = repository_group_id + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["name"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(RepositoryGroup, __self__).__init__( + 'gcp:gemini/repositoryGroup:RepositoryGroup', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + repositories: Optional[pulumi.Input[Sequence[pulumi.Input[Union['RepositoryGroupRepositoryArgs', 'RepositoryGroupRepositoryArgsDict']]]]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'RepositoryGroup': + """ + Get an existing RepositoryGroup resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] code_repository_index: Required. Id of the Code Repository Index. + :param pulumi.Input[str] create_time: Output only. Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: The location of the Code Repository Index, for example `us-central1`. + :param pulumi.Input[str] name: Immutable. Identifier. name of resource + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[Sequence[pulumi.Input[Union['RepositoryGroupRepositoryArgs', 'RepositoryGroupRepositoryArgsDict']]]] repositories: Required. List of repositories to group + Structure is documented below. + :param pulumi.Input[str] repository_group_id: Required. Id of the Repository Group. + :param pulumi.Input[str] update_time: Output only. Update time stamp + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RepositoryGroupState.__new__(_RepositoryGroupState) + + __props__.__dict__["code_repository_index"] = code_repository_index + __props__.__dict__["create_time"] = create_time + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["repositories"] = repositories + __props__.__dict__["repository_group_id"] = repository_group_id + __props__.__dict__["update_time"] = update_time + return RepositoryGroup(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> pulumi.Output[str]: + """ + Required. Id of the Code Repository Index. + """ + return pulumi.get(self, "code_repository_index") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. Create time stamp + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location of the Code Repository Index, for example `us-central1`. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Immutable. Identifier. name of resource + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter + def repositories(self) -> pulumi.Output[Sequence['outputs.RepositoryGroupRepository']]: + """ + Required. List of repositories to group + Structure is documented below. + """ + return pulumi.get(self, "repositories") + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> pulumi.Output[str]: + """ + Required. Id of the Repository Group. + """ + return pulumi.get(self, "repository_group_id") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. Update time stamp + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/gemini/repository_group_iam_binding.py b/sdk/python/pulumi_gcp/gemini/repository_group_iam_binding.py new file mode 100644 index 0000000000..e389b0bfa8 --- /dev/null +++ b/sdk/python/pulumi_gcp/gemini/repository_group_iam_binding.py @@ -0,0 +1,604 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['RepositoryGroupIamBindingArgs', 'RepositoryGroupIamBinding'] + +@pulumi.input_type +class RepositoryGroupIamBindingArgs: + def __init__(__self__, *, + code_repository_index: pulumi.Input[str], + members: pulumi.Input[Sequence[pulumi.Input[str]]], + repository_group_id: pulumi.Input[str], + role: pulumi.Input[str], + condition: Optional[pulumi.Input['RepositoryGroupIamBindingConditionArgs']] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a RepositoryGroupIamBinding resource. + :param pulumi.Input[Sequence[pulumi.Input[str]]] 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" + :param pulumi.Input[str] role: The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[str] project: 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. + """ + pulumi.set(__self__, "code_repository_index", code_repository_index) + pulumi.set(__self__, "members", members) + pulumi.set(__self__, "repository_group_id", repository_group_id) + pulumi.set(__self__, "role", role) + if condition is not None: + pulumi.set(__self__, "condition", condition) + if location is not None: + pulumi.set(__self__, "location", location) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> pulumi.Input[str]: + return pulumi.get(self, "code_repository_index") + + @code_repository_index.setter + def code_repository_index(self, value: pulumi.Input[str]): + pulumi.set(self, "code_repository_index", value) + + @property + @pulumi.getter + def members(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]: + """ + 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" + """ + return pulumi.get(self, "members") + + @members.setter + def members(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): + pulumi.set(self, "members", value) + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> pulumi.Input[str]: + return pulumi.get(self, "repository_group_id") + + @repository_group_id.setter + def repository_group_id(self, value: pulumi.Input[str]): + pulumi.set(self, "repository_group_id", value) + + @property + @pulumi.getter + def role(self) -> pulumi.Input[str]: + """ + The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + return pulumi.get(self, "role") + + @role.setter + def role(self, value: pulumi.Input[str]): + pulumi.set(self, "role", value) + + @property + @pulumi.getter + def condition(self) -> Optional[pulumi.Input['RepositoryGroupIamBindingConditionArgs']]: + return pulumi.get(self, "condition") + + @condition.setter + def condition(self, value: Optional[pulumi.Input['RepositoryGroupIamBindingConditionArgs']]): + pulumi.set(self, "condition", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _RepositoryGroupIamBindingState: + def __init__(__self__, *, + code_repository_index: Optional[pulumi.Input[str]] = None, + condition: Optional[pulumi.Input['RepositoryGroupIamBindingConditionArgs']] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + members: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering RepositoryGroupIamBinding resources. + :param pulumi.Input[str] etag: (Computed) The etag of the IAM policy. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[Sequence[pulumi.Input[str]]] 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" + :param pulumi.Input[str] project: 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. + :param pulumi.Input[str] role: The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + if code_repository_index is not None: + pulumi.set(__self__, "code_repository_index", code_repository_index) + if condition is not None: + pulumi.set(__self__, "condition", condition) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if location is not None: + pulumi.set(__self__, "location", location) + if members is not None: + pulumi.set(__self__, "members", members) + if project is not None: + pulumi.set(__self__, "project", project) + if repository_group_id is not None: + pulumi.set(__self__, "repository_group_id", repository_group_id) + if role is not None: + pulumi.set(__self__, "role", role) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "code_repository_index") + + @code_repository_index.setter + def code_repository_index(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "code_repository_index", value) + + @property + @pulumi.getter + def condition(self) -> Optional[pulumi.Input['RepositoryGroupIamBindingConditionArgs']]: + return pulumi.get(self, "condition") + + @condition.setter + def condition(self, value: Optional[pulumi.Input['RepositoryGroupIamBindingConditionArgs']]): + pulumi.set(self, "condition", value) + + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + (Computed) The etag of the IAM policy. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def members(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + 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" + """ + return pulumi.get(self, "members") + + @members.setter + def members(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "members", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "repository_group_id") + + @repository_group_id.setter + def repository_group_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "repository_group_id", value) + + @property + @pulumi.getter + def role(self) -> Optional[pulumi.Input[str]]: + """ + The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + return pulumi.get(self, "role") + + @role.setter + def role(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "role", value) + + +class RepositoryGroupIamBinding(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + condition: Optional[pulumi.Input[Union['RepositoryGroupIamBindingConditionArgs', 'RepositoryGroupIamBindingConditionArgsDict']]] = None, + location: Optional[pulumi.Input[str]] = None, + members: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## 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`. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[Sequence[pulumi.Input[str]]] 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" + :param pulumi.Input[str] project: 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. + :param pulumi.Input[str] role: The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RepositoryGroupIamBindingArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## 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`. + + :param str resource_name: The name of the resource. + :param RepositoryGroupIamBindingArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(RepositoryGroupIamBindingArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + condition: Optional[pulumi.Input[Union['RepositoryGroupIamBindingConditionArgs', 'RepositoryGroupIamBindingConditionArgsDict']]] = None, + location: Optional[pulumi.Input[str]] = None, + members: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = RepositoryGroupIamBindingArgs.__new__(RepositoryGroupIamBindingArgs) + + if code_repository_index is None and not opts.urn: + raise TypeError("Missing required property 'code_repository_index'") + __props__.__dict__["code_repository_index"] = code_repository_index + __props__.__dict__["condition"] = condition + __props__.__dict__["location"] = location + if members is None and not opts.urn: + raise TypeError("Missing required property 'members'") + __props__.__dict__["members"] = members + __props__.__dict__["project"] = project + if repository_group_id is None and not opts.urn: + raise TypeError("Missing required property 'repository_group_id'") + __props__.__dict__["repository_group_id"] = repository_group_id + if role is None and not opts.urn: + raise TypeError("Missing required property 'role'") + __props__.__dict__["role"] = role + __props__.__dict__["etag"] = None + super(RepositoryGroupIamBinding, __self__).__init__( + 'gcp:gemini/repositoryGroupIamBinding:RepositoryGroupIamBinding', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + condition: Optional[pulumi.Input[Union['RepositoryGroupIamBindingConditionArgs', 'RepositoryGroupIamBindingConditionArgsDict']]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + members: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None) -> 'RepositoryGroupIamBinding': + """ + Get an existing RepositoryGroupIamBinding resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] etag: (Computed) The etag of the IAM policy. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[Sequence[pulumi.Input[str]]] 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" + :param pulumi.Input[str] project: 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. + :param pulumi.Input[str] role: The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RepositoryGroupIamBindingState.__new__(_RepositoryGroupIamBindingState) + + __props__.__dict__["code_repository_index"] = code_repository_index + __props__.__dict__["condition"] = condition + __props__.__dict__["etag"] = etag + __props__.__dict__["location"] = location + __props__.__dict__["members"] = members + __props__.__dict__["project"] = project + __props__.__dict__["repository_group_id"] = repository_group_id + __props__.__dict__["role"] = role + return RepositoryGroupIamBinding(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> pulumi.Output[str]: + return pulumi.get(self, "code_repository_index") + + @property + @pulumi.getter + def condition(self) -> pulumi.Output[Optional['outputs.RepositoryGroupIamBindingCondition']]: + return pulumi.get(self, "condition") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + (Computed) The etag of the IAM policy. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + 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. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def members(self) -> pulumi.Output[Sequence[str]]: + """ + 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" + """ + return pulumi.get(self, "members") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + 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. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> pulumi.Output[str]: + return pulumi.get(self, "repository_group_id") + + @property + @pulumi.getter + def role(self) -> pulumi.Output[str]: + """ + The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + return pulumi.get(self, "role") + diff --git a/sdk/python/pulumi_gcp/gemini/repository_group_iam_member.py b/sdk/python/pulumi_gcp/gemini/repository_group_iam_member.py new file mode 100644 index 0000000000..50a1a2153a --- /dev/null +++ b/sdk/python/pulumi_gcp/gemini/repository_group_iam_member.py @@ -0,0 +1,604 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['RepositoryGroupIamMemberArgs', 'RepositoryGroupIamMember'] + +@pulumi.input_type +class RepositoryGroupIamMemberArgs: + def __init__(__self__, *, + code_repository_index: pulumi.Input[str], + member: pulumi.Input[str], + repository_group_id: pulumi.Input[str], + role: pulumi.Input[str], + condition: Optional[pulumi.Input['RepositoryGroupIamMemberConditionArgs']] = None, + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a RepositoryGroupIamMember resource. + :param pulumi.Input[str] member: 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" + :param pulumi.Input[str] role: The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[str] project: 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. + """ + pulumi.set(__self__, "code_repository_index", code_repository_index) + pulumi.set(__self__, "member", member) + pulumi.set(__self__, "repository_group_id", repository_group_id) + pulumi.set(__self__, "role", role) + if condition is not None: + pulumi.set(__self__, "condition", condition) + if location is not None: + pulumi.set(__self__, "location", location) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> pulumi.Input[str]: + return pulumi.get(self, "code_repository_index") + + @code_repository_index.setter + def code_repository_index(self, value: pulumi.Input[str]): + pulumi.set(self, "code_repository_index", value) + + @property + @pulumi.getter + def member(self) -> pulumi.Input[str]: + """ + 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" + """ + return pulumi.get(self, "member") + + @member.setter + def member(self, value: pulumi.Input[str]): + pulumi.set(self, "member", value) + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> pulumi.Input[str]: + return pulumi.get(self, "repository_group_id") + + @repository_group_id.setter + def repository_group_id(self, value: pulumi.Input[str]): + pulumi.set(self, "repository_group_id", value) + + @property + @pulumi.getter + def role(self) -> pulumi.Input[str]: + """ + The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + return pulumi.get(self, "role") + + @role.setter + def role(self, value: pulumi.Input[str]): + pulumi.set(self, "role", value) + + @property + @pulumi.getter + def condition(self) -> Optional[pulumi.Input['RepositoryGroupIamMemberConditionArgs']]: + return pulumi.get(self, "condition") + + @condition.setter + def condition(self, value: Optional[pulumi.Input['RepositoryGroupIamMemberConditionArgs']]): + pulumi.set(self, "condition", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _RepositoryGroupIamMemberState: + def __init__(__self__, *, + code_repository_index: Optional[pulumi.Input[str]] = None, + condition: Optional[pulumi.Input['RepositoryGroupIamMemberConditionArgs']] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + member: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering RepositoryGroupIamMember resources. + :param pulumi.Input[str] etag: (Computed) The etag of the IAM policy. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[str] member: 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" + :param pulumi.Input[str] project: 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. + :param pulumi.Input[str] role: The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + if code_repository_index is not None: + pulumi.set(__self__, "code_repository_index", code_repository_index) + if condition is not None: + pulumi.set(__self__, "condition", condition) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if location is not None: + pulumi.set(__self__, "location", location) + if member is not None: + pulumi.set(__self__, "member", member) + if project is not None: + pulumi.set(__self__, "project", project) + if repository_group_id is not None: + pulumi.set(__self__, "repository_group_id", repository_group_id) + if role is not None: + pulumi.set(__self__, "role", role) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "code_repository_index") + + @code_repository_index.setter + def code_repository_index(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "code_repository_index", value) + + @property + @pulumi.getter + def condition(self) -> Optional[pulumi.Input['RepositoryGroupIamMemberConditionArgs']]: + return pulumi.get(self, "condition") + + @condition.setter + def condition(self, value: Optional[pulumi.Input['RepositoryGroupIamMemberConditionArgs']]): + pulumi.set(self, "condition", value) + + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + (Computed) The etag of the IAM policy. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def member(self) -> Optional[pulumi.Input[str]]: + """ + 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" + """ + return pulumi.get(self, "member") + + @member.setter + def member(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "member", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "repository_group_id") + + @repository_group_id.setter + def repository_group_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "repository_group_id", value) + + @property + @pulumi.getter + def role(self) -> Optional[pulumi.Input[str]]: + """ + The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + return pulumi.get(self, "role") + + @role.setter + def role(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "role", value) + + +class RepositoryGroupIamMember(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + condition: Optional[pulumi.Input[Union['RepositoryGroupIamMemberConditionArgs', 'RepositoryGroupIamMemberConditionArgsDict']]] = None, + location: Optional[pulumi.Input[str]] = None, + member: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## 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`. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[str] member: 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" + :param pulumi.Input[str] project: 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. + :param pulumi.Input[str] role: The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RepositoryGroupIamMemberArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## 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`. + + :param str resource_name: The name of the resource. + :param RepositoryGroupIamMemberArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(RepositoryGroupIamMemberArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + condition: Optional[pulumi.Input[Union['RepositoryGroupIamMemberConditionArgs', 'RepositoryGroupIamMemberConditionArgsDict']]] = None, + location: Optional[pulumi.Input[str]] = None, + member: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = RepositoryGroupIamMemberArgs.__new__(RepositoryGroupIamMemberArgs) + + if code_repository_index is None and not opts.urn: + raise TypeError("Missing required property 'code_repository_index'") + __props__.__dict__["code_repository_index"] = code_repository_index + __props__.__dict__["condition"] = condition + __props__.__dict__["location"] = location + if member is None and not opts.urn: + raise TypeError("Missing required property 'member'") + __props__.__dict__["member"] = member + __props__.__dict__["project"] = project + if repository_group_id is None and not opts.urn: + raise TypeError("Missing required property 'repository_group_id'") + __props__.__dict__["repository_group_id"] = repository_group_id + if role is None and not opts.urn: + raise TypeError("Missing required property 'role'") + __props__.__dict__["role"] = role + __props__.__dict__["etag"] = None + super(RepositoryGroupIamMember, __self__).__init__( + 'gcp:gemini/repositoryGroupIamMember:RepositoryGroupIamMember', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + condition: Optional[pulumi.Input[Union['RepositoryGroupIamMemberConditionArgs', 'RepositoryGroupIamMemberConditionArgsDict']]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + member: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None) -> 'RepositoryGroupIamMember': + """ + Get an existing RepositoryGroupIamMember resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] etag: (Computed) The etag of the IAM policy. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[str] member: 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" + :param pulumi.Input[str] project: 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. + :param pulumi.Input[str] role: The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RepositoryGroupIamMemberState.__new__(_RepositoryGroupIamMemberState) + + __props__.__dict__["code_repository_index"] = code_repository_index + __props__.__dict__["condition"] = condition + __props__.__dict__["etag"] = etag + __props__.__dict__["location"] = location + __props__.__dict__["member"] = member + __props__.__dict__["project"] = project + __props__.__dict__["repository_group_id"] = repository_group_id + __props__.__dict__["role"] = role + return RepositoryGroupIamMember(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> pulumi.Output[str]: + return pulumi.get(self, "code_repository_index") + + @property + @pulumi.getter + def condition(self) -> pulumi.Output[Optional['outputs.RepositoryGroupIamMemberCondition']]: + return pulumi.get(self, "condition") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + (Computed) The etag of the IAM policy. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + 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. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def member(self) -> pulumi.Output[str]: + """ + 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" + """ + return pulumi.get(self, "member") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + 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. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> pulumi.Output[str]: + return pulumi.get(self, "repository_group_id") + + @property + @pulumi.getter + def role(self) -> pulumi.Output[str]: + """ + The role that should be applied. Only one + `gemini.RepositoryGroupIamBinding` can be used per role. Note that custom roles must be of the format + `[projects|organizations]/{parent-name}/roles/{role-name}`. + """ + return pulumi.get(self, "role") + diff --git a/sdk/python/pulumi_gcp/gemini/repository_group_iam_policy.py b/sdk/python/pulumi_gcp/gemini/repository_group_iam_policy.py new file mode 100644 index 0000000000..6bcee48468 --- /dev/null +++ b/sdk/python/pulumi_gcp/gemini/repository_group_iam_policy.py @@ -0,0 +1,443 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['RepositoryGroupIamPolicyArgs', 'RepositoryGroupIamPolicy'] + +@pulumi.input_type +class RepositoryGroupIamPolicyArgs: + def __init__(__self__, *, + code_repository_index: pulumi.Input[str], + policy_data: pulumi.Input[str], + repository_group_id: pulumi.Input[str], + location: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a RepositoryGroupIamPolicy resource. + :param pulumi.Input[str] policy_data: The policy data generated by + a `organizations_get_iam_policy` data source. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[str] project: 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. + """ + pulumi.set(__self__, "code_repository_index", code_repository_index) + pulumi.set(__self__, "policy_data", policy_data) + pulumi.set(__self__, "repository_group_id", repository_group_id) + if location is not None: + pulumi.set(__self__, "location", location) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> pulumi.Input[str]: + return pulumi.get(self, "code_repository_index") + + @code_repository_index.setter + def code_repository_index(self, value: pulumi.Input[str]): + pulumi.set(self, "code_repository_index", value) + + @property + @pulumi.getter(name="policyData") + def policy_data(self) -> pulumi.Input[str]: + """ + The policy data generated by + a `organizations_get_iam_policy` data source. + """ + return pulumi.get(self, "policy_data") + + @policy_data.setter + def policy_data(self, value: pulumi.Input[str]): + pulumi.set(self, "policy_data", value) + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> pulumi.Input[str]: + return pulumi.get(self, "repository_group_id") + + @repository_group_id.setter + def repository_group_id(self, value: pulumi.Input[str]): + pulumi.set(self, "repository_group_id", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _RepositoryGroupIamPolicyState: + def __init__(__self__, *, + code_repository_index: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + policy_data: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering RepositoryGroupIamPolicy resources. + :param pulumi.Input[str] etag: (Computed) The etag of the IAM policy. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[str] policy_data: The policy data generated by + a `organizations_get_iam_policy` data source. + :param pulumi.Input[str] project: 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. + """ + if code_repository_index is not None: + pulumi.set(__self__, "code_repository_index", code_repository_index) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if location is not None: + pulumi.set(__self__, "location", location) + if policy_data is not None: + pulumi.set(__self__, "policy_data", policy_data) + if project is not None: + pulumi.set(__self__, "project", project) + if repository_group_id is not None: + pulumi.set(__self__, "repository_group_id", repository_group_id) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "code_repository_index") + + @code_repository_index.setter + def code_repository_index(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "code_repository_index", value) + + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + (Computed) The etag of the IAM policy. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="policyData") + def policy_data(self) -> Optional[pulumi.Input[str]]: + """ + The policy data generated by + a `organizations_get_iam_policy` data source. + """ + return pulumi.get(self, "policy_data") + + @policy_data.setter + def policy_data(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "policy_data", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "repository_group_id") + + @repository_group_id.setter + def repository_group_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "repository_group_id", value) + + +class RepositoryGroupIamPolicy(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + policy_data: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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`. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[str] policy_data: The policy data generated by + a `organizations_get_iam_policy` data source. + :param pulumi.Input[str] project: 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. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RepositoryGroupIamPolicyArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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/repositoryGroupIamPolicy:RepositoryGroupIamPolicy 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`. + + :param str resource_name: The name of the resource. + :param RepositoryGroupIamPolicyArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(RepositoryGroupIamPolicyArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + policy_data: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = RepositoryGroupIamPolicyArgs.__new__(RepositoryGroupIamPolicyArgs) + + if code_repository_index is None and not opts.urn: + raise TypeError("Missing required property 'code_repository_index'") + __props__.__dict__["code_repository_index"] = code_repository_index + __props__.__dict__["location"] = location + if policy_data is None and not opts.urn: + raise TypeError("Missing required property 'policy_data'") + __props__.__dict__["policy_data"] = policy_data + __props__.__dict__["project"] = project + if repository_group_id is None and not opts.urn: + raise TypeError("Missing required property 'repository_group_id'") + __props__.__dict__["repository_group_id"] = repository_group_id + __props__.__dict__["etag"] = None + super(RepositoryGroupIamPolicy, __self__).__init__( + 'gcp:gemini/repositoryGroupIamPolicy:RepositoryGroupIamPolicy', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + code_repository_index: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + policy_data: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + repository_group_id: Optional[pulumi.Input[str]] = None) -> 'RepositoryGroupIamPolicy': + """ + Get an existing RepositoryGroupIamPolicy resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] etag: (Computed) The etag of the IAM policy. + :param pulumi.Input[str] location: 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. + :param pulumi.Input[str] policy_data: The policy data generated by + a `organizations_get_iam_policy` data source. + :param pulumi.Input[str] project: 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. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RepositoryGroupIamPolicyState.__new__(_RepositoryGroupIamPolicyState) + + __props__.__dict__["code_repository_index"] = code_repository_index + __props__.__dict__["etag"] = etag + __props__.__dict__["location"] = location + __props__.__dict__["policy_data"] = policy_data + __props__.__dict__["project"] = project + __props__.__dict__["repository_group_id"] = repository_group_id + return RepositoryGroupIamPolicy(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="codeRepositoryIndex") + def code_repository_index(self) -> pulumi.Output[str]: + return pulumi.get(self, "code_repository_index") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + (Computed) The etag of the IAM policy. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + 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. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter(name="policyData") + def policy_data(self) -> pulumi.Output[str]: + """ + The policy data generated by + a `organizations_get_iam_policy` data source. + """ + return pulumi.get(self, "policy_data") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + 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. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="repositoryGroupId") + def repository_group_id(self) -> pulumi.Output[str]: + return pulumi.get(self, "repository_group_id") + diff --git a/sdk/python/pulumi_gcp/gkehub/_inputs.py b/sdk/python/pulumi_gcp/gkehub/_inputs.py index 02a18fc790..725ee909cc 100644 --- a/sdk/python/pulumi_gcp/gkehub/_inputs.py +++ b/sdk/python/pulumi_gcp/gkehub/_inputs.py @@ -1589,7 +1589,7 @@ class FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPo installation: NotRequired[pulumi.Input[str]] """ Configures the manner in which the template library is installed on the cluster. - Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. """ elif False: FeatureFleetDefaultMemberConfigPolicycontrollerPolicyControllerHubConfigPolicyContentTemplateLibraryArgsDict: TypeAlias = Mapping[str, Any] @@ -1600,7 +1600,7 @@ def __init__(__self__, *, installation: Optional[pulumi.Input[str]] = None): """ :param pulumi.Input[str] installation: Configures the manner in which the template library is installed on the cluster. - Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. """ if installation is not None: pulumi.set(__self__, "installation", installation) @@ -1610,7 +1610,7 @@ def __init__(__self__, *, def installation(self) -> Optional[pulumi.Input[str]]: """ Configures the manner in which the template library is installed on the cluster. - Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. """ return pulumi.get(self, "installation") @@ -1913,7 +1913,7 @@ class FeatureMembershipConfigmanagementConfigSyncArgsDict(TypedDict): """ metrics_gcp_service_account_email: NotRequired[pulumi.Input[str]] """ - 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. + 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. """ oci: NotRequired[pulumi.Input['FeatureMembershipConfigmanagementConfigSyncOciArgsDict']] """ @@ -1923,12 +1923,16 @@ class FeatureMembershipConfigmanagementConfigSyncArgsDict(TypedDict): """ prevent_drift: NotRequired[pulumi.Input[bool]] """ - 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. + 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. """ source_format: NotRequired[pulumi.Input[str]] """ Specifies whether the Config Sync Repo is in "hierarchical" or "unstructured" mode. """ + stop_syncing: NotRequired[pulumi.Input[bool]] + """ + 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`. + """ elif False: FeatureMembershipConfigmanagementConfigSyncArgsDict: TypeAlias = Mapping[str, Any] @@ -1940,16 +1944,18 @@ def __init__(__self__, *, metrics_gcp_service_account_email: Optional[pulumi.Input[str]] = None, oci: Optional[pulumi.Input['FeatureMembershipConfigmanagementConfigSyncOciArgs']] = None, prevent_drift: Optional[pulumi.Input[bool]] = None, - source_format: Optional[pulumi.Input[str]] = None): + source_format: Optional[pulumi.Input[str]] = None, + stop_syncing: Optional[pulumi.Input[bool]] = None): """ :param pulumi.Input[bool] enabled: Enables the installation of ConfigSync. If set to true, ConfigSync resources will be created and the other ConfigSync fields will be applied if exist. If set to false, all other ConfigSync fields will be ignored, ConfigSync resources will be deleted. If omitted, ConfigSync resources will be managed depends on the presence of the git or oci field. :param pulumi.Input['FeatureMembershipConfigmanagementConfigSyncGitArgs'] git: (Optional) Structure is documented below. - :param pulumi.Input[str] metrics_gcp_service_account_email: 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. + :param pulumi.Input[str] metrics_gcp_service_account_email: 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. :param pulumi.Input['FeatureMembershipConfigmanagementConfigSyncOciArgs'] oci: (Optional) Supported from Config Sync versions 1.12.0 onwards. Structure is documented below. Use either `git` or `oci` config option. - :param pulumi.Input[bool] prevent_drift: 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. + :param pulumi.Input[bool] prevent_drift: 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. :param pulumi.Input[str] source_format: Specifies whether the Config Sync Repo is in "hierarchical" or "unstructured" mode. + :param pulumi.Input[bool] stop_syncing: 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`. """ if enabled is not None: pulumi.set(__self__, "enabled", enabled) @@ -1963,6 +1969,8 @@ def __init__(__self__, *, pulumi.set(__self__, "prevent_drift", prevent_drift) if source_format is not None: pulumi.set(__self__, "source_format", source_format) + if stop_syncing is not None: + pulumi.set(__self__, "stop_syncing", stop_syncing) @property @pulumi.getter @@ -1992,7 +2000,7 @@ def git(self, value: Optional[pulumi.Input['FeatureMembershipConfigmanagementCon @pulumi.getter(name="metricsGcpServiceAccountEmail") def metrics_gcp_service_account_email(self) -> Optional[pulumi.Input[str]]: """ - 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. + 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. """ return pulumi.get(self, "metrics_gcp_service_account_email") @@ -2018,7 +2026,7 @@ def oci(self, value: Optional[pulumi.Input['FeatureMembershipConfigmanagementCon @pulumi.getter(name="preventDrift") def prevent_drift(self) -> Optional[pulumi.Input[bool]]: """ - 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. + 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. """ return pulumi.get(self, "prevent_drift") @@ -2038,6 +2046,18 @@ def source_format(self) -> Optional[pulumi.Input[str]]: def source_format(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "source_format", value) + @property + @pulumi.getter(name="stopSyncing") + def stop_syncing(self) -> Optional[pulumi.Input[bool]]: + """ + 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`. + """ + return pulumi.get(self, "stop_syncing") + + @stop_syncing.setter + def stop_syncing(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "stop_syncing", value) + if not MYPY: class FeatureMembershipConfigmanagementConfigSyncGitArgsDict(TypedDict): diff --git a/sdk/python/pulumi_gcp/gkehub/membership_binding.py b/sdk/python/pulumi_gcp/gkehub/membership_binding.py index f7a32a82db..7136216709 100644 --- a/sdk/python/pulumi_gcp/gkehub/membership_binding.py +++ b/sdk/python/pulumi_gcp/gkehub/membership_binding.py @@ -423,16 +423,16 @@ def __init__(__self__, network="default", subnetwork="default") membership = gcp.gkehub.Membership("membership", - membership_id="tf-test-membership_9106", + membership_id="tf-test-membership_27169", endpoint={ "gke_cluster": { "resource_link": primary.id.apply(lambda id: f"//container.googleapis.com/{id}"), }, }, opts = pulumi.ResourceOptions(depends_on=[primary])) - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_27169") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_75223") membership_binding = gcp.gkehub.MembershipBinding("membership_binding", - membership_binding_id="tf-test-membership-binding_75223", + membership_binding_id="tf-test-membership-binding_41819", scope=scope.name, membership_id=membership.membership_id, location="global", @@ -519,16 +519,16 @@ def __init__(__self__, network="default", subnetwork="default") membership = gcp.gkehub.Membership("membership", - membership_id="tf-test-membership_9106", + membership_id="tf-test-membership_27169", endpoint={ "gke_cluster": { "resource_link": primary.id.apply(lambda id: f"//container.googleapis.com/{id}"), }, }, opts = pulumi.ResourceOptions(depends_on=[primary])) - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_27169") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_75223") membership_binding = gcp.gkehub.MembershipBinding("membership_binding", - membership_binding_id="tf-test-membership-binding_75223", + membership_binding_id="tf-test-membership-binding_41819", scope=scope.name, membership_id=membership.membership_id, location="global", diff --git a/sdk/python/pulumi_gcp/gkehub/membership_rbac_role_binding.py b/sdk/python/pulumi_gcp/gkehub/membership_rbac_role_binding.py index f6e57274c5..8628466df3 100644 --- a/sdk/python/pulumi_gcp/gkehub/membership_rbac_role_binding.py +++ b/sdk/python/pulumi_gcp/gkehub/membership_rbac_role_binding.py @@ -356,7 +356,7 @@ def __init__(__self__, network="default", subnetwork="default") membership = gcp.gkehub.Membership("membership", - membership_id="tf-test-membership_41819", + membership_id="tf-test-membership_75092", endpoint={ "gke_cluster": { "resource_link": primary.id.apply(lambda id: f"//container.googleapis.com/{id}"), @@ -365,7 +365,7 @@ def __init__(__self__, opts = pulumi.ResourceOptions(depends_on=[primary])) project = gcp.organizations.get_project() membership_rbac_role_binding = gcp.gkehub.MembershipRbacRoleBinding("membership_rbac_role_binding", - membership_rbac_role_binding_id="tf-test-membership-rbac-role-binding_75092", + membership_rbac_role_binding_id="tf-test-membership-rbac-role-binding_2605", membership_id=membership.membership_id, user=f"service-{project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com", role={ @@ -434,7 +434,7 @@ def __init__(__self__, network="default", subnetwork="default") membership = gcp.gkehub.Membership("membership", - membership_id="tf-test-membership_41819", + membership_id="tf-test-membership_75092", endpoint={ "gke_cluster": { "resource_link": primary.id.apply(lambda id: f"//container.googleapis.com/{id}"), @@ -443,7 +443,7 @@ def __init__(__self__, opts = pulumi.ResourceOptions(depends_on=[primary])) project = gcp.organizations.get_project() membership_rbac_role_binding = gcp.gkehub.MembershipRbacRoleBinding("membership_rbac_role_binding", - membership_rbac_role_binding_id="tf-test-membership-rbac-role-binding_75092", + membership_rbac_role_binding_id="tf-test-membership-rbac-role-binding_2605", membership_id=membership.membership_id, user=f"service-{project.number}@gcp-sa-anthossupport.iam.gserviceaccount.com", role={ diff --git a/sdk/python/pulumi_gcp/gkehub/namespace.py b/sdk/python/pulumi_gcp/gkehub/namespace.py index fe1c0ddf0b..ced0db52e9 100644 --- a/sdk/python/pulumi_gcp/gkehub/namespace.py +++ b/sdk/python/pulumi_gcp/gkehub/namespace.py @@ -428,9 +428,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_2605") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_34535") namespace = gcp.gkehub.Namespace("namespace", - scope_namespace_id="tf-test-namespace_34535", + scope_namespace_id="tf-test-namespace_22375", scope_id=scope.scope_id, scope=scope.name, namespace_labels={ @@ -513,9 +513,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_2605") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_34535") namespace = gcp.gkehub.Namespace("namespace", - scope_namespace_id="tf-test-namespace_34535", + scope_namespace_id="tf-test-namespace_22375", scope_id=scope.scope_id, scope=scope.name, namespace_labels={ diff --git a/sdk/python/pulumi_gcp/gkehub/outputs.py b/sdk/python/pulumi_gcp/gkehub/outputs.py index 075dc474da..26beaa5956 100644 --- a/sdk/python/pulumi_gcp/gkehub/outputs.py +++ b/sdk/python/pulumi_gcp/gkehub/outputs.py @@ -1146,7 +1146,7 @@ def __init__(__self__, *, installation: Optional[str] = None): """ :param str installation: Configures the manner in which the template library is installed on the cluster. - Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. """ if installation is not None: pulumi.set(__self__, "installation", installation) @@ -1156,7 +1156,7 @@ def __init__(__self__, *, def installation(self) -> Optional[str]: """ Configures the manner in which the template library is installed on the cluster. - Possible values are: `INSTALATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. + Possible values are: `INSTALLATION_UNSPECIFIED`, `NOT_INSTALLED`, `ALL`. """ return pulumi.get(self, "installation") @@ -1361,6 +1361,8 @@ def __key_warning(key: str): suggest = "prevent_drift" elif key == "sourceFormat": suggest = "source_format" + elif key == "stopSyncing": + suggest = "stop_syncing" if suggest: pulumi.log.warn(f"Key '{key}' not found in FeatureMembershipConfigmanagementConfigSync. Access the value via the '{suggest}' property getter instead.") @@ -1379,16 +1381,18 @@ def __init__(__self__, *, metrics_gcp_service_account_email: Optional[str] = None, oci: Optional['outputs.FeatureMembershipConfigmanagementConfigSyncOci'] = None, prevent_drift: Optional[bool] = None, - source_format: Optional[str] = None): + source_format: Optional[str] = None, + stop_syncing: Optional[bool] = None): """ :param bool enabled: Enables the installation of ConfigSync. If set to true, ConfigSync resources will be created and the other ConfigSync fields will be applied if exist. If set to false, all other ConfigSync fields will be ignored, ConfigSync resources will be deleted. If omitted, ConfigSync resources will be managed depends on the presence of the git or oci field. :param 'FeatureMembershipConfigmanagementConfigSyncGitArgs' git: (Optional) Structure is documented below. - :param str metrics_gcp_service_account_email: 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. + :param str metrics_gcp_service_account_email: 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. :param 'FeatureMembershipConfigmanagementConfigSyncOciArgs' oci: (Optional) Supported from Config Sync versions 1.12.0 onwards. Structure is documented below. Use either `git` or `oci` config option. - :param bool prevent_drift: 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. + :param bool prevent_drift: 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. :param str source_format: Specifies whether the Config Sync Repo is in "hierarchical" or "unstructured" mode. + :param bool stop_syncing: 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`. """ if enabled is not None: pulumi.set(__self__, "enabled", enabled) @@ -1402,6 +1406,8 @@ def __init__(__self__, *, pulumi.set(__self__, "prevent_drift", prevent_drift) if source_format is not None: pulumi.set(__self__, "source_format", source_format) + if stop_syncing is not None: + pulumi.set(__self__, "stop_syncing", stop_syncing) @property @pulumi.getter @@ -1423,7 +1429,7 @@ def git(self) -> Optional['outputs.FeatureMembershipConfigmanagementConfigSyncGi @pulumi.getter(name="metricsGcpServiceAccountEmail") def metrics_gcp_service_account_email(self) -> Optional[str]: """ - 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. + 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. """ return pulumi.get(self, "metrics_gcp_service_account_email") @@ -1441,7 +1447,7 @@ def oci(self) -> Optional['outputs.FeatureMembershipConfigmanagementConfigSyncOc @pulumi.getter(name="preventDrift") def prevent_drift(self) -> Optional[bool]: """ - 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. + 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. """ return pulumi.get(self, "prevent_drift") @@ -1453,6 +1459,14 @@ def source_format(self) -> Optional[str]: """ return pulumi.get(self, "source_format") + @property + @pulumi.getter(name="stopSyncing") + def stop_syncing(self) -> Optional[bool]: + """ + 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`. + """ + return pulumi.get(self, "stop_syncing") + @pulumi.output_type class FeatureMembershipConfigmanagementConfigSyncGit(dict): diff --git a/sdk/python/pulumi_gcp/gkehub/scope_rbac_role_binding.py b/sdk/python/pulumi_gcp/gkehub/scope_rbac_role_binding.py index d377ebf252..8c2cc87649 100644 --- a/sdk/python/pulumi_gcp/gkehub/scope_rbac_role_binding.py +++ b/sdk/python/pulumi_gcp/gkehub/scope_rbac_role_binding.py @@ -429,9 +429,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_22375") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_29439") scope_rbac_role_binding = gcp.gkehub.ScopeRbacRoleBinding("scope_rbac_role_binding", - scope_rbac_role_binding_id="tf-test-scope-rbac-role-binding_29439", + scope_rbac_role_binding_id="tf-test-scope-rbac-role-binding_87786", scope_id=scope.scope_id, user="test-email@gmail.com", role={ @@ -504,9 +504,9 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp - scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_22375") + scope = gcp.gkehub.Scope("scope", scope_id="tf-test-scope_29439") scope_rbac_role_binding = gcp.gkehub.ScopeRbacRoleBinding("scope_rbac_role_binding", - scope_rbac_role_binding_id="tf-test-scope-rbac-role-binding_29439", + scope_rbac_role_binding_id="tf-test-scope-rbac-role-binding_87786", scope_id=scope.scope_id, user="test-email@gmail.com", role={ diff --git a/sdk/python/pulumi_gcp/iam/__init__.py b/sdk/python/pulumi_gcp/iam/__init__.py index a805b37c13..b9f3fdeb72 100644 --- a/sdk/python/pulumi_gcp/iam/__init__.py +++ b/sdk/python/pulumi_gcp/iam/__init__.py @@ -14,6 +14,7 @@ from .get_workload_identity_pool_provider import * from .organizations_policy_binding import * from .principal_access_boundary_policy import * +from .projects_policy_binding import * from .workforce_pool import * from .workforce_pool_provider import * from .workload_identity_pool import * diff --git a/sdk/python/pulumi_gcp/iam/_inputs.py b/sdk/python/pulumi_gcp/iam/_inputs.py index 916c16719b..38d27ead09 100644 --- a/sdk/python/pulumi_gcp/iam/_inputs.py +++ b/sdk/python/pulumi_gcp/iam/_inputs.py @@ -39,6 +39,10 @@ 'PrincipalAccessBoundaryPolicyDetailsArgsDict', 'PrincipalAccessBoundaryPolicyDetailsRuleArgs', 'PrincipalAccessBoundaryPolicyDetailsRuleArgsDict', + 'ProjectsPolicyBindingConditionArgs', + 'ProjectsPolicyBindingConditionArgsDict', + 'ProjectsPolicyBindingTargetArgs', + 'ProjectsPolicyBindingTargetArgsDict', 'WorkforcePoolAccessRestrictionsArgs', 'WorkforcePoolAccessRestrictionsArgsDict', 'WorkforcePoolAccessRestrictionsAllowedServiceArgs', @@ -1026,6 +1030,139 @@ def description(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "description", value) +if not MYPY: + class ProjectsPolicyBindingConditionArgsDict(TypedDict): + description: NotRequired[pulumi.Input[str]] + """ + Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ + expression: NotRequired[pulumi.Input[str]] + """ + Textual representation of an expression in Common Expression Language syntax. + """ + location: NotRequired[pulumi.Input[str]] + """ + Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + """ + title: NotRequired[pulumi.Input[str]] + """ + 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. + """ +elif False: + ProjectsPolicyBindingConditionArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ProjectsPolicyBindingConditionArgs: + def __init__(__self__, *, + description: Optional[pulumi.Input[str]] = None, + expression: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + title: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] description: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + :param pulumi.Input[str] expression: Textual representation of an expression in Common Expression Language syntax. + :param pulumi.Input[str] location: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + :param pulumi.Input[str] title: 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. + """ + if description is not None: + pulumi.set(__self__, "description", description) + if expression is not None: + pulumi.set(__self__, "expression", expression) + if location is not None: + pulumi.set(__self__, "location", location) + if title is not None: + pulumi.set(__self__, "title", title) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter + def expression(self) -> Optional[pulumi.Input[str]]: + """ + Textual representation of an expression in Common Expression Language syntax. + """ + return pulumi.get(self, "expression") + + @expression.setter + def expression(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "expression", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def title(self) -> Optional[pulumi.Input[str]]: + """ + 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. + """ + return pulumi.get(self, "title") + + @title.setter + def title(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "title", value) + + +if not MYPY: + class ProjectsPolicyBindingTargetArgsDict(TypedDict): + principal_set: NotRequired[pulumi.Input[str]] + """ + Required. Immutable. The resource name of the policy to be bound. + The binding parent and policy must belong to the same Organization (or Project). + + - - - + """ +elif False: + ProjectsPolicyBindingTargetArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ProjectsPolicyBindingTargetArgs: + def __init__(__self__, *, + principal_set: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] principal_set: Required. Immutable. The resource name of the policy to be bound. + The binding parent and policy must belong to the same Organization (or Project). + + - - - + """ + if principal_set is not None: + pulumi.set(__self__, "principal_set", principal_set) + + @property + @pulumi.getter(name="principalSet") + def principal_set(self) -> Optional[pulumi.Input[str]]: + """ + Required. Immutable. The resource name of the policy to be bound. + The binding parent and policy must belong to the same Organization (or Project). + + - - - + """ + return pulumi.get(self, "principal_set") + + @principal_set.setter + def principal_set(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "principal_set", value) + + if not MYPY: class WorkforcePoolAccessRestrictionsArgsDict(TypedDict): allowed_services: NotRequired[pulumi.Input[Sequence[pulumi.Input['WorkforcePoolAccessRestrictionsAllowedServiceArgsDict']]]] diff --git a/sdk/python/pulumi_gcp/iam/folders_policy_binding.py b/sdk/python/pulumi_gcp/iam/folders_policy_binding.py index 8ef86081a4..ab8efa3810 100644 --- a/sdk/python/pulumi_gcp/iam/folders_policy_binding.py +++ b/sdk/python/pulumi_gcp/iam/folders_policy_binding.py @@ -497,6 +497,14 @@ def __init__(__self__, target: Optional[pulumi.Input[Union['FoldersPolicyBindingTargetArgs', 'FoldersPolicyBindingTargetArgsDict']]] = None, __props__=None): """ + A policy binding to a folder + + To get more information about FoldersPolicyBinding, see: + + * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/folders.locations.policyBindings) + * How-to Guides + * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + ## Example Usage ### Iam Folders Policy Binding @@ -581,6 +589,14 @@ def __init__(__self__, args: FoldersPolicyBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ + A policy binding to a folder + + To get more information about FoldersPolicyBinding, see: + + * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/folders.locations.policyBindings) + * How-to Guides + * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + ## Example Usage ### Iam Folders Policy Binding diff --git a/sdk/python/pulumi_gcp/iam/organizations_policy_binding.py b/sdk/python/pulumi_gcp/iam/organizations_policy_binding.py index 7cae85bffa..5f38de8d63 100644 --- a/sdk/python/pulumi_gcp/iam/organizations_policy_binding.py +++ b/sdk/python/pulumi_gcp/iam/organizations_policy_binding.py @@ -497,6 +497,14 @@ def __init__(__self__, target: Optional[pulumi.Input[Union['OrganizationsPolicyBindingTargetArgs', 'OrganizationsPolicyBindingTargetArgsDict']]] = None, __props__=None): """ + A policy binding to an organizations + + To get more information about OrganizationsPolicyBinding, see: + + * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.policyBindings) + * How-to Guides + * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + ## Example Usage ### Iam Organizations Policy Binding @@ -573,6 +581,14 @@ def __init__(__self__, args: OrganizationsPolicyBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ + A policy binding to an organizations + + To get more information about OrganizationsPolicyBinding, see: + + * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.policyBindings) + * How-to Guides + * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + ## Example Usage ### Iam Organizations Policy Binding diff --git a/sdk/python/pulumi_gcp/iam/outputs.py b/sdk/python/pulumi_gcp/iam/outputs.py index 53e57b5670..f29062ce35 100644 --- a/sdk/python/pulumi_gcp/iam/outputs.py +++ b/sdk/python/pulumi_gcp/iam/outputs.py @@ -28,6 +28,8 @@ 'OrganizationsPolicyBindingTarget', 'PrincipalAccessBoundaryPolicyDetails', 'PrincipalAccessBoundaryPolicyDetailsRule', + 'ProjectsPolicyBindingCondition', + 'ProjectsPolicyBindingTarget', 'WorkforcePoolAccessRestrictions', 'WorkforcePoolAccessRestrictionsAllowedService', 'WorkforcePoolProviderExtraAttributesOauth2Client', @@ -758,6 +760,103 @@ def description(self) -> Optional[str]: return pulumi.get(self, "description") +@pulumi.output_type +class ProjectsPolicyBindingCondition(dict): + def __init__(__self__, *, + description: Optional[str] = None, + expression: Optional[str] = None, + location: Optional[str] = None, + title: Optional[str] = None): + """ + :param str description: Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + :param str expression: Textual representation of an expression in Common Expression Language syntax. + :param str location: Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + :param str title: 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. + """ + if description is not None: + pulumi.set(__self__, "description", description) + if expression is not None: + pulumi.set(__self__, "expression", expression) + if location is not None: + pulumi.set(__self__, "location", location) + if title is not None: + pulumi.set(__self__, "title", title) + + @property + @pulumi.getter + def description(self) -> Optional[str]: + """ + Optional. Description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ + return pulumi.get(self, "description") + + @property + @pulumi.getter + def expression(self) -> Optional[str]: + """ + Textual representation of an expression in Common Expression Language syntax. + """ + return pulumi.get(self, "expression") + + @property + @pulumi.getter + def location(self) -> Optional[str]: + """ + Optional. String indicating the location of the expression for error reporting, e.g. a file name and a position in the file. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def title(self) -> Optional[str]: + """ + 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. + """ + return pulumi.get(self, "title") + + +@pulumi.output_type +class ProjectsPolicyBindingTarget(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "principalSet": + suggest = "principal_set" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ProjectsPolicyBindingTarget. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ProjectsPolicyBindingTarget.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ProjectsPolicyBindingTarget.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + principal_set: Optional[str] = None): + """ + :param str principal_set: Required. Immutable. The resource name of the policy to be bound. + The binding parent and policy must belong to the same Organization (or Project). + + - - - + """ + if principal_set is not None: + pulumi.set(__self__, "principal_set", principal_set) + + @property + @pulumi.getter(name="principalSet") + def principal_set(self) -> Optional[str]: + """ + Required. Immutable. The resource name of the policy to be bound. + The binding parent and policy must belong to the same Organization (or Project). + + - - - + """ + return pulumi.get(self, "principal_set") + + @pulumi.output_type class WorkforcePoolAccessRestrictions(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/iam/principal_access_boundary_policy.py b/sdk/python/pulumi_gcp/iam/principal_access_boundary_policy.py index fae9f489ab..692cc15818 100644 --- a/sdk/python/pulumi_gcp/iam/principal_access_boundary_policy.py +++ b/sdk/python/pulumi_gcp/iam/principal_access_boundary_policy.py @@ -366,6 +366,14 @@ def __init__(__self__, principal_access_boundary_policy_id: Optional[pulumi.Input[str]] = None, __props__=None): """ + An IAM Principal Access Boundary Policy resource + + To get more information about PrincipalAccessBoundaryPolicy, see: + + * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.principalAccessBoundaryPolicies) + * How-to Guides + * [Create and apply Principal Access Boundaries](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create) + ## Example Usage ### Iam Principal Access Boundary Policy @@ -424,6 +432,14 @@ def __init__(__self__, args: PrincipalAccessBoundaryPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ + An IAM Principal Access Boundary Policy resource + + To get more information about PrincipalAccessBoundaryPolicy, see: + + * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/organizations.locations.principalAccessBoundaryPolicies) + * How-to Guides + * [Create and apply Principal Access Boundaries](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create) + ## Example Usage ### Iam Principal Access Boundary Policy diff --git a/sdk/python/pulumi_gcp/iam/projects_policy_binding.py b/sdk/python/pulumi_gcp/iam/projects_policy_binding.py new file mode 100644 index 0000000000..3663adcfc8 --- /dev/null +++ b/sdk/python/pulumi_gcp/iam/projects_policy_binding.py @@ -0,0 +1,917 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['ProjectsPolicyBindingArgs', 'ProjectsPolicyBinding'] + +@pulumi.input_type +class ProjectsPolicyBindingArgs: + def __init__(__self__, *, + location: pulumi.Input[str], + policy: pulumi.Input[str], + policy_binding_id: pulumi.Input[str], + target: pulumi.Input['ProjectsPolicyBindingTargetArgs'], + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + condition: Optional[pulumi.Input['ProjectsPolicyBindingConditionArgs']] = None, + display_name: Optional[pulumi.Input[str]] = None, + policy_kind: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a ProjectsPolicyBinding resource. + :param pulumi.Input[str] location: The location of the Policy Binding + :param pulumi.Input[str] policy: Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + :param pulumi.Input[str] policy_binding_id: The Policy Binding ID. + :param pulumi.Input['ProjectsPolicyBindingTargetArgs'] target: Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + Structure is documented below. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + :param pulumi.Input['ProjectsPolicyBindingConditionArgs'] condition: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\"Summary + size limit\\" description: \\"Determines if a summary is less than 100 chars\\" expression: \\"document.summary.size() < + 100\\" Example (Equality): title: \\"Requestor is owner\\" description: \\"Determines if requestor is the document owner\\" + expression: \\"document.owner == request.auth.claims.email\\" Example (Logic): title: \\"Public documents\\" description: + \\"Determine whether the document should be publicly visible\\" expression: \\"document.type != 'private' && document.type + != 'internal'\\" Example (Data Manipulation): title: \\"Notification string\\" description: \\"Create a notification string + with a timestamp.\\" expression: \\"'New message received at ' + string(document.create_time)\\" The exact variables and + functions that may be referenced within an expression are determined by the service that evaluates it. See the service + documentation for additional information. + :param pulumi.Input[str] display_name: Optional. The description of the policy binding. Must be less than or equal to 63 characters. + :param pulumi.Input[str] policy_kind: Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + PRINCIPAL_ACCESS_BOUNDARY ACCESS + """ + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "policy_binding_id", policy_binding_id) + pulumi.set(__self__, "target", target) + if annotations is not None: + pulumi.set(__self__, "annotations", annotations) + if condition is not None: + pulumi.set(__self__, "condition", condition) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if policy_kind is not None: + pulumi.set(__self__, "policy_kind", policy_kind) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The location of the Policy Binding + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def policy(self) -> pulumi.Input[str]: + """ + Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: pulumi.Input[str]): + pulumi.set(self, "policy", value) + + @property + @pulumi.getter(name="policyBindingId") + def policy_binding_id(self) -> pulumi.Input[str]: + """ + The Policy Binding ID. + """ + return pulumi.get(self, "policy_binding_id") + + @policy_binding_id.setter + def policy_binding_id(self, value: pulumi.Input[str]): + pulumi.set(self, "policy_binding_id", value) + + @property + @pulumi.getter + def target(self) -> pulumi.Input['ProjectsPolicyBindingTargetArgs']: + """ + Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + Structure is documented below. + """ + return pulumi.get(self, "target") + + @target.setter + def target(self, value: pulumi.Input['ProjectsPolicyBindingTargetArgs']): + pulumi.set(self, "target", value) + + @property + @pulumi.getter + def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + """ + return pulumi.get(self, "annotations") + + @annotations.setter + def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "annotations", value) + + @property + @pulumi.getter + def condition(self) -> Optional[pulumi.Input['ProjectsPolicyBindingConditionArgs']]: + """ + Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\"Summary + size limit\\" description: \\"Determines if a summary is less than 100 chars\\" expression: \\"document.summary.size() < + 100\\" Example (Equality): title: \\"Requestor is owner\\" description: \\"Determines if requestor is the document owner\\" + expression: \\"document.owner == request.auth.claims.email\\" Example (Logic): title: \\"Public documents\\" description: + \\"Determine whether the document should be publicly visible\\" expression: \\"document.type != 'private' && document.type + != 'internal'\\" Example (Data Manipulation): title: \\"Notification string\\" description: \\"Create a notification string + with a timestamp.\\" expression: \\"'New message received at ' + string(document.create_time)\\" The exact variables and + functions that may be referenced within an expression are determined by the service that evaluates it. See the service + documentation for additional information. + """ + return pulumi.get(self, "condition") + + @condition.setter + def condition(self, value: Optional[pulumi.Input['ProjectsPolicyBindingConditionArgs']]): + pulumi.set(self, "condition", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + Optional. The description of the policy binding. Must be less than or equal to 63 characters. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter(name="policyKind") + def policy_kind(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + PRINCIPAL_ACCESS_BOUNDARY ACCESS + """ + return pulumi.get(self, "policy_kind") + + @policy_kind.setter + def policy_kind(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "policy_kind", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _ProjectsPolicyBindingState: + def __init__(__self__, *, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + condition: Optional[pulumi.Input['ProjectsPolicyBindingConditionArgs']] = None, + create_time: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + effective_annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + policy: Optional[pulumi.Input[str]] = None, + policy_binding_id: Optional[pulumi.Input[str]] = None, + policy_kind: Optional[pulumi.Input[str]] = None, + policy_uid: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + target: Optional[pulumi.Input['ProjectsPolicyBindingTargetArgs']] = None, + uid: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering ProjectsPolicyBinding resources. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + :param pulumi.Input['ProjectsPolicyBindingConditionArgs'] condition: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\"Summary + size limit\\" description: \\"Determines if a summary is less than 100 chars\\" expression: \\"document.summary.size() < + 100\\" Example (Equality): title: \\"Requestor is owner\\" description: \\"Determines if requestor is the document owner\\" + expression: \\"document.owner == request.auth.claims.email\\" Example (Logic): title: \\"Public documents\\" description: + \\"Determine whether the document should be publicly visible\\" expression: \\"document.type != 'private' && document.type + != 'internal'\\" Example (Data Manipulation): title: \\"Notification string\\" description: \\"Create a notification string + with a timestamp.\\" expression: \\"'New message received at ' + string(document.create_time)\\" The exact variables and + functions that may be referenced within an expression are determined by the service that evaluates it. See the service + documentation for additional information. + :param pulumi.Input[str] create_time: Output only. The time when the policy binding was created. + :param pulumi.Input[str] display_name: Optional. The description of the policy binding. Must be less than or equal to 63 characters. + :param pulumi.Input[str] etag: Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + :param pulumi.Input[str] location: The location of the Policy Binding + :param pulumi.Input[str] name: The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + :param pulumi.Input[str] policy: Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + :param pulumi.Input[str] policy_binding_id: The Policy Binding ID. + :param pulumi.Input[str] policy_kind: Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + PRINCIPAL_ACCESS_BOUNDARY ACCESS + :param pulumi.Input[str] policy_uid: Output only. The globally unique ID of the policy to be bound. + :param pulumi.Input['ProjectsPolicyBindingTargetArgs'] target: Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + Structure is documented below. + :param pulumi.Input[str] uid: Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + :param pulumi.Input[str] update_time: Output only. The time when the policy binding was most recently updated. + """ + if annotations is not None: + pulumi.set(__self__, "annotations", annotations) + if condition is not None: + pulumi.set(__self__, "condition", condition) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if effective_annotations is not None: + pulumi.set(__self__, "effective_annotations", effective_annotations) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if policy is not None: + pulumi.set(__self__, "policy", policy) + if policy_binding_id is not None: + pulumi.set(__self__, "policy_binding_id", policy_binding_id) + if policy_kind is not None: + pulumi.set(__self__, "policy_kind", policy_kind) + if policy_uid is not None: + pulumi.set(__self__, "policy_uid", policy_uid) + if project is not None: + pulumi.set(__self__, "project", project) + if target is not None: + pulumi.set(__self__, "target", target) + if uid is not None: + pulumi.set(__self__, "uid", uid) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter + def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + """ + return pulumi.get(self, "annotations") + + @annotations.setter + def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "annotations", value) + + @property + @pulumi.getter + def condition(self) -> Optional[pulumi.Input['ProjectsPolicyBindingConditionArgs']]: + """ + Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\"Summary + size limit\\" description: \\"Determines if a summary is less than 100 chars\\" expression: \\"document.summary.size() < + 100\\" Example (Equality): title: \\"Requestor is owner\\" description: \\"Determines if requestor is the document owner\\" + expression: \\"document.owner == request.auth.claims.email\\" Example (Logic): title: \\"Public documents\\" description: + \\"Determine whether the document should be publicly visible\\" expression: \\"document.type != 'private' && document.type + != 'internal'\\" Example (Data Manipulation): title: \\"Notification string\\" description: \\"Create a notification string + with a timestamp.\\" expression: \\"'New message received at ' + string(document.create_time)\\" The exact variables and + functions that may be referenced within an expression are determined by the service that evaluates it. See the service + documentation for additional information. + """ + return pulumi.get(self, "condition") + + @condition.setter + def condition(self, value: Optional[pulumi.Input['ProjectsPolicyBindingConditionArgs']]): + pulumi.set(self, "condition", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The time when the policy binding was created. + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + Optional. The description of the policy binding. Must be less than or equal to 63 characters. + """ + return pulumi.get(self, "display_name") + + @display_name.setter + def display_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "display_name", value) + + @property + @pulumi.getter(name="effectiveAnnotations") + def effective_annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + return pulumi.get(self, "effective_annotations") + + @effective_annotations.setter + def effective_annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_annotations", value) + + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the Policy Binding + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def policy(self) -> Optional[pulumi.Input[str]]: + """ + Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "policy", value) + + @property + @pulumi.getter(name="policyBindingId") + def policy_binding_id(self) -> Optional[pulumi.Input[str]]: + """ + The Policy Binding ID. + """ + return pulumi.get(self, "policy_binding_id") + + @policy_binding_id.setter + def policy_binding_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "policy_binding_id", value) + + @property + @pulumi.getter(name="policyKind") + def policy_kind(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + PRINCIPAL_ACCESS_BOUNDARY ACCESS + """ + return pulumi.get(self, "policy_kind") + + @policy_kind.setter + def policy_kind(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "policy_kind", value) + + @property + @pulumi.getter(name="policyUid") + def policy_uid(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The globally unique ID of the policy to be bound. + """ + return pulumi.get(self, "policy_uid") + + @policy_uid.setter + def policy_uid(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "policy_uid", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter + def target(self) -> Optional[pulumi.Input['ProjectsPolicyBindingTargetArgs']]: + """ + Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + Structure is documented below. + """ + return pulumi.get(self, "target") + + @target.setter + def target(self, value: Optional[pulumi.Input['ProjectsPolicyBindingTargetArgs']]): + pulumi.set(self, "target", value) + + @property + @pulumi.getter + def uid(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + """ + return pulumi.get(self, "uid") + + @uid.setter + def uid(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "uid", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. The time when the policy binding was most recently updated. + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class ProjectsPolicyBinding(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + condition: Optional[pulumi.Input[Union['ProjectsPolicyBindingConditionArgs', 'ProjectsPolicyBindingConditionArgsDict']]] = None, + display_name: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + policy: Optional[pulumi.Input[str]] = None, + policy_binding_id: Optional[pulumi.Input[str]] = None, + policy_kind: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + target: Optional[pulumi.Input[Union['ProjectsPolicyBindingTargetArgs', 'ProjectsPolicyBindingTargetArgsDict']]] = None, + __props__=None): + """ + A policy binding to a Project + + To get more information about ProjectsPolicyBinding, see: + + * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/projects.locations.policyBindings) + * How-to Guides + * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + + ## Example Usage + + ### Iam Projects Policy Binding + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.get_project() + pab_policy = gcp.iam.PrincipalAccessBoundaryPolicy("pab_policy", + organization="123456789", + location="global", + display_name="test project binding", + principal_access_boundary_policy_id="my-pab-policy") + my_project_binding = gcp.iam.ProjectsPolicyBinding("my-project-binding", + project=project.project_id, + location="global", + display_name="test project binding", + policy_kind="PRINCIPAL_ACCESS_BOUNDARY", + policy_binding_id="test-project-binding", + 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}"), + target={ + "principal_set": f"//cloudresourcemanager.googleapis.com/projects/{project.project_id}", + }) + ``` + + ## Import + + ProjectsPolicyBinding can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}}` + + * `{{project}}/{{location}}/{{policy_binding_id}}` + + * `{{location}}/{{policy_binding_id}}` + + When using the `pulumi import` command, ProjectsPolicyBinding can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}} + ``` + + ```sh + $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{project}}/{{location}}/{{policy_binding_id}} + ``` + + ```sh + $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{location}}/{{policy_binding_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + :param pulumi.Input[Union['ProjectsPolicyBindingConditionArgs', 'ProjectsPolicyBindingConditionArgsDict']] condition: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\"Summary + size limit\\" description: \\"Determines if a summary is less than 100 chars\\" expression: \\"document.summary.size() < + 100\\" Example (Equality): title: \\"Requestor is owner\\" description: \\"Determines if requestor is the document owner\\" + expression: \\"document.owner == request.auth.claims.email\\" Example (Logic): title: \\"Public documents\\" description: + \\"Determine whether the document should be publicly visible\\" expression: \\"document.type != 'private' && document.type + != 'internal'\\" Example (Data Manipulation): title: \\"Notification string\\" description: \\"Create a notification string + with a timestamp.\\" expression: \\"'New message received at ' + string(document.create_time)\\" The exact variables and + functions that may be referenced within an expression are determined by the service that evaluates it. See the service + documentation for additional information. + :param pulumi.Input[str] display_name: Optional. The description of the policy binding. Must be less than or equal to 63 characters. + :param pulumi.Input[str] location: The location of the Policy Binding + :param pulumi.Input[str] policy: Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + :param pulumi.Input[str] policy_binding_id: The Policy Binding ID. + :param pulumi.Input[str] policy_kind: Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + PRINCIPAL_ACCESS_BOUNDARY ACCESS + :param pulumi.Input[Union['ProjectsPolicyBindingTargetArgs', 'ProjectsPolicyBindingTargetArgsDict']] target: Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + Structure is documented below. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ProjectsPolicyBindingArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + A policy binding to a Project + + To get more information about ProjectsPolicyBinding, see: + + * [API documentation](https://cloud.google.com/iam/docs/reference/rest/v3/projects.locations.policyBindings) + * How-to Guides + * [Apply a policy binding](https://cloud.google.com/iam/docs/principal-access-boundary-policies-create#create_binding) + + ## Example Usage + + ### Iam Projects Policy Binding + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.get_project() + pab_policy = gcp.iam.PrincipalAccessBoundaryPolicy("pab_policy", + organization="123456789", + location="global", + display_name="test project binding", + principal_access_boundary_policy_id="my-pab-policy") + my_project_binding = gcp.iam.ProjectsPolicyBinding("my-project-binding", + project=project.project_id, + location="global", + display_name="test project binding", + policy_kind="PRINCIPAL_ACCESS_BOUNDARY", + policy_binding_id="test-project-binding", + 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}"), + target={ + "principal_set": f"//cloudresourcemanager.googleapis.com/projects/{project.project_id}", + }) + ``` + + ## Import + + ProjectsPolicyBinding can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}}` + + * `{{project}}/{{location}}/{{policy_binding_id}}` + + * `{{location}}/{{policy_binding_id}}` + + When using the `pulumi import` command, ProjectsPolicyBinding can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default projects/{{project}}/locations/{{location}}/policyBindings/{{policy_binding_id}} + ``` + + ```sh + $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{project}}/{{location}}/{{policy_binding_id}} + ``` + + ```sh + $ pulumi import gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding default {{location}}/{{policy_binding_id}} + ``` + + :param str resource_name: The name of the resource. + :param ProjectsPolicyBindingArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(ProjectsPolicyBindingArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + condition: Optional[pulumi.Input[Union['ProjectsPolicyBindingConditionArgs', 'ProjectsPolicyBindingConditionArgsDict']]] = None, + display_name: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + policy: Optional[pulumi.Input[str]] = None, + policy_binding_id: Optional[pulumi.Input[str]] = None, + policy_kind: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + target: Optional[pulumi.Input[Union['ProjectsPolicyBindingTargetArgs', 'ProjectsPolicyBindingTargetArgsDict']]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ProjectsPolicyBindingArgs.__new__(ProjectsPolicyBindingArgs) + + __props__.__dict__["annotations"] = annotations + __props__.__dict__["condition"] = condition + __props__.__dict__["display_name"] = display_name + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + if policy is None and not opts.urn: + raise TypeError("Missing required property 'policy'") + __props__.__dict__["policy"] = policy + if policy_binding_id is None and not opts.urn: + raise TypeError("Missing required property 'policy_binding_id'") + __props__.__dict__["policy_binding_id"] = policy_binding_id + __props__.__dict__["policy_kind"] = policy_kind + __props__.__dict__["project"] = project + if target is None and not opts.urn: + raise TypeError("Missing required property 'target'") + __props__.__dict__["target"] = target + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_annotations"] = None + __props__.__dict__["etag"] = None + __props__.__dict__["name"] = None + __props__.__dict__["policy_uid"] = None + __props__.__dict__["uid"] = None + __props__.__dict__["update_time"] = None + super(ProjectsPolicyBinding, __self__).__init__( + 'gcp:iam/projectsPolicyBinding:ProjectsPolicyBinding', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + condition: Optional[pulumi.Input[Union['ProjectsPolicyBindingConditionArgs', 'ProjectsPolicyBindingConditionArgsDict']]] = None, + create_time: Optional[pulumi.Input[str]] = None, + display_name: Optional[pulumi.Input[str]] = None, + effective_annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + policy: Optional[pulumi.Input[str]] = None, + policy_binding_id: Optional[pulumi.Input[str]] = None, + policy_kind: Optional[pulumi.Input[str]] = None, + policy_uid: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + target: Optional[pulumi.Input[Union['ProjectsPolicyBindingTargetArgs', 'ProjectsPolicyBindingTargetArgsDict']]] = None, + uid: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'ProjectsPolicyBinding': + """ + Get an existing ProjectsPolicyBinding resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + :param pulumi.Input[Union['ProjectsPolicyBindingConditionArgs', 'ProjectsPolicyBindingConditionArgsDict']] condition: Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\"Summary + size limit\\" description: \\"Determines if a summary is less than 100 chars\\" expression: \\"document.summary.size() < + 100\\" Example (Equality): title: \\"Requestor is owner\\" description: \\"Determines if requestor is the document owner\\" + expression: \\"document.owner == request.auth.claims.email\\" Example (Logic): title: \\"Public documents\\" description: + \\"Determine whether the document should be publicly visible\\" expression: \\"document.type != 'private' && document.type + != 'internal'\\" Example (Data Manipulation): title: \\"Notification string\\" description: \\"Create a notification string + with a timestamp.\\" expression: \\"'New message received at ' + string(document.create_time)\\" The exact variables and + functions that may be referenced within an expression are determined by the service that evaluates it. See the service + documentation for additional information. + :param pulumi.Input[str] create_time: Output only. The time when the policy binding was created. + :param pulumi.Input[str] display_name: Optional. The description of the policy binding. Must be less than or equal to 63 characters. + :param pulumi.Input[str] etag: Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + :param pulumi.Input[str] location: The location of the Policy Binding + :param pulumi.Input[str] name: The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + :param pulumi.Input[str] policy: Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + :param pulumi.Input[str] policy_binding_id: The Policy Binding ID. + :param pulumi.Input[str] policy_kind: Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + PRINCIPAL_ACCESS_BOUNDARY ACCESS + :param pulumi.Input[str] policy_uid: Output only. The globally unique ID of the policy to be bound. + :param pulumi.Input[Union['ProjectsPolicyBindingTargetArgs', 'ProjectsPolicyBindingTargetArgsDict']] target: Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + Structure is documented below. + :param pulumi.Input[str] uid: Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + :param pulumi.Input[str] update_time: Output only. The time when the policy binding was most recently updated. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ProjectsPolicyBindingState.__new__(_ProjectsPolicyBindingState) + + __props__.__dict__["annotations"] = annotations + __props__.__dict__["condition"] = condition + __props__.__dict__["create_time"] = create_time + __props__.__dict__["display_name"] = display_name + __props__.__dict__["effective_annotations"] = effective_annotations + __props__.__dict__["etag"] = etag + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["policy"] = policy + __props__.__dict__["policy_binding_id"] = policy_binding_id + __props__.__dict__["policy_kind"] = policy_kind + __props__.__dict__["policy_uid"] = policy_uid + __props__.__dict__["project"] = project + __props__.__dict__["target"] = target + __props__.__dict__["uid"] = uid + __props__.__dict__["update_time"] = update_time + return ProjectsPolicyBinding(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def annotations(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Optional. User defined annotations. See https://google.aip.dev/148#annotations for more details such as format and size + limitations **Note**: This field is non-authoritative, and will only manage the annotations present in your + configuration. Please refer to the field 'effective_annotations' for all of the annotations present on the resource. + """ + return pulumi.get(self, "annotations") + + @property + @pulumi.getter + def condition(self) -> pulumi.Output[Optional['outputs.ProjectsPolicyBindingCondition']]: + """ + Represents a textual expression in the Common Expression Language (CEL) syntax. CEL is a C-like expression language. The + syntax and semantics of CEL are documented at https://github.com/google/cel-spec. Example (Comparison): title: \\"Summary + size limit\\" description: \\"Determines if a summary is less than 100 chars\\" expression: \\"document.summary.size() < + 100\\" Example (Equality): title: \\"Requestor is owner\\" description: \\"Determines if requestor is the document owner\\" + expression: \\"document.owner == request.auth.claims.email\\" Example (Logic): title: \\"Public documents\\" description: + \\"Determine whether the document should be publicly visible\\" expression: \\"document.type != 'private' && document.type + != 'internal'\\" Example (Data Manipulation): title: \\"Notification string\\" description: \\"Create a notification string + with a timestamp.\\" expression: \\"'New message received at ' + string(document.create_time)\\" The exact variables and + functions that may be referenced within an expression are determined by the service that evaluates it. See the service + documentation for additional information. + """ + return pulumi.get(self, "condition") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. The time when the policy binding was created. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Output[Optional[str]]: + """ + Optional. The description of the policy binding. Must be less than or equal to 63 characters. + """ + return pulumi.get(self, "display_name") + + @property + @pulumi.getter(name="effectiveAnnotations") + def effective_annotations(self) -> pulumi.Output[Mapping[str, str]]: + return pulumi.get(self, "effective_annotations") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + Optional. The etag for the policy binding. If this is provided on update, it must match the server's etag. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location of the Policy Binding + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the policy binding in the format `{binding_parent/locations/{location}/policyBindings/{policy_binding_id}` + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def policy(self) -> pulumi.Output[str]: + """ + Required. Immutable. The resource name of the policy to be bound. The binding parent and policy must belong to the same Organization (or Project). + """ + return pulumi.get(self, "policy") + + @property + @pulumi.getter(name="policyBindingId") + def policy_binding_id(self) -> pulumi.Output[str]: + """ + The Policy Binding ID. + """ + return pulumi.get(self, "policy_binding_id") + + @property + @pulumi.getter(name="policyKind") + def policy_kind(self) -> pulumi.Output[Optional[str]]: + """ + Immutable. The kind of the policy to attach in this binding. This field must be one of the following: - Left empty (will + be automatically set to the policy kind) - The input policy kind Possible values: POLICY_KIND_UNSPECIFIED + PRINCIPAL_ACCESS_BOUNDARY ACCESS + """ + return pulumi.get(self, "policy_kind") + + @property + @pulumi.getter(name="policyUid") + def policy_uid(self) -> pulumi.Output[str]: + """ + Output only. The globally unique ID of the policy to be bound. + """ + return pulumi.get(self, "policy_uid") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + return pulumi.get(self, "project") + + @property + @pulumi.getter + def target(self) -> pulumi.Output['outputs.ProjectsPolicyBindingTarget']: + """ + Target is the full resource name of the resource to which the policy will be bound. Immutable once set. + Structure is documented below. + """ + return pulumi.get(self, "target") + + @property + @pulumi.getter + def uid(self) -> pulumi.Output[str]: + """ + Output only. The globally unique ID of the policy binding. Assigned when the policy binding is created. + """ + return pulumi.get(self, "uid") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. The time when the policy binding was most recently updated. + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/iap/tunnel_dest_group.py b/sdk/python/pulumi_gcp/iap/tunnel_dest_group.py index 3ad919763d..50fb6830e6 100644 --- a/sdk/python/pulumi_gcp/iap/tunnel_dest_group.py +++ b/sdk/python/pulumi_gcp/iap/tunnel_dest_group.py @@ -253,7 +253,7 @@ def __init__(__self__, dest_group = gcp.iap.TunnelDestGroup("dest_group", region="us-central1", - group_name="testgroup_87786", + group_name="testgroup_2067", cidrs=[ "10.1.0.0/16", "192.168.10.0/24", @@ -339,7 +339,7 @@ def __init__(__self__, dest_group = gcp.iap.TunnelDestGroup("dest_group", region="us-central1", - group_name="testgroup_87786", + group_name="testgroup_2067", cidrs=[ "10.1.0.0/16", "192.168.10.0/24", diff --git a/sdk/python/pulumi_gcp/integrationconnectors/_inputs.py b/sdk/python/pulumi_gcp/integrationconnectors/_inputs.py index a9d76ef2c8..4bc8e3df99 100644 --- a/sdk/python/pulumi_gcp/integrationconnectors/_inputs.py +++ b/sdk/python/pulumi_gcp/integrationconnectors/_inputs.py @@ -319,7 +319,7 @@ class ConnectionAuthConfigAdditionalVariableArgsDict(TypedDict): """ encryption_key_value: NotRequired[pulumi.Input['ConnectionAuthConfigAdditionalVariableEncryptionKeyValueArgsDict']] """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ integer_value: NotRequired[pulumi.Input[int]] @@ -350,7 +350,7 @@ def __init__(__self__, *, """ :param pulumi.Input[str] key: Key for the configVariable :param pulumi.Input[bool] boolean_value: Boolean Value of configVariable. - :param pulumi.Input['ConnectionAuthConfigAdditionalVariableEncryptionKeyValueArgs'] encryption_key_value: Encription key value of configVariable. + :param pulumi.Input['ConnectionAuthConfigAdditionalVariableEncryptionKeyValueArgs'] encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param pulumi.Input[int] integer_value: Integer Value of configVariable. :param pulumi.Input['ConnectionAuthConfigAdditionalVariableSecretValueArgs'] secret_value: Secret value of configVariable @@ -397,7 +397,7 @@ def boolean_value(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional[pulumi.Input['ConnectionAuthConfigAdditionalVariableEncryptionKeyValueArgs']]: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") @@ -1207,7 +1207,7 @@ class ConnectionConfigVariableArgsDict(TypedDict): """ encryption_key_value: NotRequired[pulumi.Input['ConnectionConfigVariableEncryptionKeyValueArgsDict']] """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ integer_value: NotRequired[pulumi.Input[int]] @@ -1238,7 +1238,7 @@ def __init__(__self__, *, """ :param pulumi.Input[str] key: Key for the configVariable :param pulumi.Input[bool] boolean_value: Boolean Value of configVariable - :param pulumi.Input['ConnectionConfigVariableEncryptionKeyValueArgs'] encryption_key_value: Encription key value of configVariable. + :param pulumi.Input['ConnectionConfigVariableEncryptionKeyValueArgs'] encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param pulumi.Input[int] integer_value: Integer Value of configVariable :param pulumi.Input['ConnectionConfigVariableSecretValueArgs'] secret_value: Secret value of configVariable. @@ -1285,7 +1285,7 @@ def boolean_value(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional[pulumi.Input['ConnectionConfigVariableEncryptionKeyValueArgs']]: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") @@ -1696,7 +1696,7 @@ class ConnectionEventingConfigAdditionalVariableArgsDict(TypedDict): """ encryption_key_value: NotRequired[pulumi.Input['ConnectionEventingConfigAdditionalVariableEncryptionKeyValueArgsDict']] """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ integer_value: NotRequired[pulumi.Input[int]] @@ -1727,7 +1727,7 @@ def __init__(__self__, *, """ :param pulumi.Input[str] key: Key for the configVariable :param pulumi.Input[bool] boolean_value: Boolean Value of configVariable. - :param pulumi.Input['ConnectionEventingConfigAdditionalVariableEncryptionKeyValueArgs'] encryption_key_value: Encription key value of configVariable. + :param pulumi.Input['ConnectionEventingConfigAdditionalVariableEncryptionKeyValueArgs'] encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param pulumi.Input[int] integer_value: Integer Value of configVariable. :param pulumi.Input['ConnectionEventingConfigAdditionalVariableSecretValueArgs'] secret_value: Secret value of configVariable @@ -1774,7 +1774,7 @@ def boolean_value(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional[pulumi.Input['ConnectionEventingConfigAdditionalVariableEncryptionKeyValueArgs']]: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") @@ -2024,7 +2024,7 @@ class ConnectionEventingConfigAuthConfigAdditionalVariableArgsDict(TypedDict): """ encryption_key_value: NotRequired[pulumi.Input['ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValueArgsDict']] """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ integer_value: NotRequired[pulumi.Input[int]] @@ -2055,7 +2055,7 @@ def __init__(__self__, *, """ :param pulumi.Input[str] key: Key for the configVariable :param pulumi.Input[bool] boolean_value: Boolean Value of configVariable. - :param pulumi.Input['ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValueArgs'] encryption_key_value: Encription key value of configVariable. + :param pulumi.Input['ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValueArgs'] encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param pulumi.Input[int] integer_value: Integer Value of configVariable. :param pulumi.Input['ConnectionEventingConfigAuthConfigAdditionalVariableSecretValueArgs'] secret_value: Secret value of configVariable @@ -2102,7 +2102,7 @@ def boolean_value(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional[pulumi.Input['ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValueArgs']]: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") @@ -2954,7 +2954,7 @@ class ConnectionSslConfigAdditionalVariableArgsDict(TypedDict): """ encryption_key_value: NotRequired[pulumi.Input['ConnectionSslConfigAdditionalVariableEncryptionKeyValueArgsDict']] """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ integer_value: NotRequired[pulumi.Input[int]] @@ -2985,7 +2985,7 @@ def __init__(__self__, *, """ :param pulumi.Input[str] key: Key for the configVariable :param pulumi.Input[bool] boolean_value: Boolean Value of configVariable. - :param pulumi.Input['ConnectionSslConfigAdditionalVariableEncryptionKeyValueArgs'] encryption_key_value: Encription key value of configVariable. + :param pulumi.Input['ConnectionSslConfigAdditionalVariableEncryptionKeyValueArgs'] encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param pulumi.Input[int] integer_value: Integer Value of configVariable. :param pulumi.Input['ConnectionSslConfigAdditionalVariableSecretValueArgs'] secret_value: Secret value of configVariable @@ -3032,7 +3032,7 @@ def boolean_value(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional[pulumi.Input['ConnectionSslConfigAdditionalVariableEncryptionKeyValueArgs']]: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") diff --git a/sdk/python/pulumi_gcp/integrationconnectors/managed_zone.py b/sdk/python/pulumi_gcp/integrationconnectors/managed_zone.py index 3a18aecf69..5498d02695 100644 --- a/sdk/python/pulumi_gcp/integrationconnectors/managed_zone.py +++ b/sdk/python/pulumi_gcp/integrationconnectors/managed_zone.py @@ -378,8 +378,8 @@ def __init__(__self__, import pulumi_gcp as gcp target_project = gcp.organizations.Project("target_project", - project_id="tf-test_2067", - name="tf-test_40785", + project_id="tf-test_40785", + name="tf-test_79169", org_id="123456789", billing_account="000000-0000000-0000000-000000", deletion_policy="DELETE") @@ -400,8 +400,8 @@ def __init__(__self__, auto_create_subnetworks=False, opts = pulumi.ResourceOptions(depends_on=[compute])) zone = gcp.dns.ManagedZone("zone", - name="tf-test-dns_79169", - dns_name="private_56529.example.com.", + name="tf-test-dns_56529", + dns_name="private_75413.example.com.", visibility="private", private_visibility_config={ "networks": [{ @@ -489,8 +489,8 @@ def __init__(__self__, import pulumi_gcp as gcp target_project = gcp.organizations.Project("target_project", - project_id="tf-test_2067", - name="tf-test_40785", + project_id="tf-test_40785", + name="tf-test_79169", org_id="123456789", billing_account="000000-0000000-0000000-000000", deletion_policy="DELETE") @@ -511,8 +511,8 @@ def __init__(__self__, auto_create_subnetworks=False, opts = pulumi.ResourceOptions(depends_on=[compute])) zone = gcp.dns.ManagedZone("zone", - name="tf-test-dns_79169", - dns_name="private_56529.example.com.", + name="tf-test-dns_56529", + dns_name="private_75413.example.com.", visibility="private", private_visibility_config={ "networks": [{ diff --git a/sdk/python/pulumi_gcp/integrationconnectors/outputs.py b/sdk/python/pulumi_gcp/integrationconnectors/outputs.py index cc2d92558a..7e101abab0 100644 --- a/sdk/python/pulumi_gcp/integrationconnectors/outputs.py +++ b/sdk/python/pulumi_gcp/integrationconnectors/outputs.py @@ -250,7 +250,7 @@ def __init__(__self__, *, """ :param str key: Key for the configVariable :param bool boolean_value: Boolean Value of configVariable. - :param 'ConnectionAuthConfigAdditionalVariableEncryptionKeyValueArgs' encryption_key_value: Encription key value of configVariable. + :param 'ConnectionAuthConfigAdditionalVariableEncryptionKeyValueArgs' encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param int integer_value: Integer Value of configVariable. :param 'ConnectionAuthConfigAdditionalVariableSecretValueArgs' secret_value: Secret value of configVariable @@ -289,7 +289,7 @@ def boolean_value(self) -> Optional[bool]: @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional['outputs.ConnectionAuthConfigAdditionalVariableEncryptionKeyValue']: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") @@ -1022,7 +1022,7 @@ def __init__(__self__, *, """ :param str key: Key for the configVariable :param bool boolean_value: Boolean Value of configVariable - :param 'ConnectionConfigVariableEncryptionKeyValueArgs' encryption_key_value: Encription key value of configVariable. + :param 'ConnectionConfigVariableEncryptionKeyValueArgs' encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param int integer_value: Integer Value of configVariable :param 'ConnectionConfigVariableSecretValueArgs' secret_value: Secret value of configVariable. @@ -1061,7 +1061,7 @@ def boolean_value(self) -> Optional[bool]: @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional['outputs.ConnectionConfigVariableEncryptionKeyValue']: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") @@ -1430,7 +1430,7 @@ def __init__(__self__, *, """ :param str key: Key for the configVariable :param bool boolean_value: Boolean Value of configVariable. - :param 'ConnectionEventingConfigAdditionalVariableEncryptionKeyValueArgs' encryption_key_value: Encription key value of configVariable. + :param 'ConnectionEventingConfigAdditionalVariableEncryptionKeyValueArgs' encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param int integer_value: Integer Value of configVariable. :param 'ConnectionEventingConfigAdditionalVariableSecretValueArgs' secret_value: Secret value of configVariable @@ -1469,7 +1469,7 @@ def boolean_value(self) -> Optional[bool]: @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional['outputs.ConnectionEventingConfigAdditionalVariableEncryptionKeyValue']: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") @@ -1708,7 +1708,7 @@ def __init__(__self__, *, """ :param str key: Key for the configVariable :param bool boolean_value: Boolean Value of configVariable. - :param 'ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValueArgs' encryption_key_value: Encription key value of configVariable. + :param 'ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValueArgs' encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param int integer_value: Integer Value of configVariable. :param 'ConnectionEventingConfigAuthConfigAdditionalVariableSecretValueArgs' secret_value: Secret value of configVariable @@ -1747,7 +1747,7 @@ def boolean_value(self) -> Optional[bool]: @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional['outputs.ConnectionEventingConfigAuthConfigAdditionalVariableEncryptionKeyValue']: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") @@ -2427,7 +2427,7 @@ def __init__(__self__, *, """ :param str key: Key for the configVariable :param bool boolean_value: Boolean Value of configVariable. - :param 'ConnectionSslConfigAdditionalVariableEncryptionKeyValueArgs' encryption_key_value: Encription key value of configVariable. + :param 'ConnectionSslConfigAdditionalVariableEncryptionKeyValueArgs' encryption_key_value: Encryption key value of configVariable. Structure is documented below. :param int integer_value: Integer Value of configVariable. :param 'ConnectionSslConfigAdditionalVariableSecretValueArgs' secret_value: Secret value of configVariable @@ -2466,7 +2466,7 @@ def boolean_value(self) -> Optional[bool]: @pulumi.getter(name="encryptionKeyValue") def encryption_key_value(self) -> Optional['outputs.ConnectionSslConfigAdditionalVariableEncryptionKeyValue']: """ - Encription key value of configVariable. + Encryption key value of configVariable. Structure is documented below. """ return pulumi.get(self, "encryption_key_value") diff --git a/sdk/python/pulumi_gcp/monitoring/_inputs.py b/sdk/python/pulumi_gcp/monitoring/_inputs.py index dafaffb9fa..9702e4c836 100644 --- a/sdk/python/pulumi_gcp/monitoring/_inputs.py +++ b/sdk/python/pulumi_gcp/monitoring/_inputs.py @@ -1419,9 +1419,8 @@ class AlertPolicyConditionConditionPrometheusQueryLanguageArgsDict(TypedDict): in the future. This field is optional. If this field is not empty, then it must be a valid Prometheus label name. - - - - - """ + disable_metric_validation: NotRequired[pulumi.Input[bool]] duration: NotRequired[pulumi.Input[str]] """ Alerts are considered firing once their PromQL expression evaluated @@ -1464,6 +1463,7 @@ class AlertPolicyConditionConditionPrometheusQueryLanguageArgs: def __init__(__self__, *, query: pulumi.Input[str], alert_rule: Optional[pulumi.Input[str]] = None, + disable_metric_validation: Optional[pulumi.Input[bool]] = None, duration: Optional[pulumi.Input[str]] = None, evaluation_interval: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -1481,8 +1481,6 @@ def __init__(__self__, *, in the future. This field is optional. If this field is not empty, then it must be a valid Prometheus label name. - - - - - :param pulumi.Input[str] duration: Alerts are considered firing once their PromQL expression evaluated to be "true" for this long. Alerts whose PromQL expression was not evaluated to be "true" for long enough are considered pending. The @@ -1509,6 +1507,8 @@ def __init__(__self__, *, pulumi.set(__self__, "query", query) if alert_rule is not None: pulumi.set(__self__, "alert_rule", alert_rule) + if disable_metric_validation is not None: + pulumi.set(__self__, "disable_metric_validation", disable_metric_validation) if duration is not None: pulumi.set(__self__, "duration", duration) if evaluation_interval is not None: @@ -1545,8 +1545,6 @@ def alert_rule(self) -> Optional[pulumi.Input[str]]: in the future. This field is optional. If this field is not empty, then it must be a valid Prometheus label name. - - - - - """ return pulumi.get(self, "alert_rule") @@ -1554,6 +1552,15 @@ def alert_rule(self) -> Optional[pulumi.Input[str]]: def alert_rule(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "alert_rule", value) + @property + @pulumi.getter(name="disableMetricValidation") + def disable_metric_validation(self) -> Optional[pulumi.Input[bool]]: + return pulumi.get(self, "disable_metric_validation") + + @disable_metric_validation.setter + def disable_metric_validation(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "disable_metric_validation", value) + @property @pulumi.getter def duration(self) -> Optional[pulumi.Input[str]]: diff --git a/sdk/python/pulumi_gcp/monitoring/outputs.py b/sdk/python/pulumi_gcp/monitoring/outputs.py index 9931f5954f..0ebd7b2f8f 100644 --- a/sdk/python/pulumi_gcp/monitoring/outputs.py +++ b/sdk/python/pulumi_gcp/monitoring/outputs.py @@ -1004,6 +1004,8 @@ def __key_warning(key: str): suggest = None if key == "alertRule": suggest = "alert_rule" + elif key == "disableMetricValidation": + suggest = "disable_metric_validation" elif key == "evaluationInterval": suggest = "evaluation_interval" elif key == "ruleGroup": @@ -1023,6 +1025,7 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, query: str, alert_rule: Optional[str] = None, + disable_metric_validation: Optional[bool] = None, duration: Optional[str] = None, evaluation_interval: Optional[str] = None, labels: Optional[Mapping[str, str]] = None, @@ -1040,8 +1043,6 @@ def __init__(__self__, *, in the future. This field is optional. If this field is not empty, then it must be a valid Prometheus label name. - - - - - :param str duration: Alerts are considered firing once their PromQL expression evaluated to be "true" for this long. Alerts whose PromQL expression was not evaluated to be "true" for long enough are considered pending. The @@ -1068,6 +1069,8 @@ def __init__(__self__, *, pulumi.set(__self__, "query", query) if alert_rule is not None: pulumi.set(__self__, "alert_rule", alert_rule) + if disable_metric_validation is not None: + pulumi.set(__self__, "disable_metric_validation", disable_metric_validation) if duration is not None: pulumi.set(__self__, "duration", duration) if evaluation_interval is not None: @@ -1100,11 +1103,14 @@ def alert_rule(self) -> Optional[str]: in the future. This field is optional. If this field is not empty, then it must be a valid Prometheus label name. - - - - - """ return pulumi.get(self, "alert_rule") + @property + @pulumi.getter(name="disableMetricValidation") + def disable_metric_validation(self) -> Optional[bool]: + return pulumi.get(self, "disable_metric_validation") + @property @pulumi.getter def duration(self) -> Optional[str]: diff --git a/sdk/python/pulumi_gcp/netapp/_inputs.py b/sdk/python/pulumi_gcp/netapp/_inputs.py index ec4dc3a05e..499c76a977 100644 --- a/sdk/python/pulumi_gcp/netapp/_inputs.py +++ b/sdk/python/pulumi_gcp/netapp/_inputs.py @@ -163,7 +163,7 @@ class VolumeExportPolicyRuleArgsDict(TypedDict): """ allowed_clients: NotRequired[pulumi.Input[str]] """ - Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. """ has_root_access: NotRequired[pulumi.Input[str]] """ @@ -221,7 +221,7 @@ def __init__(__self__, *, """ :param pulumi.Input[str] access_type: Defines the access type for clients matching the `allowedClients` specification. Possible values are: `READ_ONLY`, `READ_WRITE`, `READ_NONE`. - :param pulumi.Input[str] allowed_clients: Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + :param pulumi.Input[str] allowed_clients: Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. :param pulumi.Input[str] has_root_access: If enabled, the root user (UID = 0) of the specified clients doesn't get mapped to nobody (UID = 65534). This is also known as no_root_squash. :param pulumi.Input[bool] kerberos5_read_only: If enabled (true) the rule defines a read only access for clients matching the 'allowedClients' specification. It enables nfs clients to mount using 'authentication' kerberos security mode. :param pulumi.Input[bool] kerberos5_read_write: If enabled (true) the rule defines read and write access for clients matching the 'allowedClients' specification. It enables nfs clients to mount using 'authentication' kerberos security mode. The 'kerberos5ReadOnly' value is ignored if this is enabled. @@ -272,7 +272,7 @@ def access_type(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="allowedClients") def allowed_clients(self) -> Optional[pulumi.Input[str]]: """ - Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. """ return pulumi.get(self, "allowed_clients") diff --git a/sdk/python/pulumi_gcp/netapp/active_directory.py b/sdk/python/pulumi_gcp/netapp/active_directory.py index 44b948b434..a821e1ba4e 100644 --- a/sdk/python/pulumi_gcp/netapp/active_directory.py +++ b/sdk/python/pulumi_gcp/netapp/active_directory.py @@ -54,7 +54,7 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input[str]]] backup_operators: Domain user/group accounts to be added to the Backup Operators group of the SMB service. The Backup Operators group allows members to backup and restore files regardless of whether they have read or write access to the files. Comma-separated list. :param pulumi.Input[str] description: An optional description of this resource. :param pulumi.Input[bool] encrypt_dc_connections: If enabled, traffic between the SMB server to Domain Controller (DC) will be encrypted. - :param pulumi.Input[str] kdc_hostname: Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + :param pulumi.Input[str] kdc_hostname: Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 :param pulumi.Input[str] kdc_ip: IP address of the Active Directory server used as Kerberos Key Distribution Center. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels as key value pairs. Example: `{ "owner": "Bob", "department": "finance", "purpose": "testing" }`. @@ -247,7 +247,7 @@ def encrypt_dc_connections(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="kdcHostname") def kdc_hostname(self) -> Optional[pulumi.Input[str]]: """ - Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 """ return pulumi.get(self, "kdc_hostname") @@ -414,7 +414,7 @@ def __init__(__self__, *, :param pulumi.Input[str] domain: Fully qualified domain name for the Active Directory domain. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. :param pulumi.Input[bool] encrypt_dc_connections: If enabled, traffic between the SMB server to Domain Controller (DC) will be encrypted. - :param pulumi.Input[str] kdc_hostname: Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + :param pulumi.Input[str] kdc_hostname: Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 :param pulumi.Input[str] kdc_ip: IP address of the Active Directory server used as Kerberos Key Distribution Center. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels as key value pairs. Example: `{ "owner": "Bob", "department": "finance", "purpose": "testing" }`. @@ -609,7 +609,7 @@ def encrypt_dc_connections(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="kdcHostname") def kdc_hostname(self) -> Optional[pulumi.Input[str]]: """ - Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 """ return pulumi.get(self, "kdc_hostname") @@ -931,7 +931,7 @@ def __init__(__self__, :param pulumi.Input[str] dns: Comma separated list of DNS server IP addresses for the Active Directory domain. :param pulumi.Input[str] domain: Fully qualified domain name for the Active Directory domain. :param pulumi.Input[bool] encrypt_dc_connections: If enabled, traffic between the SMB server to Domain Controller (DC) will be encrypted. - :param pulumi.Input[str] kdc_hostname: Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + :param pulumi.Input[str] kdc_hostname: Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 :param pulumi.Input[str] kdc_ip: IP address of the Active Directory server used as Kerberos Key Distribution Center. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels as key value pairs. Example: `{ "owner": "Bob", "department": "finance", "purpose": "testing" }`. @@ -1175,7 +1175,7 @@ def get(resource_name: str, :param pulumi.Input[str] domain: Fully qualified domain name for the Active Directory domain. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. :param pulumi.Input[bool] encrypt_dc_connections: If enabled, traffic between the SMB server to Domain Controller (DC) will be encrypted. - :param pulumi.Input[str] kdc_hostname: Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + :param pulumi.Input[str] kdc_hostname: Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 :param pulumi.Input[str] kdc_ip: IP address of the Active Directory server used as Kerberos Key Distribution Center. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels as key value pairs. Example: `{ "owner": "Bob", "department": "finance", "purpose": "testing" }`. @@ -1313,7 +1313,7 @@ def encrypt_dc_connections(self) -> pulumi.Output[Optional[bool]]: @pulumi.getter(name="kdcHostname") def kdc_hostname(self) -> pulumi.Output[Optional[str]]: """ - Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only requried for volumes using kerberized NFSv4.1 + Hostname of the Active Directory server used as Kerberos Key Distribution Center. Only required for volumes using kerberized NFSv4.1 """ return pulumi.get(self, "kdc_hostname") diff --git a/sdk/python/pulumi_gcp/netapp/outputs.py b/sdk/python/pulumi_gcp/netapp/outputs.py index aab56e233e..ad9397dc34 100644 --- a/sdk/python/pulumi_gcp/netapp/outputs.py +++ b/sdk/python/pulumi_gcp/netapp/outputs.py @@ -167,7 +167,7 @@ def __init__(__self__, *, """ :param str access_type: Defines the access type for clients matching the `allowedClients` specification. Possible values are: `READ_ONLY`, `READ_WRITE`, `READ_NONE`. - :param str allowed_clients: Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + :param str allowed_clients: Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. :param str has_root_access: If enabled, the root user (UID = 0) of the specified clients doesn't get mapped to nobody (UID = 65534). This is also known as no_root_squash. :param bool kerberos5_read_only: If enabled (true) the rule defines a read only access for clients matching the 'allowedClients' specification. It enables nfs clients to mount using 'authentication' kerberos security mode. :param bool kerberos5_read_write: If enabled (true) the rule defines read and write access for clients matching the 'allowedClients' specification. It enables nfs clients to mount using 'authentication' kerberos security mode. The 'kerberos5ReadOnly' value is ignored if this is enabled. @@ -214,7 +214,7 @@ def access_type(self) -> Optional[str]: @pulumi.getter(name="allowedClients") def allowed_clients(self) -> Optional[str]: """ - Defines the client ingress specification (allowed clients) as a comma seperated list with IPv4 CIDRs or IPv4 host addresses. + Defines the client ingress specification (allowed clients) as a comma separated list with IPv4 CIDRs or IPv4 host addresses. """ return pulumi.get(self, "allowed_clients") diff --git a/sdk/python/pulumi_gcp/netapp/volume.py b/sdk/python/pulumi_gcp/netapp/volume.py index 7f1e4d8a3a..f4de87855e 100644 --- a/sdk/python/pulumi_gcp/netapp/volume.py +++ b/sdk/python/pulumi_gcp/netapp/volume.py @@ -51,7 +51,7 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input[str]]] protocols: The protocol of the volume. Allowed combinations are `['NFSV3']`, `['NFSV4']`, `['SMB']`, `['NFSV3', 'NFSV4']`, `['SMB', 'NFSV3']` and `['SMB', 'NFSV4']`. Each value may be one of: `NFSV3`, `NFSV4`, `SMB`. :param pulumi.Input[str] share_name: Share name (SMB) or export path (NFS) of the volume. Needs to be unique per location. - :param pulumi.Input[str] storage_pool: Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + :param pulumi.Input[str] storage_pool: Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. :param pulumi.Input['VolumeBackupConfigArgs'] backup_config: Backup configuration for the volume. Structure is documented below. :param pulumi.Input[str] deletion_policy: Policy to determine if the volume should be deleted forcefully. @@ -187,7 +187,7 @@ def share_name(self, value: pulumi.Input[str]): @pulumi.getter(name="storagePool") def storage_pool(self) -> pulumi.Input[str]: """ - Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. """ return pulumi.get(self, "storage_pool") @@ -528,7 +528,7 @@ def __init__(__self__, *, :param pulumi.Input[str] security_style: Security Style of the Volume. Use UNIX to use UNIX or NFSV4 ACLs for file permissions. Use NTFS to use NTFS ACLs for file permissions. Can only be set for volumes which use SMB together with NFS as protocol. Possible values are: `NTFS`, `UNIX`. - :param pulumi.Input[str] service_level: Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + :param pulumi.Input[str] service_level: Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. :param pulumi.Input[str] share_name: Share name (SMB) or export path (NFS) of the volume. Needs to be unique per location. :param pulumi.Input[Sequence[pulumi.Input[str]]] smb_settings: Settings for volumes with SMB access. Each value may be one of: `ENCRYPT_DATA`, `BROWSABLE`, `CHANGE_NOTIFY`, `NON_BROWSABLE`, `OPLOCKS`, `SHOW_SNAPSHOT`, `SHOW_PREVIOUS_VERSIONS`, `ACCESS_BASED_ENUMERATION`, `CONTINUOUSLY_AVAILABLE`. @@ -538,7 +538,7 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input[str] state: State of the volume. :param pulumi.Input[str] state_details: State details of the volume. - :param pulumi.Input[str] storage_pool: Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + :param pulumi.Input[str] storage_pool: Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. :param pulumi.Input['VolumeTieringPolicyArgs'] tiering_policy: Tiering policy for the volume. Structure is documented below. :param pulumi.Input[str] unix_permissions: Unix permission the mount point will be created with. Default is 0770. Applicable for UNIX security style volumes only. @@ -1000,7 +1000,7 @@ def security_style(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="serviceLevel") def service_level(self) -> Optional[pulumi.Input[str]]: """ - Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. """ return pulumi.get(self, "service_level") @@ -1087,7 +1087,7 @@ def state_details(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="storagePool") def storage_pool(self) -> Optional[pulumi.Input[str]]: """ - Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. """ return pulumi.get(self, "storage_pool") @@ -1280,7 +1280,7 @@ def __init__(__self__, :param pulumi.Input[Union['VolumeSnapshotPolicyArgs', 'VolumeSnapshotPolicyArgsDict']] snapshot_policy: Snapshot policy defines the schedule for automatic snapshot creation. To disable automatic snapshot creation you have to remove the whole snapshot_policy block. Structure is documented below. - :param pulumi.Input[str] storage_pool: Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + :param pulumi.Input[str] storage_pool: Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. :param pulumi.Input[Union['VolumeTieringPolicyArgs', 'VolumeTieringPolicyArgsDict']] tiering_policy: Tiering policy for the volume. Structure is documented below. :param pulumi.Input[str] unix_permissions: Unix permission the mount point will be created with. Default is 0770. Applicable for UNIX security style volumes only. @@ -1561,7 +1561,7 @@ def get(resource_name: str, :param pulumi.Input[str] security_style: Security Style of the Volume. Use UNIX to use UNIX or NFSV4 ACLs for file permissions. Use NTFS to use NTFS ACLs for file permissions. Can only be set for volumes which use SMB together with NFS as protocol. Possible values are: `NTFS`, `UNIX`. - :param pulumi.Input[str] service_level: Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + :param pulumi.Input[str] service_level: Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. :param pulumi.Input[str] share_name: Share name (SMB) or export path (NFS) of the volume. Needs to be unique per location. :param pulumi.Input[Sequence[pulumi.Input[str]]] smb_settings: Settings for volumes with SMB access. Each value may be one of: `ENCRYPT_DATA`, `BROWSABLE`, `CHANGE_NOTIFY`, `NON_BROWSABLE`, `OPLOCKS`, `SHOW_SNAPSHOT`, `SHOW_PREVIOUS_VERSIONS`, `ACCESS_BASED_ENUMERATION`, `CONTINUOUSLY_AVAILABLE`. @@ -1571,7 +1571,7 @@ def get(resource_name: str, Structure is documented below. :param pulumi.Input[str] state: State of the volume. :param pulumi.Input[str] state_details: State details of the volume. - :param pulumi.Input[str] storage_pool: Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + :param pulumi.Input[str] storage_pool: Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. :param pulumi.Input[Union['VolumeTieringPolicyArgs', 'VolumeTieringPolicyArgsDict']] tiering_policy: Tiering policy for the volume. Structure is documented below. :param pulumi.Input[str] unix_permissions: Unix permission the mount point will be created with. Default is 0770. Applicable for UNIX security style volumes only. @@ -1881,7 +1881,7 @@ def security_style(self) -> pulumi.Output[str]: @pulumi.getter(name="serviceLevel") def service_level(self) -> pulumi.Output[str]: """ - Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTERME, STANDARD, FLEX. + Service level of the volume. Inherited from storage pool. Supported values are : PREMIUM, EXTREME, STANDARD, FLEX. """ return pulumi.get(self, "service_level") @@ -1940,7 +1940,7 @@ def state_details(self) -> pulumi.Output[str]: @pulumi.getter(name="storagePool") def storage_pool(self) -> pulumi.Output[str]: """ - Name of the storage pool to create the volume in. Pool needs enough spare capacity to accomodate the volume. + Name of the storage pool to create the volume in. Pool needs enough spare capacity to accommodate the volume. """ return pulumi.get(self, "storage_pool") diff --git a/sdk/python/pulumi_gcp/networkconnectivity/spoke.py b/sdk/python/pulumi_gcp/networkconnectivity/spoke.py index 3e68f69b9e..59cd3914e9 100644 --- a/sdk/python/pulumi_gcp/networkconnectivity/spoke.py +++ b/sdk/python/pulumi_gcp/networkconnectivity/spoke.py @@ -596,15 +596,15 @@ def __init__(__self__, import pulumi_gcp as gcp network = gcp.compute.Network("network", - name="tf-test-network_75413", + name="tf-test-network_55138", auto_create_subnetworks=False) subnetwork = gcp.compute.Subnetwork("subnetwork", - name="tf-test-subnet_55138", + name="tf-test-subnet_37559", ip_cidr_range="10.0.0.0/28", region="us-central1", network=network.self_link) instance = gcp.compute.Instance("instance", - name="tf-test-instance_37559", + name="tf-test-instance_91980", machine_type="e2-medium", can_ip_forward=True, zone="us-central1-a", @@ -621,13 +621,13 @@ def __init__(__self__, }], }]) basic_hub = gcp.networkconnectivity.Hub("basic_hub", - name="tf-test-hub_91980", + name="tf-test-hub_37118", description="A sample hub", labels={ "label-two": "value-one", }) primary = gcp.networkconnectivity.Spoke("primary", - name="tf-test-name_37118", + name="tf-test-name_80332", location="us-central1", description="A sample spoke with a linked routher appliance instance", labels={ @@ -951,15 +951,15 @@ def __init__(__self__, import pulumi_gcp as gcp network = gcp.compute.Network("network", - name="tf-test-network_75413", + name="tf-test-network_55138", auto_create_subnetworks=False) subnetwork = gcp.compute.Subnetwork("subnetwork", - name="tf-test-subnet_55138", + name="tf-test-subnet_37559", ip_cidr_range="10.0.0.0/28", region="us-central1", network=network.self_link) instance = gcp.compute.Instance("instance", - name="tf-test-instance_37559", + name="tf-test-instance_91980", machine_type="e2-medium", can_ip_forward=True, zone="us-central1-a", @@ -976,13 +976,13 @@ def __init__(__self__, }], }]) basic_hub = gcp.networkconnectivity.Hub("basic_hub", - name="tf-test-hub_91980", + name="tf-test-hub_37118", description="A sample hub", labels={ "label-two": "value-one", }) primary = gcp.networkconnectivity.Spoke("primary", - name="tf-test-name_37118", + name="tf-test-name_80332", location="us-central1", description="A sample spoke with a linked routher appliance instance", labels={ diff --git a/sdk/python/pulumi_gcp/networksecurity/__init__.py b/sdk/python/pulumi_gcp/networksecurity/__init__.py index 17fa95e0d0..463d2eb92c 100644 --- a/sdk/python/pulumi_gcp/networksecurity/__init__.py +++ b/sdk/python/pulumi_gcp/networksecurity/__init__.py @@ -16,6 +16,10 @@ from .gateway_security_policy import * from .gateway_security_policy_rule import * from .get_address_group_iam_policy import * +from .mirroring_deployment import * +from .mirroring_deployment_group import * +from .mirroring_endpoint_group import * +from .mirroring_endpoint_group_association import * from .security_profile import * from .security_profile_group import * from .server_tls_policy import * diff --git a/sdk/python/pulumi_gcp/networksecurity/_inputs.py b/sdk/python/pulumi_gcp/networksecurity/_inputs.py index a06801ce8a..f62ddf39ef 100644 --- a/sdk/python/pulumi_gcp/networksecurity/_inputs.py +++ b/sdk/python/pulumi_gcp/networksecurity/_inputs.py @@ -39,6 +39,10 @@ 'ClientTlsPolicyServerValidationCaCertificateProviderInstanceArgsDict', 'ClientTlsPolicyServerValidationCaGrpcEndpointArgs', 'ClientTlsPolicyServerValidationCaGrpcEndpointArgsDict', + 'MirroringDeploymentGroupConnectedEndpointGroupArgs', + 'MirroringDeploymentGroupConnectedEndpointGroupArgsDict', + 'MirroringEndpointGroupAssociationLocationsDetailArgs', + 'MirroringEndpointGroupAssociationLocationsDetailArgsDict', 'SecurityProfileThreatPreventionProfileArgs', 'SecurityProfileThreatPreventionProfileArgsDict', 'SecurityProfileThreatPreventionProfileSeverityOverrideArgs', @@ -664,6 +668,117 @@ def target_uri(self, value: pulumi.Input[str]): pulumi.set(self, "target_uri", value) +if not MYPY: + class MirroringDeploymentGroupConnectedEndpointGroupArgsDict(TypedDict): + name: NotRequired[pulumi.Input[str]] + """ + (Output) + Output only. A connected mirroring endpoint group. + """ +elif False: + MirroringDeploymentGroupConnectedEndpointGroupArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class MirroringDeploymentGroupConnectedEndpointGroupArgs: + def __init__(__self__, *, + name: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] name: (Output) + Output only. A connected mirroring endpoint group. + """ + if name is not None: + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + Output only. A connected mirroring endpoint group. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + +if not MYPY: + class MirroringEndpointGroupAssociationLocationsDetailArgsDict(TypedDict): + location: NotRequired[pulumi.Input[str]] + """ + 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`. + + + - - - + """ + state: NotRequired[pulumi.Input[str]] + """ + (Output) + Output only. The association state in this location. + Possible values: + STATE_UNSPECIFIED + ACTIVE + OUT_OF_SYNC + """ +elif False: + MirroringEndpointGroupAssociationLocationsDetailArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class MirroringEndpointGroupAssociationLocationsDetailArgs: + def __init__(__self__, *, + location: Optional[pulumi.Input[str]] = None, + state: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] location: 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`. + + + - - - + :param pulumi.Input[str] state: (Output) + Output only. The association state in this location. + Possible values: + STATE_UNSPECIFIED + ACTIVE + OUT_OF_SYNC + """ + if location is not None: + pulumi.set(__self__, "location", location) + if state is not None: + pulumi.set(__self__, "state", state) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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`. + + + - - - + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def state(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + Output only. The association state in this location. + Possible values: + STATE_UNSPECIFIED + ACTIVE + OUT_OF_SYNC + """ + return pulumi.get(self, "state") + + @state.setter + def state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "state", value) + + if not MYPY: class SecurityProfileThreatPreventionProfileArgsDict(TypedDict): severity_overrides: NotRequired[pulumi.Input[Sequence[pulumi.Input['SecurityProfileThreatPreventionProfileSeverityOverrideArgsDict']]]] diff --git a/sdk/python/pulumi_gcp/networksecurity/mirroring_deployment.py b/sdk/python/pulumi_gcp/networksecurity/mirroring_deployment.py new file mode 100644 index 0000000000..c8f9482dd5 --- /dev/null +++ b/sdk/python/pulumi_gcp/networksecurity/mirroring_deployment.py @@ -0,0 +1,848 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['MirroringDeploymentArgs', 'MirroringDeployment'] + +@pulumi.input_type +class MirroringDeploymentArgs: + def __init__(__self__, *, + forwarding_rule: pulumi.Input[str], + location: pulumi.Input[str], + mirroring_deployment_group: pulumi.Input[str], + mirroring_deployment_id: pulumi.Input[str], + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a MirroringDeployment resource. + :param pulumi.Input[str] forwarding_rule: Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + to. Format is: + projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group: Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + :param pulumi.Input[str] mirroring_deployment_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + pulumi.set(__self__, "forwarding_rule", forwarding_rule) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "mirroring_deployment_group", mirroring_deployment_group) + pulumi.set(__self__, "mirroring_deployment_id", mirroring_deployment_id) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter(name="forwardingRule") + def forwarding_rule(self) -> pulumi.Input[str]: + """ + Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + to. Format is: + projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + """ + return pulumi.get(self, "forwarding_rule") + + @forwarding_rule.setter + def forwarding_rule(self, value: pulumi.Input[str]): + pulumi.set(self, "forwarding_rule", value) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + 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`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="mirroringDeploymentGroup") + def mirroring_deployment_group(self) -> pulumi.Input[str]: + """ + Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + """ + return pulumi.get(self, "mirroring_deployment_group") + + @mirroring_deployment_group.setter + def mirroring_deployment_group(self, value: pulumi.Input[str]): + pulumi.set(self, "mirroring_deployment_group", value) + + @property + @pulumi.getter(name="mirroringDeploymentId") + def mirroring_deployment_id(self) -> pulumi.Input[str]: + """ + Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_id from the method_signature of Create RPC + + + - - - + """ + return pulumi.get(self, "mirroring_deployment_id") + + @mirroring_deployment_id.setter + def mirroring_deployment_id(self, value: pulumi.Input[str]): + pulumi.set(self, "mirroring_deployment_id", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _MirroringDeploymentState: + def __init__(__self__, *, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + forwarding_rule: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group: Optional[pulumi.Input[str]] = None, + mirroring_deployment_id: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering MirroringDeployment resources. + :param pulumi.Input[str] create_time: Output only. [Output only] Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] forwarding_rule: Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + to. Format is: + projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group: Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + :param pulumi.Input[str] mirroring_deployment_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] name: Immutable. Identifier. The name of the MirroringDeployment. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[bool] reconciling: Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + :param pulumi.Input[str] state: Output only. Current state of the deployment. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CREATING + DELETING + OUT_OF_SYNC + DELETE_FAILED + :param pulumi.Input[str] update_time: Output only. [Output only] Update time stamp + """ + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if forwarding_rule is not None: + pulumi.set(__self__, "forwarding_rule", forwarding_rule) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if mirroring_deployment_group is not None: + pulumi.set(__self__, "mirroring_deployment_group", mirroring_deployment_group) + if mirroring_deployment_id is not None: + pulumi.set(__self__, "mirroring_deployment_id", mirroring_deployment_id) + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if reconciling is not None: + pulumi.set(__self__, "reconciling", reconciling) + if state is not None: + pulumi.set(__self__, "state", state) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. [Output only] Create time stamp + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter(name="forwardingRule") + def forwarding_rule(self) -> Optional[pulumi.Input[str]]: + """ + Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + to. Format is: + projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + """ + return pulumi.get(self, "forwarding_rule") + + @forwarding_rule.setter + def forwarding_rule(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "forwarding_rule", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="mirroringDeploymentGroup") + def mirroring_deployment_group(self) -> Optional[pulumi.Input[str]]: + """ + Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + """ + return pulumi.get(self, "mirroring_deployment_group") + + @mirroring_deployment_group.setter + def mirroring_deployment_group(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mirroring_deployment_group", value) + + @property + @pulumi.getter(name="mirroringDeploymentId") + def mirroring_deployment_id(self) -> Optional[pulumi.Input[str]]: + """ + Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_id from the method_signature of Create RPC + + + - - - + """ + return pulumi.get(self, "mirroring_deployment_id") + + @mirroring_deployment_id.setter + def mirroring_deployment_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mirroring_deployment_id", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. Identifier. The name of the MirroringDeployment. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter + def reconciling(self) -> Optional[pulumi.Input[bool]]: + """ + Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + """ + return pulumi.get(self, "reconciling") + + @reconciling.setter + def reconciling(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "reconciling", value) + + @property + @pulumi.getter + def state(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Current state of the deployment. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CREATING + DELETING + OUT_OF_SYNC + DELETE_FAILED + """ + return pulumi.get(self, "state") + + @state.setter + def state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "state", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. [Output only] Update time stamp + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class MirroringDeployment(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + forwarding_rule: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group: Optional[pulumi.Input[str]] = None, + mirroring_deployment_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Network Security Mirroring Deployment Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + network = gcp.compute.Network("network", + name="example-network", + auto_create_subnetworks=False) + subnetwork = gcp.compute.Subnetwork("subnetwork", + name="example-subnet", + region="us-central1", + ip_cidr_range="10.1.0.0/16", + network=network.name) + health_check = gcp.compute.RegionHealthCheck("health_check", + name="example-hc", + region="us-central1", + http_health_check={ + "port": 80, + }) + backend_service = gcp.compute.RegionBackendService("backend_service", + name="example-bs", + region="us-central1", + health_checks=health_check.id, + protocol="UDP", + load_balancing_scheme="INTERNAL") + forwarding_rule = gcp.compute.ForwardingRule("forwarding_rule", + name="example-fwr", + region="us-central1", + network=network.name, + subnetwork=subnetwork.name, + backend_service=backend_service.id, + load_balancing_scheme="INTERNAL", + ports=["6081"], + ip_protocol="UDP", + is_mirroring_collector=True) + deployment_group = gcp.networksecurity.MirroringDeploymentGroup("deployment_group", + mirroring_deployment_group_id="example-dg", + location="global", + network=network.id) + default = gcp.networksecurity.MirroringDeployment("default", + mirroring_deployment_id="example-deployment", + location="us-central1-a", + forwarding_rule=forwarding_rule.id, + mirroring_deployment_group=deployment_group.id, + labels={ + "foo": "bar", + }) + ``` + + ## Import + + MirroringDeployment can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}}` + + * `{{project}}/{{location}}/{{mirroring_deployment_id}}` + + * `{{location}}/{{mirroring_deployment_id}}` + + When using the `pulumi import` command, MirroringDeployment can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{project}}/{{location}}/{{mirroring_deployment_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{location}}/{{mirroring_deployment_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] forwarding_rule: Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + to. Format is: + projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group: Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + :param pulumi.Input[str] mirroring_deployment_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: MirroringDeploymentArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Network Security Mirroring Deployment Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + network = gcp.compute.Network("network", + name="example-network", + auto_create_subnetworks=False) + subnetwork = gcp.compute.Subnetwork("subnetwork", + name="example-subnet", + region="us-central1", + ip_cidr_range="10.1.0.0/16", + network=network.name) + health_check = gcp.compute.RegionHealthCheck("health_check", + name="example-hc", + region="us-central1", + http_health_check={ + "port": 80, + }) + backend_service = gcp.compute.RegionBackendService("backend_service", + name="example-bs", + region="us-central1", + health_checks=health_check.id, + protocol="UDP", + load_balancing_scheme="INTERNAL") + forwarding_rule = gcp.compute.ForwardingRule("forwarding_rule", + name="example-fwr", + region="us-central1", + network=network.name, + subnetwork=subnetwork.name, + backend_service=backend_service.id, + load_balancing_scheme="INTERNAL", + ports=["6081"], + ip_protocol="UDP", + is_mirroring_collector=True) + deployment_group = gcp.networksecurity.MirroringDeploymentGroup("deployment_group", + mirroring_deployment_group_id="example-dg", + location="global", + network=network.id) + default = gcp.networksecurity.MirroringDeployment("default", + mirroring_deployment_id="example-deployment", + location="us-central1-a", + forwarding_rule=forwarding_rule.id, + mirroring_deployment_group=deployment_group.id, + labels={ + "foo": "bar", + }) + ``` + + ## Import + + MirroringDeployment can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}}` + + * `{{project}}/{{location}}/{{mirroring_deployment_id}}` + + * `{{location}}/{{mirroring_deployment_id}}` + + When using the `pulumi import` command, MirroringDeployment can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default projects/{{project}}/locations/{{location}}/mirroringDeployments/{{mirroring_deployment_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{project}}/{{location}}/{{mirroring_deployment_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeployment:MirroringDeployment default {{location}}/{{mirroring_deployment_id}} + ``` + + :param str resource_name: The name of the resource. + :param MirroringDeploymentArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(MirroringDeploymentArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + forwarding_rule: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group: Optional[pulumi.Input[str]] = None, + mirroring_deployment_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = MirroringDeploymentArgs.__new__(MirroringDeploymentArgs) + + if forwarding_rule is None and not opts.urn: + raise TypeError("Missing required property 'forwarding_rule'") + __props__.__dict__["forwarding_rule"] = forwarding_rule + __props__.__dict__["labels"] = labels + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + if mirroring_deployment_group is None and not opts.urn: + raise TypeError("Missing required property 'mirroring_deployment_group'") + __props__.__dict__["mirroring_deployment_group"] = mirroring_deployment_group + if mirroring_deployment_id is None and not opts.urn: + raise TypeError("Missing required property 'mirroring_deployment_id'") + __props__.__dict__["mirroring_deployment_id"] = mirroring_deployment_id + __props__.__dict__["project"] = project + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["name"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["reconciling"] = None + __props__.__dict__["state"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(MirroringDeployment, __self__).__init__( + 'gcp:networksecurity/mirroringDeployment:MirroringDeployment', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + forwarding_rule: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group: Optional[pulumi.Input[str]] = None, + mirroring_deployment_id: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'MirroringDeployment': + """ + Get an existing MirroringDeployment resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] create_time: Output only. [Output only] Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[str] forwarding_rule: Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + to. Format is: + projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group: Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + :param pulumi.Input[str] mirroring_deployment_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] name: Immutable. Identifier. The name of the MirroringDeployment. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[bool] reconciling: Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + :param pulumi.Input[str] state: Output only. Current state of the deployment. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CREATING + DELETING + OUT_OF_SYNC + DELETE_FAILED + :param pulumi.Input[str] update_time: Output only. [Output only] Update time stamp + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _MirroringDeploymentState.__new__(_MirroringDeploymentState) + + __props__.__dict__["create_time"] = create_time + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["forwarding_rule"] = forwarding_rule + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["mirroring_deployment_group"] = mirroring_deployment_group + __props__.__dict__["mirroring_deployment_id"] = mirroring_deployment_id + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["reconciling"] = reconciling + __props__.__dict__["state"] = state + __props__.__dict__["update_time"] = update_time + return MirroringDeployment(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. [Output only] Create time stamp + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter(name="forwardingRule") + def forwarding_rule(self) -> pulumi.Output[str]: + """ + Required. Immutable. The regional load balancer which the mirrored traffic should be forwarded + to. Format is: + projects/{project}/regions/{region}/forwardingRules/{forwardingRule} + """ + return pulumi.get(self, "forwarding_rule") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + 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`. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter(name="mirroringDeploymentGroup") + def mirroring_deployment_group(self) -> pulumi.Output[str]: + """ + Required. Immutable. The Mirroring Deployment Group that this resource is part of. Format is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + """ + return pulumi.get(self, "mirroring_deployment_group") + + @property + @pulumi.getter(name="mirroringDeploymentId") + def mirroring_deployment_id(self) -> pulumi.Output[str]: + """ + Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_id from the method_signature of Create RPC + + + - - - + """ + return pulumi.get(self, "mirroring_deployment_id") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Immutable. Identifier. The name of the MirroringDeployment. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter + def reconciling(self) -> pulumi.Output[bool]: + """ + Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + """ + return pulumi.get(self, "reconciling") + + @property + @pulumi.getter + def state(self) -> pulumi.Output[str]: + """ + Output only. Current state of the deployment. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CREATING + DELETING + OUT_OF_SYNC + DELETE_FAILED + """ + return pulumi.get(self, "state") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. [Output only] Update time stamp + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/networksecurity/mirroring_deployment_group.py b/sdk/python/pulumi_gcp/networksecurity/mirroring_deployment_group.py new file mode 100644 index 0000000000..6438a56950 --- /dev/null +++ b/sdk/python/pulumi_gcp/networksecurity/mirroring_deployment_group.py @@ -0,0 +1,752 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['MirroringDeploymentGroupArgs', 'MirroringDeploymentGroup'] + +@pulumi.input_type +class MirroringDeploymentGroupArgs: + def __init__(__self__, *, + location: pulumi.Input[str], + mirroring_deployment_group_id: pulumi.Input[str], + network: pulumi.Input[str], + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a MirroringDeploymentGroup resource. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_group_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] network: Required. Immutable. The network that is being used for the deployment. Format is: + projects/{project}/global/networks/{network}. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "mirroring_deployment_group_id", mirroring_deployment_group_id) + pulumi.set(__self__, "network", network) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + 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`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="mirroringDeploymentGroupId") + def mirroring_deployment_group_id(self) -> pulumi.Input[str]: + """ + Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_group_id from the method_signature of Create RPC + + + - - - + """ + return pulumi.get(self, "mirroring_deployment_group_id") + + @mirroring_deployment_group_id.setter + def mirroring_deployment_group_id(self, value: pulumi.Input[str]): + pulumi.set(self, "mirroring_deployment_group_id", value) + + @property + @pulumi.getter + def network(self) -> pulumi.Input[str]: + """ + Required. Immutable. The network that is being used for the deployment. Format is: + projects/{project}/global/networks/{network}. + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: pulumi.Input[str]): + pulumi.set(self, "network", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _MirroringDeploymentGroupState: + def __init__(__self__, *, + connected_endpoint_groups: Optional[pulumi.Input[Sequence[pulumi.Input['MirroringDeploymentGroupConnectedEndpointGroupArgs']]]] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group_id: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering MirroringDeploymentGroup resources. + :param pulumi.Input[Sequence[pulumi.Input['MirroringDeploymentGroupConnectedEndpointGroupArgs']]] connected_endpoint_groups: Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + Structure is documented below. + :param pulumi.Input[str] create_time: Output only. [Output only] Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_group_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] name: (Output) + Output only. A connected mirroring endpoint group. + :param pulumi.Input[str] network: Required. Immutable. The network that is being used for the deployment. Format is: + projects/{project}/global/networks/{network}. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[bool] reconciling: Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + :param pulumi.Input[str] state: Output only. Current state of the deployment group. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CREATING + DELETING + :param pulumi.Input[str] update_time: Output only. [Output only] Update time stamp + """ + if connected_endpoint_groups is not None: + pulumi.set(__self__, "connected_endpoint_groups", connected_endpoint_groups) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if mirroring_deployment_group_id is not None: + pulumi.set(__self__, "mirroring_deployment_group_id", mirroring_deployment_group_id) + if name is not None: + pulumi.set(__self__, "name", name) + if network is not None: + pulumi.set(__self__, "network", network) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if reconciling is not None: + pulumi.set(__self__, "reconciling", reconciling) + if state is not None: + pulumi.set(__self__, "state", state) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="connectedEndpointGroups") + def connected_endpoint_groups(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MirroringDeploymentGroupConnectedEndpointGroupArgs']]]]: + """ + Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + Structure is documented below. + """ + return pulumi.get(self, "connected_endpoint_groups") + + @connected_endpoint_groups.setter + def connected_endpoint_groups(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['MirroringDeploymentGroupConnectedEndpointGroupArgs']]]]): + pulumi.set(self, "connected_endpoint_groups", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. [Output only] Create time stamp + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="mirroringDeploymentGroupId") + def mirroring_deployment_group_id(self) -> Optional[pulumi.Input[str]]: + """ + Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_group_id from the method_signature of Create RPC + + + - - - + """ + return pulumi.get(self, "mirroring_deployment_group_id") + + @mirroring_deployment_group_id.setter + def mirroring_deployment_group_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mirroring_deployment_group_id", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + Output only. A connected mirroring endpoint group. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def network(self) -> Optional[pulumi.Input[str]]: + """ + Required. Immutable. The network that is being used for the deployment. Format is: + projects/{project}/global/networks/{network}. + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "network", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter + def reconciling(self) -> Optional[pulumi.Input[bool]]: + """ + Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + """ + return pulumi.get(self, "reconciling") + + @reconciling.setter + def reconciling(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "reconciling", value) + + @property + @pulumi.getter + def state(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Current state of the deployment group. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CREATING + DELETING + """ + return pulumi.get(self, "state") + + @state.setter + def state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "state", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. [Output only] Update time stamp + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class MirroringDeploymentGroup(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group_id: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Network Security Mirroring Deployment Group Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + network = gcp.compute.Network("network", + name="example-network", + auto_create_subnetworks=False) + default = gcp.networksecurity.MirroringDeploymentGroup("default", + mirroring_deployment_group_id="example-dg", + location="global", + network=network.id, + labels={ + "foo": "bar", + }) + ``` + + ## Import + + MirroringDeploymentGroup can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}}` + + * `{{project}}/{{location}}/{{mirroring_deployment_group_id}}` + + * `{{location}}/{{mirroring_deployment_group_id}}` + + When using the `pulumi import` command, MirroringDeploymentGroup can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{project}}/{{location}}/{{mirroring_deployment_group_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{location}}/{{mirroring_deployment_group_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_group_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] network: Required. Immutable. The network that is being used for the deployment. Format is: + projects/{project}/global/networks/{network}. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: MirroringDeploymentGroupArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Network Security Mirroring Deployment Group Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + network = gcp.compute.Network("network", + name="example-network", + auto_create_subnetworks=False) + default = gcp.networksecurity.MirroringDeploymentGroup("default", + mirroring_deployment_group_id="example-dg", + location="global", + network=network.id, + labels={ + "foo": "bar", + }) + ``` + + ## Import + + MirroringDeploymentGroup can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}}` + + * `{{project}}/{{location}}/{{mirroring_deployment_group_id}}` + + * `{{location}}/{{mirroring_deployment_group_id}}` + + When using the `pulumi import` command, MirroringDeploymentGroup can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default projects/{{project}}/locations/{{location}}/mirroringDeploymentGroups/{{mirroring_deployment_group_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{project}}/{{location}}/{{mirroring_deployment_group_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup default {{location}}/{{mirroring_deployment_group_id}} + ``` + + :param str resource_name: The name of the resource. + :param MirroringDeploymentGroupArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(MirroringDeploymentGroupArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group_id: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = MirroringDeploymentGroupArgs.__new__(MirroringDeploymentGroupArgs) + + __props__.__dict__["labels"] = labels + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + if mirroring_deployment_group_id is None and not opts.urn: + raise TypeError("Missing required property 'mirroring_deployment_group_id'") + __props__.__dict__["mirroring_deployment_group_id"] = mirroring_deployment_group_id + if network is None and not opts.urn: + raise TypeError("Missing required property 'network'") + __props__.__dict__["network"] = network + __props__.__dict__["project"] = project + __props__.__dict__["connected_endpoint_groups"] = None + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["name"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["reconciling"] = None + __props__.__dict__["state"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(MirroringDeploymentGroup, __self__).__init__( + 'gcp:networksecurity/mirroringDeploymentGroup:MirroringDeploymentGroup', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + connected_endpoint_groups: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MirroringDeploymentGroupConnectedEndpointGroupArgs', 'MirroringDeploymentGroupConnectedEndpointGroupArgsDict']]]]] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group_id: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'MirroringDeploymentGroup': + """ + Get an existing MirroringDeploymentGroup resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Sequence[pulumi.Input[Union['MirroringDeploymentGroupConnectedEndpointGroupArgs', 'MirroringDeploymentGroupConnectedEndpointGroupArgsDict']]]] connected_endpoint_groups: Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + Structure is documented below. + :param pulumi.Input[str] create_time: Output only. [Output only] Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_group_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] name: (Output) + Output only. A connected mirroring endpoint group. + :param pulumi.Input[str] network: Required. Immutable. The network that is being used for the deployment. Format is: + projects/{project}/global/networks/{network}. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[bool] reconciling: Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + :param pulumi.Input[str] state: Output only. Current state of the deployment group. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CREATING + DELETING + :param pulumi.Input[str] update_time: Output only. [Output only] Update time stamp + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _MirroringDeploymentGroupState.__new__(_MirroringDeploymentGroupState) + + __props__.__dict__["connected_endpoint_groups"] = connected_endpoint_groups + __props__.__dict__["create_time"] = create_time + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["mirroring_deployment_group_id"] = mirroring_deployment_group_id + __props__.__dict__["name"] = name + __props__.__dict__["network"] = network + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["reconciling"] = reconciling + __props__.__dict__["state"] = state + __props__.__dict__["update_time"] = update_time + return MirroringDeploymentGroup(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="connectedEndpointGroups") + def connected_endpoint_groups(self) -> pulumi.Output[Sequence['outputs.MirroringDeploymentGroupConnectedEndpointGroup']]: + """ + Output only. The list of Mirroring Endpoint Groups that are connected to this resource. + Structure is documented below. + """ + return pulumi.get(self, "connected_endpoint_groups") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. [Output only] Create time stamp + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + 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`. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter(name="mirroringDeploymentGroupId") + def mirroring_deployment_group_id(self) -> pulumi.Output[str]: + """ + Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_deployment_group_id from the method_signature of Create RPC + + + - - - + """ + return pulumi.get(self, "mirroring_deployment_group_id") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + (Output) + Output only. A connected mirroring endpoint group. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def network(self) -> pulumi.Output[str]: + """ + Required. Immutable. The network that is being used for the deployment. Format is: + projects/{project}/global/networks/{network}. + """ + return pulumi.get(self, "network") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter + def reconciling(self) -> pulumi.Output[bool]: + """ + Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + """ + return pulumi.get(self, "reconciling") + + @property + @pulumi.getter + def state(self) -> pulumi.Output[str]: + """ + Output only. Current state of the deployment group. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CREATING + DELETING + """ + return pulumi.get(self, "state") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. [Output only] Update time stamp + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/networksecurity/mirroring_endpoint_group.py b/sdk/python/pulumi_gcp/networksecurity/mirroring_endpoint_group.py new file mode 100644 index 0000000000..91bb8eb307 --- /dev/null +++ b/sdk/python/pulumi_gcp/networksecurity/mirroring_endpoint_group.py @@ -0,0 +1,737 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities + +__all__ = ['MirroringEndpointGroupArgs', 'MirroringEndpointGroup'] + +@pulumi.input_type +class MirroringEndpointGroupArgs: + def __init__(__self__, *, + location: pulumi.Input[str], + mirroring_deployment_group: pulumi.Input[str], + mirroring_endpoint_group_id: pulumi.Input[str], + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a MirroringEndpointGroup resource. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group: Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + :param pulumi.Input[str] mirroring_endpoint_group_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "mirroring_deployment_group", mirroring_deployment_group) + pulumi.set(__self__, "mirroring_endpoint_group_id", mirroring_endpoint_group_id) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + 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`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="mirroringDeploymentGroup") + def mirroring_deployment_group(self) -> pulumi.Input[str]: + """ + Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + """ + return pulumi.get(self, "mirroring_deployment_group") + + @mirroring_deployment_group.setter + def mirroring_deployment_group(self, value: pulumi.Input[str]): + pulumi.set(self, "mirroring_deployment_group", value) + + @property + @pulumi.getter(name="mirroringEndpointGroupId") + def mirroring_endpoint_group_id(self) -> pulumi.Input[str]: + """ + Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_id from the method_signature of Create RPC + + + - - - + """ + return pulumi.get(self, "mirroring_endpoint_group_id") + + @mirroring_endpoint_group_id.setter + def mirroring_endpoint_group_id(self, value: pulumi.Input[str]): + pulumi.set(self, "mirroring_endpoint_group_id", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _MirroringEndpointGroupState: + def __init__(__self__, *, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group_id: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering MirroringEndpointGroup resources. + :param pulumi.Input[str] create_time: Output only. [Output only] Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group: Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + :param pulumi.Input[str] mirroring_endpoint_group_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] name: Immutable. Identifier. The name of the MirroringEndpointGroup. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[bool] reconciling: Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + :param pulumi.Input[str] state: Output only. Current state of the endpoint group. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CLOSED + CREATING + DELETING + OUT_OF_SYNC + :param pulumi.Input[str] update_time: Output only. [Output only] Update time stamp + """ + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if mirroring_deployment_group is not None: + pulumi.set(__self__, "mirroring_deployment_group", mirroring_deployment_group) + if mirroring_endpoint_group_id is not None: + pulumi.set(__self__, "mirroring_endpoint_group_id", mirroring_endpoint_group_id) + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if reconciling is not None: + pulumi.set(__self__, "reconciling", reconciling) + if state is not None: + pulumi.set(__self__, "state", state) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. [Output only] Create time stamp + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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`. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="mirroringDeploymentGroup") + def mirroring_deployment_group(self) -> Optional[pulumi.Input[str]]: + """ + Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + """ + return pulumi.get(self, "mirroring_deployment_group") + + @mirroring_deployment_group.setter + def mirroring_deployment_group(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mirroring_deployment_group", value) + + @property + @pulumi.getter(name="mirroringEndpointGroupId") + def mirroring_endpoint_group_id(self) -> Optional[pulumi.Input[str]]: + """ + Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_id from the method_signature of Create RPC + + + - - - + """ + return pulumi.get(self, "mirroring_endpoint_group_id") + + @mirroring_endpoint_group_id.setter + def mirroring_endpoint_group_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mirroring_endpoint_group_id", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. Identifier. The name of the MirroringEndpointGroup. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter + def reconciling(self) -> Optional[pulumi.Input[bool]]: + """ + Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + """ + return pulumi.get(self, "reconciling") + + @reconciling.setter + def reconciling(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "reconciling", value) + + @property + @pulumi.getter + def state(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Current state of the endpoint group. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CLOSED + CREATING + DELETING + OUT_OF_SYNC + """ + return pulumi.get(self, "state") + + @state.setter + def state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "state", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. [Output only] Update time stamp + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class MirroringEndpointGroup(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Network Security Mirroring Endpoint Group Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + network = gcp.compute.Network("network", + name="example-network", + auto_create_subnetworks=False) + deployment_group = gcp.networksecurity.MirroringDeploymentGroup("deployment_group", + mirroring_deployment_group_id="example-dg", + location="global", + network=network.id) + default = gcp.networksecurity.MirroringEndpointGroup("default", + mirroring_endpoint_group_id="example-eg", + location="global", + mirroring_deployment_group=deployment_group.id, + labels={ + "foo": "bar", + }) + ``` + + ## Import + + MirroringEndpointGroup can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}}` + + * `{{project}}/{{location}}/{{mirroring_endpoint_group_id}}` + + * `{{location}}/{{mirroring_endpoint_group_id}}` + + When using the `pulumi import` command, MirroringEndpointGroup can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{project}}/{{location}}/{{mirroring_endpoint_group_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{location}}/{{mirroring_endpoint_group_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group: Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + :param pulumi.Input[str] mirroring_endpoint_group_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: MirroringEndpointGroupArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Network Security Mirroring Endpoint Group Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + network = gcp.compute.Network("network", + name="example-network", + auto_create_subnetworks=False) + deployment_group = gcp.networksecurity.MirroringDeploymentGroup("deployment_group", + mirroring_deployment_group_id="example-dg", + location="global", + network=network.id) + default = gcp.networksecurity.MirroringEndpointGroup("default", + mirroring_endpoint_group_id="example-eg", + location="global", + mirroring_deployment_group=deployment_group.id, + labels={ + "foo": "bar", + }) + ``` + + ## Import + + MirroringEndpointGroup can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}}` + + * `{{project}}/{{location}}/{{mirroring_endpoint_group_id}}` + + * `{{location}}/{{mirroring_endpoint_group_id}}` + + When using the `pulumi import` command, MirroringEndpointGroup can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default projects/{{project}}/locations/{{location}}/mirroringEndpointGroups/{{mirroring_endpoint_group_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{project}}/{{location}}/{{mirroring_endpoint_group_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup default {{location}}/{{mirroring_endpoint_group_id}} + ``` + + :param str resource_name: The name of the resource. + :param MirroringEndpointGroupArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(MirroringEndpointGroupArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = MirroringEndpointGroupArgs.__new__(MirroringEndpointGroupArgs) + + __props__.__dict__["labels"] = labels + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + if mirroring_deployment_group is None and not opts.urn: + raise TypeError("Missing required property 'mirroring_deployment_group'") + __props__.__dict__["mirroring_deployment_group"] = mirroring_deployment_group + if mirroring_endpoint_group_id is None and not opts.urn: + raise TypeError("Missing required property 'mirroring_endpoint_group_id'") + __props__.__dict__["mirroring_endpoint_group_id"] = mirroring_endpoint_group_id + __props__.__dict__["project"] = project + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["name"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["reconciling"] = None + __props__.__dict__["state"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(MirroringEndpointGroup, __self__).__init__( + 'gcp:networksecurity/mirroringEndpointGroup:MirroringEndpointGroup', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_deployment_group: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group_id: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'MirroringEndpointGroup': + """ + Get an existing MirroringEndpointGroup resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] create_time: Output only. [Output only] Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + :param pulumi.Input[str] mirroring_deployment_group: Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + :param pulumi.Input[str] mirroring_endpoint_group_id: Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_id from the method_signature of Create RPC + + + - - - + :param pulumi.Input[str] name: Immutable. Identifier. The name of the MirroringEndpointGroup. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[bool] reconciling: Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + :param pulumi.Input[str] state: Output only. Current state of the endpoint group. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CLOSED + CREATING + DELETING + OUT_OF_SYNC + :param pulumi.Input[str] update_time: Output only. [Output only] Update time stamp + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _MirroringEndpointGroupState.__new__(_MirroringEndpointGroupState) + + __props__.__dict__["create_time"] = create_time + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["mirroring_deployment_group"] = mirroring_deployment_group + __props__.__dict__["mirroring_endpoint_group_id"] = mirroring_endpoint_group_id + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["reconciling"] = reconciling + __props__.__dict__["state"] = state + __props__.__dict__["update_time"] = update_time + return MirroringEndpointGroup(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. [Output only] Create time stamp + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + 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`. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter(name="mirroringDeploymentGroup") + def mirroring_deployment_group(self) -> pulumi.Output[str]: + """ + Required. Immutable. The Mirroring Deployment Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringDeploymentGroups/{mirroringDeploymentGroup}` + """ + return pulumi.get(self, "mirroring_deployment_group") + + @property + @pulumi.getter(name="mirroringEndpointGroupId") + def mirroring_endpoint_group_id(self) -> pulumi.Output[str]: + """ + Required. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_id from the method_signature of Create RPC + + + - - - + """ + return pulumi.get(self, "mirroring_endpoint_group_id") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Immutable. Identifier. The name of the MirroringEndpointGroup. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter + def reconciling(self) -> pulumi.Output[bool]: + """ + Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + """ + return pulumi.get(self, "reconciling") + + @property + @pulumi.getter + def state(self) -> pulumi.Output[str]: + """ + Output only. Current state of the endpoint group. + Possible values: + STATE_UNSPECIFIED + ACTIVE + CLOSED + CREATING + DELETING + OUT_OF_SYNC + """ + return pulumi.get(self, "state") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. [Output only] Update time stamp + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/networksecurity/mirroring_endpoint_group_association.py b/sdk/python/pulumi_gcp/networksecurity/mirroring_endpoint_group_association.py new file mode 100644 index 0000000000..afd0199050 --- /dev/null +++ b/sdk/python/pulumi_gcp/networksecurity/mirroring_endpoint_group_association.py @@ -0,0 +1,840 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['MirroringEndpointGroupAssociationArgs', 'MirroringEndpointGroupAssociation'] + +@pulumi.input_type +class MirroringEndpointGroupAssociationArgs: + def __init__(__self__, *, + location: pulumi.Input[str], + mirroring_endpoint_group: pulumi.Input[str], + network: pulumi.Input[str], + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + mirroring_endpoint_group_association_id: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a MirroringEndpointGroupAssociation resource. + :param pulumi.Input[str] location: 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`. + + + - - - + :param pulumi.Input[str] mirroring_endpoint_group: Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + :param pulumi.Input[str] network: Required. Immutable. The VPC network associated. Format: + projects/{project}/global/networks/{network}. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] mirroring_endpoint_group_association_id: Optional. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_association_id from the method_signature of Create + RPC + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "mirroring_endpoint_group", mirroring_endpoint_group) + pulumi.set(__self__, "network", network) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if mirroring_endpoint_group_association_id is not None: + pulumi.set(__self__, "mirroring_endpoint_group_association_id", mirroring_endpoint_group_association_id) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + 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`. + + + - - - + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="mirroringEndpointGroup") + def mirroring_endpoint_group(self) -> pulumi.Input[str]: + """ + Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + """ + return pulumi.get(self, "mirroring_endpoint_group") + + @mirroring_endpoint_group.setter + def mirroring_endpoint_group(self, value: pulumi.Input[str]): + pulumi.set(self, "mirroring_endpoint_group", value) + + @property + @pulumi.getter + def network(self) -> pulumi.Input[str]: + """ + Required. Immutable. The VPC network associated. Format: + projects/{project}/global/networks/{network}. + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: pulumi.Input[str]): + pulumi.set(self, "network", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter(name="mirroringEndpointGroupAssociationId") + def mirroring_endpoint_group_association_id(self) -> Optional[pulumi.Input[str]]: + """ + Optional. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_association_id from the method_signature of Create + RPC + """ + return pulumi.get(self, "mirroring_endpoint_group_association_id") + + @mirroring_endpoint_group_association_id.setter + def mirroring_endpoint_group_association_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mirroring_endpoint_group_association_id", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _MirroringEndpointGroupAssociationState: + def __init__(__self__, *, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + locations_details: Optional[pulumi.Input[Sequence[pulumi.Input['MirroringEndpointGroupAssociationLocationsDetailArgs']]]] = None, + mirroring_endpoint_group: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group_association_id: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering MirroringEndpointGroupAssociation resources. + :param pulumi.Input[str] create_time: Output only. [Output only] Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + + + - - - + :param pulumi.Input[Sequence[pulumi.Input['MirroringEndpointGroupAssociationLocationsDetailArgs']]] locations_details: Output only. The list of locations that this association is in and its details. + Structure is documented below. + :param pulumi.Input[str] mirroring_endpoint_group: Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + :param pulumi.Input[str] mirroring_endpoint_group_association_id: Optional. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_association_id from the method_signature of Create + RPC + :param pulumi.Input[str] name: Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + :param pulumi.Input[str] network: Required. Immutable. The VPC network associated. Format: + projects/{project}/global/networks/{network}. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[bool] reconciling: Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + :param pulumi.Input[str] state: (Output) + Output only. The association state in this location. + Possible values: + STATE_UNSPECIFIED + ACTIVE + OUT_OF_SYNC + :param pulumi.Input[str] update_time: Output only. [Output only] Update time stamp + """ + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if effective_labels is not None: + pulumi.set(__self__, "effective_labels", effective_labels) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if locations_details is not None: + pulumi.set(__self__, "locations_details", locations_details) + if mirroring_endpoint_group is not None: + pulumi.set(__self__, "mirroring_endpoint_group", mirroring_endpoint_group) + if mirroring_endpoint_group_association_id is not None: + pulumi.set(__self__, "mirroring_endpoint_group_association_id", mirroring_endpoint_group_association_id) + if name is not None: + pulumi.set(__self__, "name", name) + if network is not None: + pulumi.set(__self__, "network", network) + if project is not None: + pulumi.set(__self__, "project", project) + if pulumi_labels is not None: + pulumi.set(__self__, "pulumi_labels", pulumi_labels) + if reconciling is not None: + pulumi.set(__self__, "reconciling", reconciling) + if state is not None: + pulumi.set(__self__, "state", state) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. [Output only] Create time stamp + """ + return pulumi.get(self, "create_time") + + @create_time.setter + def create_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "create_time", value) + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @effective_labels.setter + def effective_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "effective_labels", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @labels.setter + def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "labels", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + 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`. + + + - - - + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="locationsDetails") + def locations_details(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['MirroringEndpointGroupAssociationLocationsDetailArgs']]]]: + """ + Output only. The list of locations that this association is in and its details. + Structure is documented below. + """ + return pulumi.get(self, "locations_details") + + @locations_details.setter + def locations_details(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['MirroringEndpointGroupAssociationLocationsDetailArgs']]]]): + pulumi.set(self, "locations_details", value) + + @property + @pulumi.getter(name="mirroringEndpointGroup") + def mirroring_endpoint_group(self) -> Optional[pulumi.Input[str]]: + """ + Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + """ + return pulumi.get(self, "mirroring_endpoint_group") + + @mirroring_endpoint_group.setter + def mirroring_endpoint_group(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mirroring_endpoint_group", value) + + @property + @pulumi.getter(name="mirroringEndpointGroupAssociationId") + def mirroring_endpoint_group_association_id(self) -> Optional[pulumi.Input[str]]: + """ + Optional. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_association_id from the method_signature of Create + RPC + """ + return pulumi.get(self, "mirroring_endpoint_group_association_id") + + @mirroring_endpoint_group_association_id.setter + def mirroring_endpoint_group_association_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "mirroring_endpoint_group_association_id", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def network(self) -> Optional[pulumi.Input[str]]: + """ + Required. Immutable. The VPC network associated. Format: + projects/{project}/global/networks/{network}. + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "network", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @pulumi_labels.setter + def pulumi_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "pulumi_labels", value) + + @property + @pulumi.getter + def reconciling(self) -> Optional[pulumi.Input[bool]]: + """ + Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + """ + return pulumi.get(self, "reconciling") + + @reconciling.setter + def reconciling(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "reconciling", value) + + @property + @pulumi.getter + def state(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + Output only. The association state in this location. + Possible values: + STATE_UNSPECIFIED + ACTIVE + OUT_OF_SYNC + """ + return pulumi.get(self, "state") + + @state.setter + def state(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "state", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. [Output only] Update time stamp + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +class MirroringEndpointGroupAssociation(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group_association_id: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Network Security Mirroring Endpoint Group Association Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + producer_network = gcp.compute.Network("producer_network", + name="example-prod-network", + auto_create_subnetworks=False) + consumer_network = gcp.compute.Network("consumer_network", + name="example-cons-network", + auto_create_subnetworks=False) + deployment_group = gcp.networksecurity.MirroringDeploymentGroup("deployment_group", + mirroring_deployment_group_id="example-dg", + location="global", + network=producer_network.id) + endpoint_group = gcp.networksecurity.MirroringEndpointGroup("endpoint_group", + mirroring_endpoint_group_id="example-eg", + location="global", + mirroring_deployment_group=deployment_group.id) + default = gcp.networksecurity.MirroringEndpointGroupAssociation("default", + mirroring_endpoint_group_association_id="example-ega", + location="global", + network=consumer_network.id, + mirroring_endpoint_group=endpoint_group.id, + labels={ + "foo": "bar", + }) + ``` + + ## Import + + MirroringEndpointGroupAssociation can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}}` + + * `{{project}}/{{location}}/{{mirroring_endpoint_group_association_id}}` + + * `{{location}}/{{mirroring_endpoint_group_association_id}}` + + When using the `pulumi import` command, MirroringEndpointGroupAssociation can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{project}}/{{location}}/{{mirroring_endpoint_group_association_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{location}}/{{mirroring_endpoint_group_association_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + + + - - - + :param pulumi.Input[str] mirroring_endpoint_group: Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + :param pulumi.Input[str] mirroring_endpoint_group_association_id: Optional. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_association_id from the method_signature of Create + RPC + :param pulumi.Input[str] network: Required. Immutable. The VPC network associated. Format: + projects/{project}/global/networks/{network}. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: MirroringEndpointGroupAssociationArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Network Security Mirroring Endpoint Group Association Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + producer_network = gcp.compute.Network("producer_network", + name="example-prod-network", + auto_create_subnetworks=False) + consumer_network = gcp.compute.Network("consumer_network", + name="example-cons-network", + auto_create_subnetworks=False) + deployment_group = gcp.networksecurity.MirroringDeploymentGroup("deployment_group", + mirroring_deployment_group_id="example-dg", + location="global", + network=producer_network.id) + endpoint_group = gcp.networksecurity.MirroringEndpointGroup("endpoint_group", + mirroring_endpoint_group_id="example-eg", + location="global", + mirroring_deployment_group=deployment_group.id) + default = gcp.networksecurity.MirroringEndpointGroupAssociation("default", + mirroring_endpoint_group_association_id="example-ega", + location="global", + network=consumer_network.id, + mirroring_endpoint_group=endpoint_group.id, + labels={ + "foo": "bar", + }) + ``` + + ## Import + + MirroringEndpointGroupAssociation can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}}` + + * `{{project}}/{{location}}/{{mirroring_endpoint_group_association_id}}` + + * `{{location}}/{{mirroring_endpoint_group_association_id}}` + + When using the `pulumi import` command, MirroringEndpointGroupAssociation can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default projects/{{project}}/locations/{{location}}/mirroringEndpointGroupAssociations/{{mirroring_endpoint_group_association_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{project}}/{{location}}/{{mirroring_endpoint_group_association_id}} + ``` + + ```sh + $ pulumi import gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation default {{location}}/{{mirroring_endpoint_group_association_id}} + ``` + + :param str resource_name: The name of the resource. + :param MirroringEndpointGroupAssociationArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(MirroringEndpointGroupAssociationArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group_association_id: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = MirroringEndpointGroupAssociationArgs.__new__(MirroringEndpointGroupAssociationArgs) + + __props__.__dict__["labels"] = labels + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + if mirroring_endpoint_group is None and not opts.urn: + raise TypeError("Missing required property 'mirroring_endpoint_group'") + __props__.__dict__["mirroring_endpoint_group"] = mirroring_endpoint_group + __props__.__dict__["mirroring_endpoint_group_association_id"] = mirroring_endpoint_group_association_id + if network is None and not opts.urn: + raise TypeError("Missing required property 'network'") + __props__.__dict__["network"] = network + __props__.__dict__["project"] = project + __props__.__dict__["create_time"] = None + __props__.__dict__["effective_labels"] = None + __props__.__dict__["locations_details"] = None + __props__.__dict__["name"] = None + __props__.__dict__["pulumi_labels"] = None + __props__.__dict__["reconciling"] = None + __props__.__dict__["state"] = None + __props__.__dict__["update_time"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["effectiveLabels", "pulumiLabels"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(MirroringEndpointGroupAssociation, __self__).__init__( + 'gcp:networksecurity/mirroringEndpointGroupAssociation:MirroringEndpointGroupAssociation', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + create_time: Optional[pulumi.Input[str]] = None, + effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + locations_details: Optional[pulumi.Input[Sequence[pulumi.Input[Union['MirroringEndpointGroupAssociationLocationsDetailArgs', 'MirroringEndpointGroupAssociationLocationsDetailArgsDict']]]]] = None, + mirroring_endpoint_group: Optional[pulumi.Input[str]] = None, + mirroring_endpoint_group_association_id: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + pulumi_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + state: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'MirroringEndpointGroupAssociation': + """ + Get an existing MirroringEndpointGroupAssociation resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] create_time: Output only. [Output only] Create time stamp + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] effective_labels: All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] 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. + :param pulumi.Input[str] location: 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`. + + + - - - + :param pulumi.Input[Sequence[pulumi.Input[Union['MirroringEndpointGroupAssociationLocationsDetailArgs', 'MirroringEndpointGroupAssociationLocationsDetailArgsDict']]]] locations_details: Output only. The list of locations that this association is in and its details. + Structure is documented below. + :param pulumi.Input[str] mirroring_endpoint_group: Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + :param pulumi.Input[str] mirroring_endpoint_group_association_id: Optional. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_association_id from the method_signature of Create + RPC + :param pulumi.Input[str] name: Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + :param pulumi.Input[str] network: Required. Immutable. The VPC network associated. Format: + projects/{project}/global/networks/{network}. + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] pulumi_labels: The combination of labels configured directly on the resource + and default labels configured on the provider. + :param pulumi.Input[bool] reconciling: Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + :param pulumi.Input[str] state: (Output) + Output only. The association state in this location. + Possible values: + STATE_UNSPECIFIED + ACTIVE + OUT_OF_SYNC + :param pulumi.Input[str] update_time: Output only. [Output only] Update time stamp + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _MirroringEndpointGroupAssociationState.__new__(_MirroringEndpointGroupAssociationState) + + __props__.__dict__["create_time"] = create_time + __props__.__dict__["effective_labels"] = effective_labels + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["locations_details"] = locations_details + __props__.__dict__["mirroring_endpoint_group"] = mirroring_endpoint_group + __props__.__dict__["mirroring_endpoint_group_association_id"] = mirroring_endpoint_group_association_id + __props__.__dict__["name"] = name + __props__.__dict__["network"] = network + __props__.__dict__["project"] = project + __props__.__dict__["pulumi_labels"] = pulumi_labels + __props__.__dict__["reconciling"] = reconciling + __props__.__dict__["state"] = state + __props__.__dict__["update_time"] = update_time + return MirroringEndpointGroupAssociation(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. [Output only] Create time stamp + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter(name="effectiveLabels") + def effective_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services. + """ + return pulumi.get(self, "effective_labels") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + 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. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + 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`. + + + - - - + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter(name="locationsDetails") + def locations_details(self) -> pulumi.Output[Sequence['outputs.MirroringEndpointGroupAssociationLocationsDetail']]: + """ + Output only. The list of locations that this association is in and its details. + Structure is documented below. + """ + return pulumi.get(self, "locations_details") + + @property + @pulumi.getter(name="mirroringEndpointGroup") + def mirroring_endpoint_group(self) -> pulumi.Output[str]: + """ + Required. Immutable. The Mirroring Endpoint Group that this resource is connected to. Format + is: + `projects/{project}/locations/global/mirroringEndpointGroups/{mirroringEndpointGroup}` + """ + return pulumi.get(self, "mirroring_endpoint_group") + + @property + @pulumi.getter(name="mirroringEndpointGroupAssociationId") + def mirroring_endpoint_group_association_id(self) -> pulumi.Output[Optional[str]]: + """ + Optional. Id of the requesting object + If auto-generating Id server-side, remove this field and + mirroring_endpoint_group_association_id from the method_signature of Create + RPC + """ + return pulumi.get(self, "mirroring_endpoint_group_association_id") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Immutable. Identifier. The name of the MirroringEndpointGroupAssociation. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def network(self) -> pulumi.Output[str]: + """ + Required. Immutable. The VPC network associated. Format: + projects/{project}/global/networks/{network}. + """ + return pulumi.get(self, "network") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="pulumiLabels") + def pulumi_labels(self) -> pulumi.Output[Mapping[str, str]]: + """ + The combination of labels configured directly on the resource + and default labels configured on the provider. + """ + return pulumi.get(self, "pulumi_labels") + + @property + @pulumi.getter + def reconciling(self) -> pulumi.Output[bool]: + """ + Output only. Whether reconciling is in progress, recommended per + https://google.aip.dev/128. + """ + return pulumi.get(self, "reconciling") + + @property + @pulumi.getter + def state(self) -> pulumi.Output[str]: + """ + (Output) + Output only. The association state in this location. + Possible values: + STATE_UNSPECIFIED + ACTIVE + OUT_OF_SYNC + """ + return pulumi.get(self, "state") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. [Output only] Update time stamp + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/networksecurity/outputs.py b/sdk/python/pulumi_gcp/networksecurity/outputs.py index aa1facc996..03488fb78c 100644 --- a/sdk/python/pulumi_gcp/networksecurity/outputs.py +++ b/sdk/python/pulumi_gcp/networksecurity/outputs.py @@ -28,6 +28,8 @@ 'ClientTlsPolicyServerValidationCa', 'ClientTlsPolicyServerValidationCaCertificateProviderInstance', 'ClientTlsPolicyServerValidationCaGrpcEndpoint', + 'MirroringDeploymentGroupConnectedEndpointGroup', + 'MirroringEndpointGroupAssociationLocationsDetail', 'SecurityProfileThreatPreventionProfile', 'SecurityProfileThreatPreventionProfileSeverityOverride', 'SecurityProfileThreatPreventionProfileThreatOverride', @@ -554,6 +556,74 @@ def target_uri(self) -> str: return pulumi.get(self, "target_uri") +@pulumi.output_type +class MirroringDeploymentGroupConnectedEndpointGroup(dict): + def __init__(__self__, *, + name: Optional[str] = None): + """ + :param str name: (Output) + Output only. A connected mirroring endpoint group. + """ + if name is not None: + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def name(self) -> Optional[str]: + """ + (Output) + Output only. A connected mirroring endpoint group. + """ + return pulumi.get(self, "name") + + +@pulumi.output_type +class MirroringEndpointGroupAssociationLocationsDetail(dict): + def __init__(__self__, *, + location: Optional[str] = None, + state: Optional[str] = None): + """ + :param str location: 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`. + + + - - - + :param str state: (Output) + Output only. The association state in this location. + Possible values: + STATE_UNSPECIFIED + ACTIVE + OUT_OF_SYNC + """ + if location is not None: + pulumi.set(__self__, "location", location) + if state is not None: + pulumi.set(__self__, "state", state) + + @property + @pulumi.getter + def location(self) -> Optional[str]: + """ + 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`. + + + - - - + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def state(self) -> Optional[str]: + """ + (Output) + Output only. The association state in this location. + Possible values: + STATE_UNSPECIFIED + ACTIVE + OUT_OF_SYNC + """ + return pulumi.get(self, "state") + + @pulumi.output_type class SecurityProfileThreatPreventionProfile(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/oracledatabase/autonomous_database.py b/sdk/python/pulumi_gcp/oracledatabase/autonomous_database.py index 1326431bf4..cec9af9572 100644 --- a/sdk/python/pulumi_gcp/oracledatabase/autonomous_database.py +++ b/sdk/python/pulumi_gcp/oracledatabase/autonomous_database.py @@ -28,6 +28,7 @@ def __init__(__self__, *, network: pulumi.Input[str], properties: pulumi.Input['AutonomousDatabasePropertiesArgs'], admin_password: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None): @@ -60,6 +61,8 @@ def __init__(__self__, *, pulumi.set(__self__, "properties", properties) if admin_password is not None: pulumi.set(__self__, "admin_password", admin_password) + if deletion_protection is not None: + pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name is not None: pulumi.set(__self__, "display_name", display_name) if labels is not None: @@ -158,6 +161,15 @@ def admin_password(self) -> Optional[pulumi.Input[str]]: def admin_password(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "admin_password", value) + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> Optional[pulumi.Input[bool]]: + return pulumi.get(self, "deletion_protection") + + @deletion_protection.setter + def deletion_protection(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "deletion_protection", value) + @property @pulumi.getter(name="displayName") def display_name(self) -> Optional[pulumi.Input[str]]: @@ -202,6 +214,7 @@ def __init__(__self__, *, cidr: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, database: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, entitlement_id: Optional[pulumi.Input[str]] = None, @@ -251,6 +264,8 @@ def __init__(__self__, *, pulumi.set(__self__, "create_time", create_time) if database is not None: pulumi.set(__self__, "database", database) + if deletion_protection is not None: + pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name is not None: pulumi.set(__self__, "display_name", display_name) if effective_labels is not None: @@ -337,6 +352,15 @@ def database(self) -> Optional[pulumi.Input[str]]: def database(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "database", value) + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> Optional[pulumi.Input[bool]]: + return pulumi.get(self, "deletion_protection") + + @deletion_protection.setter + def deletion_protection(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "deletion_protection", value) + @property @pulumi.getter(name="displayName") def display_name(self) -> Optional[pulumi.Input[str]]: @@ -471,6 +495,7 @@ def __init__(__self__, autonomous_database_id: Optional[pulumi.Input[str]] = None, cidr: Optional[pulumi.Input[str]] = None, database: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, @@ -511,7 +536,8 @@ def __init__(__self__, "db_version": "19c", "db_workload": "OLTP", "license_type": "LICENSE_INCLUDED", - }) + }, + deletion_protection=True) ``` ### Oracledatabase Autonomous Database Full @@ -553,7 +579,8 @@ def __init__(__self__, }], "private_endpoint_ip": "10.5.0.11", "private_endpoint_label": "testhost", - }) + }, + deletion_protection=True) ``` ## Import @@ -640,7 +667,8 @@ def __init__(__self__, "db_version": "19c", "db_workload": "OLTP", "license_type": "LICENSE_INCLUDED", - }) + }, + deletion_protection=True) ``` ### Oracledatabase Autonomous Database Full @@ -682,7 +710,8 @@ def __init__(__self__, }], "private_endpoint_ip": "10.5.0.11", "private_endpoint_label": "testhost", - }) + }, + deletion_protection=True) ``` ## Import @@ -728,6 +757,7 @@ def _internal_init(__self__, autonomous_database_id: Optional[pulumi.Input[str]] = None, cidr: Optional[pulumi.Input[str]] = None, database: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, location: Optional[pulumi.Input[str]] = None, @@ -753,6 +783,7 @@ def _internal_init(__self__, if database is None and not opts.urn: raise TypeError("Missing required property 'database'") __props__.__dict__["database"] = database + __props__.__dict__["deletion_protection"] = deletion_protection __props__.__dict__["display_name"] = display_name __props__.__dict__["labels"] = labels if location is None and not opts.urn: @@ -787,6 +818,7 @@ def get(resource_name: str, cidr: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, database: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, entitlement_id: Optional[pulumi.Input[str]] = None, @@ -840,6 +872,7 @@ def get(resource_name: str, __props__.__dict__["cidr"] = cidr __props__.__dict__["create_time"] = create_time __props__.__dict__["database"] = database + __props__.__dict__["deletion_protection"] = deletion_protection __props__.__dict__["display_name"] = display_name __props__.__dict__["effective_labels"] = effective_labels __props__.__dict__["entitlement_id"] = entitlement_id @@ -897,6 +930,11 @@ def database(self) -> pulumi.Output[str]: """ return pulumi.get(self, "database") + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> pulumi.Output[Optional[bool]]: + return pulumi.get(self, "deletion_protection") + @property @pulumi.getter(name="displayName") def display_name(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumi_gcp/oracledatabase/cloud_exadata_infrastructure.py b/sdk/python/pulumi_gcp/oracledatabase/cloud_exadata_infrastructure.py index 9ae9776ede..8802309f51 100644 --- a/sdk/python/pulumi_gcp/oracledatabase/cloud_exadata_infrastructure.py +++ b/sdk/python/pulumi_gcp/oracledatabase/cloud_exadata_infrastructure.py @@ -23,6 +23,7 @@ class CloudExadataInfrastructureArgs: def __init__(__self__, *, cloud_exadata_infrastructure_id: pulumi.Input[str], location: pulumi.Input[str], + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, gcp_oracle_zone: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -50,6 +51,8 @@ def __init__(__self__, *, """ pulumi.set(__self__, "cloud_exadata_infrastructure_id", cloud_exadata_infrastructure_id) pulumi.set(__self__, "location", location) + if deletion_protection is not None: + pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name is not None: pulumi.set(__self__, "display_name", display_name) if gcp_oracle_zone is not None: @@ -91,6 +94,15 @@ def location(self) -> pulumi.Input[str]: def location(self, value: pulumi.Input[str]): pulumi.set(self, "location", value) + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> Optional[pulumi.Input[bool]]: + return pulumi.get(self, "deletion_protection") + + @deletion_protection.setter + def deletion_protection(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "deletion_protection", value) + @property @pulumi.getter(name="displayName") def display_name(self) -> Optional[pulumi.Input[str]]: @@ -161,6 +173,7 @@ class _CloudExadataInfrastructureState: def __init__(__self__, *, cloud_exadata_infrastructure_id: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, entitlement_id: Optional[pulumi.Input[str]] = None, @@ -203,6 +216,8 @@ def __init__(__self__, *, pulumi.set(__self__, "cloud_exadata_infrastructure_id", cloud_exadata_infrastructure_id) if create_time is not None: pulumi.set(__self__, "create_time", create_time) + if deletion_protection is not None: + pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name is not None: pulumi.set(__self__, "display_name", display_name) if effective_labels is not None: @@ -254,6 +269,15 @@ def create_time(self) -> Optional[pulumi.Input[str]]: def create_time(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "create_time", value) + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> Optional[pulumi.Input[bool]]: + return pulumi.get(self, "deletion_protection") + + @deletion_protection.setter + def deletion_protection(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "deletion_protection", value) + @property @pulumi.getter(name="displayName") def display_name(self) -> Optional[pulumi.Input[str]]: @@ -388,6 +412,7 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, cloud_exadata_infrastructure_id: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, gcp_oracle_zone: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -421,7 +446,8 @@ def __init__(__self__, "shape": "Exadata.X9M", "compute_count": 2, "storage_count": 3, - }) + }, + deletion_protection=True) ``` ### Oracledatabase Cloud Exadata Infrastructure Full @@ -462,7 +488,8 @@ def __init__(__self__, }, labels={ "label-one": "value-one", - }) + }, + deletion_protection=True) ``` ## Import @@ -541,7 +568,8 @@ def __init__(__self__, "shape": "Exadata.X9M", "compute_count": 2, "storage_count": 3, - }) + }, + deletion_protection=True) ``` ### Oracledatabase Cloud Exadata Infrastructure Full @@ -582,7 +610,8 @@ def __init__(__self__, }, labels={ "label-one": "value-one", - }) + }, + deletion_protection=True) ``` ## Import @@ -625,6 +654,7 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, cloud_exadata_infrastructure_id: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, gcp_oracle_zone: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -643,6 +673,7 @@ def _internal_init(__self__, if cloud_exadata_infrastructure_id is None and not opts.urn: raise TypeError("Missing required property 'cloud_exadata_infrastructure_id'") __props__.__dict__["cloud_exadata_infrastructure_id"] = cloud_exadata_infrastructure_id + __props__.__dict__["deletion_protection"] = deletion_protection __props__.__dict__["display_name"] = display_name __props__.__dict__["gcp_oracle_zone"] = gcp_oracle_zone __props__.__dict__["labels"] = labels @@ -670,6 +701,7 @@ def get(resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, cloud_exadata_infrastructure_id: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, entitlement_id: Optional[pulumi.Input[str]] = None, @@ -719,6 +751,7 @@ def get(resource_name: str, __props__.__dict__["cloud_exadata_infrastructure_id"] = cloud_exadata_infrastructure_id __props__.__dict__["create_time"] = create_time + __props__.__dict__["deletion_protection"] = deletion_protection __props__.__dict__["display_name"] = display_name __props__.__dict__["effective_labels"] = effective_labels __props__.__dict__["entitlement_id"] = entitlement_id @@ -753,6 +786,11 @@ def create_time(self) -> pulumi.Output[str]: """ return pulumi.get(self, "create_time") + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> pulumi.Output[Optional[bool]]: + return pulumi.get(self, "deletion_protection") + @property @pulumi.getter(name="displayName") def display_name(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/oracledatabase/cloud_vm_cluster.py b/sdk/python/pulumi_gcp/oracledatabase/cloud_vm_cluster.py index c347367950..df3c5855c5 100644 --- a/sdk/python/pulumi_gcp/oracledatabase/cloud_vm_cluster.py +++ b/sdk/python/pulumi_gcp/oracledatabase/cloud_vm_cluster.py @@ -27,6 +27,7 @@ def __init__(__self__, *, exadata_infrastructure: pulumi.Input[str], location: pulumi.Input[str], network: pulumi.Input[str], + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None, @@ -63,6 +64,8 @@ def __init__(__self__, *, pulumi.set(__self__, "exadata_infrastructure", exadata_infrastructure) pulumi.set(__self__, "location", location) pulumi.set(__self__, "network", network) + if deletion_protection is not None: + pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name is not None: pulumi.set(__self__, "display_name", display_name) if labels is not None: @@ -153,6 +156,15 @@ def network(self) -> pulumi.Input[str]: def network(self, value: pulumi.Input[str]): pulumi.set(self, "network", value) + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> Optional[pulumi.Input[bool]]: + return pulumi.get(self, "deletion_protection") + + @deletion_protection.setter + def deletion_protection(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "deletion_protection", value) + @property @pulumi.getter(name="displayName") def display_name(self) -> Optional[pulumi.Input[str]]: @@ -213,6 +225,7 @@ def __init__(__self__, *, cidr: Optional[pulumi.Input[str]] = None, cloud_vm_cluster_id: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, exadata_infrastructure: Optional[pulumi.Input[str]] = None, @@ -266,6 +279,8 @@ def __init__(__self__, *, pulumi.set(__self__, "cloud_vm_cluster_id", cloud_vm_cluster_id) if create_time is not None: pulumi.set(__self__, "create_time", create_time) + if deletion_protection is not None: + pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name is not None: pulumi.set(__self__, "display_name", display_name) if effective_labels is not None: @@ -343,6 +358,15 @@ def create_time(self) -> Optional[pulumi.Input[str]]: def create_time(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "create_time", value) + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> Optional[pulumi.Input[bool]]: + return pulumi.get(self, "deletion_protection") + + @deletion_protection.setter + def deletion_protection(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "deletion_protection", value) + @property @pulumi.getter(name="displayName") def display_name(self) -> Optional[pulumi.Input[str]]: @@ -494,6 +518,7 @@ def __init__(__self__, backup_subnet_cidr: Optional[pulumi.Input[str]] = None, cidr: Optional[pulumi.Input[str]] = None, cloud_vm_cluster_id: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, exadata_infrastructure: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -528,7 +553,8 @@ def __init__(__self__, "shape": "Exadata.X9M", "compute_count": 2, "storage_count": 3, - }) + }, + deletion_protection=True) default = gcp.compute.get_network(name="new", project="my-project") my_vmcluster = gcp.oracledatabase.CloudVmCluster("my_vmcluster", @@ -546,7 +572,8 @@ def __init__(__self__, "cpu_core_count": 4, "gi_version": "19.0.0.0", "hostname_prefix": "hostname1", - }) + }, + deletion_protection=True) ``` ### Oracledatabase Cloud Vmcluster Full @@ -563,7 +590,8 @@ def __init__(__self__, "shape": "Exadata.X9M", "compute_count": 2, "storage_count": 3, - }) + }, + deletion_protection=True) default = gcp.compute.get_network(name="new", project="my-project") mydbserver = gcp.oracledatabase.get_db_servers_output(location="us-east4", @@ -608,7 +636,8 @@ def __init__(__self__, "incident_logs_enabled": True, }, "memory_size_gb": 60, - }) + }, + deletion_protection=True) ``` ## Import @@ -693,7 +722,8 @@ def __init__(__self__, "shape": "Exadata.X9M", "compute_count": 2, "storage_count": 3, - }) + }, + deletion_protection=True) default = gcp.compute.get_network(name="new", project="my-project") my_vmcluster = gcp.oracledatabase.CloudVmCluster("my_vmcluster", @@ -711,7 +741,8 @@ def __init__(__self__, "cpu_core_count": 4, "gi_version": "19.0.0.0", "hostname_prefix": "hostname1", - }) + }, + deletion_protection=True) ``` ### Oracledatabase Cloud Vmcluster Full @@ -728,7 +759,8 @@ def __init__(__self__, "shape": "Exadata.X9M", "compute_count": 2, "storage_count": 3, - }) + }, + deletion_protection=True) default = gcp.compute.get_network(name="new", project="my-project") mydbserver = gcp.oracledatabase.get_db_servers_output(location="us-east4", @@ -773,7 +805,8 @@ def __init__(__self__, "incident_logs_enabled": True, }, "memory_size_gb": 60, - }) + }, + deletion_protection=True) ``` ## Import @@ -818,6 +851,7 @@ def _internal_init(__self__, backup_subnet_cidr: Optional[pulumi.Input[str]] = None, cidr: Optional[pulumi.Input[str]] = None, cloud_vm_cluster_id: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, exadata_infrastructure: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -843,6 +877,7 @@ def _internal_init(__self__, if cloud_vm_cluster_id is None and not opts.urn: raise TypeError("Missing required property 'cloud_vm_cluster_id'") __props__.__dict__["cloud_vm_cluster_id"] = cloud_vm_cluster_id + __props__.__dict__["deletion_protection"] = deletion_protection __props__.__dict__["display_name"] = display_name if exadata_infrastructure is None and not opts.urn: raise TypeError("Missing required property 'exadata_infrastructure'") @@ -877,6 +912,7 @@ def get(resource_name: str, cidr: Optional[pulumi.Input[str]] = None, cloud_vm_cluster_id: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, + deletion_protection: Optional[pulumi.Input[bool]] = None, display_name: Optional[pulumi.Input[str]] = None, effective_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, exadata_infrastructure: Optional[pulumi.Input[str]] = None, @@ -935,6 +971,7 @@ def get(resource_name: str, __props__.__dict__["cidr"] = cidr __props__.__dict__["cloud_vm_cluster_id"] = cloud_vm_cluster_id __props__.__dict__["create_time"] = create_time + __props__.__dict__["deletion_protection"] = deletion_protection __props__.__dict__["display_name"] = display_name __props__.__dict__["effective_labels"] = effective_labels __props__.__dict__["exadata_infrastructure"] = exadata_infrastructure @@ -986,6 +1023,11 @@ def create_time(self) -> pulumi.Output[str]: """ return pulumi.get(self, "create_time") + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> pulumi.Output[Optional[bool]]: + return pulumi.get(self, "deletion_protection") + @property @pulumi.getter(name="displayName") def display_name(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/oracledatabase/get_autonomous_database.py b/sdk/python/pulumi_gcp/oracledatabase/get_autonomous_database.py index a700b7461a..95b820fcba 100644 --- a/sdk/python/pulumi_gcp/oracledatabase/get_autonomous_database.py +++ b/sdk/python/pulumi_gcp/oracledatabase/get_autonomous_database.py @@ -27,7 +27,7 @@ class GetAutonomousDatabaseResult: """ A collection of values returned by getAutonomousDatabase. """ - def __init__(__self__, admin_password=None, autonomous_database_id=None, cidr=None, create_time=None, database=None, display_name=None, effective_labels=None, entitlement_id=None, id=None, labels=None, location=None, name=None, network=None, project=None, properties=None, pulumi_labels=None): + def __init__(__self__, admin_password=None, autonomous_database_id=None, cidr=None, create_time=None, database=None, deletion_protection=None, display_name=None, effective_labels=None, entitlement_id=None, id=None, labels=None, location=None, name=None, network=None, project=None, properties=None, pulumi_labels=None): if admin_password and not isinstance(admin_password, str): raise TypeError("Expected argument 'admin_password' to be a str") pulumi.set(__self__, "admin_password", admin_password) @@ -43,6 +43,9 @@ def __init__(__self__, admin_password=None, autonomous_database_id=None, cidr=No if database and not isinstance(database, str): raise TypeError("Expected argument 'database' to be a str") pulumi.set(__self__, "database", database) + if deletion_protection and not isinstance(deletion_protection, bool): + raise TypeError("Expected argument 'deletion_protection' to be a bool") + pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name and not isinstance(display_name, str): raise TypeError("Expected argument 'display_name' to be a str") pulumi.set(__self__, "display_name", display_name) @@ -102,6 +105,11 @@ def create_time(self) -> str: def database(self) -> str: return pulumi.get(self, "database") + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> bool: + return pulumi.get(self, "deletion_protection") + @property @pulumi.getter(name="displayName") def display_name(self) -> str: @@ -172,6 +180,7 @@ def __await__(self): cidr=self.cidr, create_time=self.create_time, database=self.database, + deletion_protection=self.deletion_protection, display_name=self.display_name, effective_labels=self.effective_labels, entitlement_id=self.entitlement_id, @@ -226,6 +235,7 @@ def get_autonomous_database(autonomous_database_id: Optional[str] = None, cidr=pulumi.get(__ret__, 'cidr'), create_time=pulumi.get(__ret__, 'create_time'), database=pulumi.get(__ret__, 'database'), + deletion_protection=pulumi.get(__ret__, 'deletion_protection'), display_name=pulumi.get(__ret__, 'display_name'), effective_labels=pulumi.get(__ret__, 'effective_labels'), entitlement_id=pulumi.get(__ret__, 'entitlement_id'), @@ -277,6 +287,7 @@ def get_autonomous_database_output(autonomous_database_id: Optional[pulumi.Input cidr=pulumi.get(__response__, 'cidr'), create_time=pulumi.get(__response__, 'create_time'), database=pulumi.get(__response__, 'database'), + deletion_protection=pulumi.get(__response__, 'deletion_protection'), display_name=pulumi.get(__response__, 'display_name'), effective_labels=pulumi.get(__response__, 'effective_labels'), entitlement_id=pulumi.get(__response__, 'entitlement_id'), diff --git a/sdk/python/pulumi_gcp/oracledatabase/get_cloud_exadata_infrastructure.py b/sdk/python/pulumi_gcp/oracledatabase/get_cloud_exadata_infrastructure.py index 57fc3f5588..557c097529 100644 --- a/sdk/python/pulumi_gcp/oracledatabase/get_cloud_exadata_infrastructure.py +++ b/sdk/python/pulumi_gcp/oracledatabase/get_cloud_exadata_infrastructure.py @@ -27,13 +27,16 @@ class GetCloudExadataInfrastructureResult: """ A collection of values returned by getCloudExadataInfrastructure. """ - def __init__(__self__, cloud_exadata_infrastructure_id=None, create_time=None, display_name=None, effective_labels=None, entitlement_id=None, gcp_oracle_zone=None, id=None, labels=None, location=None, name=None, project=None, properties=None, pulumi_labels=None): + def __init__(__self__, cloud_exadata_infrastructure_id=None, create_time=None, deletion_protection=None, display_name=None, effective_labels=None, entitlement_id=None, gcp_oracle_zone=None, id=None, labels=None, location=None, name=None, project=None, properties=None, pulumi_labels=None): if cloud_exadata_infrastructure_id and not isinstance(cloud_exadata_infrastructure_id, str): raise TypeError("Expected argument 'cloud_exadata_infrastructure_id' to be a str") pulumi.set(__self__, "cloud_exadata_infrastructure_id", cloud_exadata_infrastructure_id) if create_time and not isinstance(create_time, str): raise TypeError("Expected argument 'create_time' to be a str") pulumi.set(__self__, "create_time", create_time) + if deletion_protection and not isinstance(deletion_protection, bool): + raise TypeError("Expected argument 'deletion_protection' to be a bool") + pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name and not isinstance(display_name, str): raise TypeError("Expected argument 'display_name' to be a str") pulumi.set(__self__, "display_name", display_name) @@ -78,6 +81,11 @@ def cloud_exadata_infrastructure_id(self) -> str: def create_time(self) -> str: return pulumi.get(self, "create_time") + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> bool: + return pulumi.get(self, "deletion_protection") + @property @pulumi.getter(name="displayName") def display_name(self) -> str: @@ -145,6 +153,7 @@ def __await__(self): return GetCloudExadataInfrastructureResult( cloud_exadata_infrastructure_id=self.cloud_exadata_infrastructure_id, create_time=self.create_time, + deletion_protection=self.deletion_protection, display_name=self.display_name, effective_labels=self.effective_labels, entitlement_id=self.entitlement_id, @@ -196,6 +205,7 @@ def get_cloud_exadata_infrastructure(cloud_exadata_infrastructure_id: Optional[s return AwaitableGetCloudExadataInfrastructureResult( cloud_exadata_infrastructure_id=pulumi.get(__ret__, 'cloud_exadata_infrastructure_id'), create_time=pulumi.get(__ret__, 'create_time'), + deletion_protection=pulumi.get(__ret__, 'deletion_protection'), display_name=pulumi.get(__ret__, 'display_name'), effective_labels=pulumi.get(__ret__, 'effective_labels'), entitlement_id=pulumi.get(__ret__, 'entitlement_id'), @@ -244,6 +254,7 @@ def get_cloud_exadata_infrastructure_output(cloud_exadata_infrastructure_id: Opt return __ret__.apply(lambda __response__: GetCloudExadataInfrastructureResult( cloud_exadata_infrastructure_id=pulumi.get(__response__, 'cloud_exadata_infrastructure_id'), create_time=pulumi.get(__response__, 'create_time'), + deletion_protection=pulumi.get(__response__, 'deletion_protection'), display_name=pulumi.get(__response__, 'display_name'), effective_labels=pulumi.get(__response__, 'effective_labels'), entitlement_id=pulumi.get(__response__, 'entitlement_id'), diff --git a/sdk/python/pulumi_gcp/oracledatabase/get_cloud_vm_cluster.py b/sdk/python/pulumi_gcp/oracledatabase/get_cloud_vm_cluster.py index 1b5ca1d16a..da4bf2a186 100644 --- a/sdk/python/pulumi_gcp/oracledatabase/get_cloud_vm_cluster.py +++ b/sdk/python/pulumi_gcp/oracledatabase/get_cloud_vm_cluster.py @@ -27,7 +27,7 @@ class GetCloudVmClusterResult: """ A collection of values returned by getCloudVmCluster. """ - def __init__(__self__, backup_subnet_cidr=None, cidr=None, cloud_vm_cluster_id=None, create_time=None, display_name=None, effective_labels=None, exadata_infrastructure=None, gcp_oracle_zone=None, id=None, labels=None, location=None, name=None, network=None, project=None, properties=None, pulumi_labels=None): + def __init__(__self__, backup_subnet_cidr=None, cidr=None, cloud_vm_cluster_id=None, create_time=None, deletion_protection=None, display_name=None, effective_labels=None, exadata_infrastructure=None, gcp_oracle_zone=None, id=None, labels=None, location=None, name=None, network=None, project=None, properties=None, pulumi_labels=None): if backup_subnet_cidr and not isinstance(backup_subnet_cidr, str): raise TypeError("Expected argument 'backup_subnet_cidr' to be a str") pulumi.set(__self__, "backup_subnet_cidr", backup_subnet_cidr) @@ -40,6 +40,9 @@ def __init__(__self__, backup_subnet_cidr=None, cidr=None, cloud_vm_cluster_id=N if create_time and not isinstance(create_time, str): raise TypeError("Expected argument 'create_time' to be a str") pulumi.set(__self__, "create_time", create_time) + if deletion_protection and not isinstance(deletion_protection, bool): + raise TypeError("Expected argument 'deletion_protection' to be a bool") + pulumi.set(__self__, "deletion_protection", deletion_protection) if display_name and not isinstance(display_name, str): raise TypeError("Expected argument 'display_name' to be a str") pulumi.set(__self__, "display_name", display_name) @@ -97,6 +100,11 @@ def cloud_vm_cluster_id(self) -> str: def create_time(self) -> str: return pulumi.get(self, "create_time") + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> bool: + return pulumi.get(self, "deletion_protection") + @property @pulumi.getter(name="displayName") def display_name(self) -> str: @@ -171,6 +179,7 @@ def __await__(self): cidr=self.cidr, cloud_vm_cluster_id=self.cloud_vm_cluster_id, create_time=self.create_time, + deletion_protection=self.deletion_protection, display_name=self.display_name, effective_labels=self.effective_labels, exadata_infrastructure=self.exadata_infrastructure, @@ -225,6 +234,7 @@ def get_cloud_vm_cluster(cloud_vm_cluster_id: Optional[str] = None, cidr=pulumi.get(__ret__, 'cidr'), cloud_vm_cluster_id=pulumi.get(__ret__, 'cloud_vm_cluster_id'), create_time=pulumi.get(__ret__, 'create_time'), + deletion_protection=pulumi.get(__ret__, 'deletion_protection'), display_name=pulumi.get(__ret__, 'display_name'), effective_labels=pulumi.get(__ret__, 'effective_labels'), exadata_infrastructure=pulumi.get(__ret__, 'exadata_infrastructure'), @@ -276,6 +286,7 @@ def get_cloud_vm_cluster_output(cloud_vm_cluster_id: Optional[pulumi.Input[str]] cidr=pulumi.get(__response__, 'cidr'), cloud_vm_cluster_id=pulumi.get(__response__, 'cloud_vm_cluster_id'), create_time=pulumi.get(__response__, 'create_time'), + deletion_protection=pulumi.get(__response__, 'deletion_protection'), display_name=pulumi.get(__response__, 'display_name'), effective_labels=pulumi.get(__response__, 'effective_labels'), exadata_infrastructure=pulumi.get(__response__, 'exadata_infrastructure'), diff --git a/sdk/python/pulumi_gcp/oracledatabase/outputs.py b/sdk/python/pulumi_gcp/oracledatabase/outputs.py index 6844eb92f3..519b93f75f 100644 --- a/sdk/python/pulumi_gcp/oracledatabase/outputs.py +++ b/sdk/python/pulumi_gcp/oracledatabase/outputs.py @@ -4969,6 +4969,7 @@ def __init__(__self__, *, cidr: str, create_time: str, database: str, + deletion_protection: bool, display_name: str, effective_labels: Mapping[str, str], entitlement_id: str, @@ -5016,6 +5017,7 @@ def __init__(__self__, *, pulumi.set(__self__, "cidr", cidr) pulumi.set(__self__, "create_time", create_time) pulumi.set(__self__, "database", database) + pulumi.set(__self__, "deletion_protection", deletion_protection) pulumi.set(__self__, "display_name", display_name) pulumi.set(__self__, "effective_labels", effective_labels) pulumi.set(__self__, "entitlement_id", entitlement_id) @@ -5072,6 +5074,11 @@ def database(self) -> str: """ return pulumi.get(self, "database") + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> bool: + return pulumi.get(self, "deletion_protection") + @property @pulumi.getter(name="displayName") def display_name(self) -> str: @@ -7248,6 +7255,7 @@ class GetCloudExadataInfrastructuresCloudExadataInfrastructureResult(dict): def __init__(__self__, *, cloud_exadata_infrastructure_id: str, create_time: str, + deletion_protection: bool, display_name: str, effective_labels: Mapping[str, str], entitlement_id: str, @@ -7285,6 +7293,7 @@ def __init__(__self__, *, """ pulumi.set(__self__, "cloud_exadata_infrastructure_id", cloud_exadata_infrastructure_id) pulumi.set(__self__, "create_time", create_time) + pulumi.set(__self__, "deletion_protection", deletion_protection) pulumi.set(__self__, "display_name", display_name) pulumi.set(__self__, "effective_labels", effective_labels) pulumi.set(__self__, "entitlement_id", entitlement_id) @@ -7315,6 +7324,11 @@ def create_time(self) -> str: """ return pulumi.get(self, "create_time") + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> bool: + return pulumi.get(self, "deletion_protection") + @property @pulumi.getter(name="displayName") def display_name(self) -> str: @@ -8386,6 +8400,7 @@ def __init__(__self__, *, cidr: str, cloud_vm_cluster_id: str, create_time: str, + deletion_protection: bool, display_name: str, effective_labels: Mapping[str, str], exadata_infrastructure: str, @@ -8432,6 +8447,7 @@ def __init__(__self__, *, pulumi.set(__self__, "cidr", cidr) pulumi.set(__self__, "cloud_vm_cluster_id", cloud_vm_cluster_id) pulumi.set(__self__, "create_time", create_time) + pulumi.set(__self__, "deletion_protection", deletion_protection) pulumi.set(__self__, "display_name", display_name) pulumi.set(__self__, "effective_labels", effective_labels) pulumi.set(__self__, "exadata_infrastructure", exadata_infrastructure) @@ -8479,6 +8495,11 @@ def create_time(self) -> str: """ return pulumi.get(self, "create_time") + @property + @pulumi.getter(name="deletionProtection") + def deletion_protection(self) -> bool: + return pulumi.get(self, "deletion_protection") + @property @pulumi.getter(name="displayName") def display_name(self) -> str: diff --git a/sdk/python/pulumi_gcp/orgpolicy/policy.py b/sdk/python/pulumi_gcp/orgpolicy/policy.py index e5d297d967..d45d32ba2e 100644 --- a/sdk/python/pulumi_gcp/orgpolicy/policy.py +++ b/sdk/python/pulumi_gcp/orgpolicy/policy.py @@ -313,7 +313,7 @@ def __init__(__self__, import pulumi_gcp as gcp constraint = gcp.orgpolicy.CustomConstraint("constraint", - name="custom.disableGkeAutoUpgrade_13293", + name="custom.disableGkeAutoUpgrade_40289", parent="organizations/123456789", display_name="Disable GKE auto upgrade", description="Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.", @@ -474,7 +474,7 @@ def __init__(__self__, import pulumi_gcp as gcp constraint = gcp.orgpolicy.CustomConstraint("constraint", - name="custom.disableGkeAutoUpgrade_13293", + name="custom.disableGkeAutoUpgrade_40289", parent="organizations/123456789", display_name="Disable GKE auto upgrade", description="Only allow GKE NodePool resource to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.", diff --git a/sdk/python/pulumi_gcp/parallelstore/instance.py b/sdk/python/pulumi_gcp/parallelstore/instance.py index de0fd1dbbd..2233857651 100644 --- a/sdk/python/pulumi_gcp/parallelstore/instance.py +++ b/sdk/python/pulumi_gcp/parallelstore/instance.py @@ -724,6 +724,8 @@ def __init__(__self__, reserved_ip_range: Optional[pulumi.Input[str]] = None, __props__=None): """ + A Parallelstore Instance. + ## Example Usage ### Parallelstore Instance Basic @@ -853,6 +855,8 @@ def __init__(__self__, args: InstanceArgs, opts: Optional[pulumi.ResourceOptions] = None): """ + A Parallelstore Instance. + ## Example Usage ### Parallelstore Instance Basic diff --git a/sdk/python/pulumi_gcp/provider.py b/sdk/python/pulumi_gcp/provider.py index 29d359e2ce..522fcf3306 100644 --- a/sdk/python/pulumi_gcp/provider.py +++ b/sdk/python/pulumi_gcp/provider.py @@ -110,6 +110,7 @@ def __init__(__self__, *, firebase_storage_custom_endpoint: Optional[pulumi.Input[str]] = None, firebaserules_custom_endpoint: Optional[pulumi.Input[str]] = None, firestore_custom_endpoint: Optional[pulumi.Input[str]] = None, + gemini_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_backup_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_hub2_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_hub_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -382,6 +383,8 @@ def __init__(__self__, *, pulumi.set(__self__, "firebaserules_custom_endpoint", firebaserules_custom_endpoint) if firestore_custom_endpoint is not None: pulumi.set(__self__, "firestore_custom_endpoint", firestore_custom_endpoint) + if gemini_custom_endpoint is not None: + pulumi.set(__self__, "gemini_custom_endpoint", gemini_custom_endpoint) if gke_backup_custom_endpoint is not None: pulumi.set(__self__, "gke_backup_custom_endpoint", gke_backup_custom_endpoint) if gke_hub2_custom_endpoint is not None: @@ -1377,6 +1380,15 @@ def firestore_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def firestore_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "firestore_custom_endpoint", value) + @property + @pulumi.getter(name="geminiCustomEndpoint") + def gemini_custom_endpoint(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "gemini_custom_endpoint") + + @gemini_custom_endpoint.setter + def gemini_custom_endpoint(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "gemini_custom_endpoint", value) + @property @pulumi.getter(name="gkeBackupCustomEndpoint") def gke_backup_custom_endpoint(self) -> Optional[pulumi.Input[str]]: @@ -2274,6 +2286,7 @@ def __init__(__self__, firebase_storage_custom_endpoint: Optional[pulumi.Input[str]] = None, firebaserules_custom_endpoint: Optional[pulumi.Input[str]] = None, firestore_custom_endpoint: Optional[pulumi.Input[str]] = None, + gemini_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_backup_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_hub2_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_hub_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -2490,6 +2503,7 @@ def _internal_init(__self__, firebase_storage_custom_endpoint: Optional[pulumi.Input[str]] = None, firebaserules_custom_endpoint: Optional[pulumi.Input[str]] = None, firestore_custom_endpoint: Optional[pulumi.Input[str]] = None, + gemini_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_backup_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_hub2_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_hub_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -2678,6 +2692,7 @@ def _internal_init(__self__, __props__.__dict__["firebase_storage_custom_endpoint"] = firebase_storage_custom_endpoint __props__.__dict__["firebaserules_custom_endpoint"] = firebaserules_custom_endpoint __props__.__dict__["firestore_custom_endpoint"] = firestore_custom_endpoint + __props__.__dict__["gemini_custom_endpoint"] = gemini_custom_endpoint __props__.__dict__["gke_backup_custom_endpoint"] = gke_backup_custom_endpoint __props__.__dict__["gke_hub2_custom_endpoint"] = gke_hub2_custom_endpoint __props__.__dict__["gke_hub_custom_endpoint"] = gke_hub_custom_endpoint @@ -3211,6 +3226,11 @@ def firebaserules_custom_endpoint(self) -> pulumi.Output[Optional[str]]: def firestore_custom_endpoint(self) -> pulumi.Output[Optional[str]]: return pulumi.get(self, "firestore_custom_endpoint") + @property + @pulumi.getter(name="geminiCustomEndpoint") + def gemini_custom_endpoint(self) -> pulumi.Output[Optional[str]]: + return pulumi.get(self, "gemini_custom_endpoint") + @property @pulumi.getter(name="gkeBackupCustomEndpoint") def gke_backup_custom_endpoint(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/pubsub/subscription.py b/sdk/python/pulumi_gcp/pubsub/subscription.py index ae7b9f769f..b3d5405602 100644 --- a/sdk/python/pulumi_gcp/pubsub/subscription.py +++ b/sdk/python/pulumi_gcp/pubsub/subscription.py @@ -1113,7 +1113,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_40289", + "filename_suffix": "-_33395", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1146,7 +1146,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_33395", + "filename_suffix": "-_76044", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1185,7 +1185,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_76044", + "filename_suffix": "-_69391", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1553,7 +1553,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_40289", + "filename_suffix": "-_33395", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1586,7 +1586,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_33395", + "filename_suffix": "-_76044", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", @@ -1625,7 +1625,7 @@ def __init__(__self__, cloud_storage_config={ "bucket": example.name, "filename_prefix": "pre-", - "filename_suffix": "-_76044", + "filename_suffix": "-_69391", "filename_datetime_format": "YYYY-MM-DD/hh_mm_ssZ", "max_bytes": 1000, "max_duration": "300s", diff --git a/sdk/python/pulumi_gcp/redis/_inputs.py b/sdk/python/pulumi_gcp/redis/_inputs.py index 99e74bfdb1..0cf5f311db 100644 --- a/sdk/python/pulumi_gcp/redis/_inputs.py +++ b/sdk/python/pulumi_gcp/redis/_inputs.py @@ -15,6 +15,18 @@ from .. import _utilities __all__ = [ + 'ClusterCrossClusterReplicationConfigArgs', + 'ClusterCrossClusterReplicationConfigArgsDict', + 'ClusterCrossClusterReplicationConfigMembershipArgs', + 'ClusterCrossClusterReplicationConfigMembershipArgsDict', + 'ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs', + 'ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgsDict', + 'ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs', + 'ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgsDict', + 'ClusterCrossClusterReplicationConfigPrimaryClusterArgs', + 'ClusterCrossClusterReplicationConfigPrimaryClusterArgsDict', + 'ClusterCrossClusterReplicationConfigSecondaryClusterArgs', + 'ClusterCrossClusterReplicationConfigSecondaryClusterArgsDict', 'ClusterDiscoveryEndpointArgs', 'ClusterDiscoveryEndpointArgsDict', 'ClusterDiscoveryEndpointPscConfigArgs', @@ -61,6 +73,426 @@ MYPY = False +if not MYPY: + class ClusterCrossClusterReplicationConfigArgsDict(TypedDict): + cluster_role: NotRequired[pulumi.Input[str]] + """ + The role of the cluster in cross cluster replication. Supported values are: + 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + 1. `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. + 1. `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. + 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + """ + memberships: NotRequired[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipArgsDict']]]] + """ + (Output) + An 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. + Structure is documented below. + """ + primary_cluster: NotRequired[pulumi.Input['ClusterCrossClusterReplicationConfigPrimaryClusterArgsDict']] + """ + 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`. + Structure is documented below. + """ + secondary_clusters: NotRequired[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigSecondaryClusterArgsDict']]]] + """ + 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`. + Structure is documented below. + """ + update_time: NotRequired[pulumi.Input[str]] + """ + (Output) + The last time cross cluster replication config was updated. + """ +elif False: + ClusterCrossClusterReplicationConfigArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterCrossClusterReplicationConfigArgs: + def __init__(__self__, *, + cluster_role: Optional[pulumi.Input[str]] = None, + memberships: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipArgs']]]] = None, + primary_cluster: Optional[pulumi.Input['ClusterCrossClusterReplicationConfigPrimaryClusterArgs']] = None, + secondary_clusters: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigSecondaryClusterArgs']]]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] cluster_role: The role of the cluster in cross cluster replication. Supported values are: + 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + 1. `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. + 1. `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. + 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + :param pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipArgs']]] memberships: (Output) + An 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. + Structure is documented below. + :param pulumi.Input['ClusterCrossClusterReplicationConfigPrimaryClusterArgs'] primary_cluster: 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`. + Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigSecondaryClusterArgs']]] secondary_clusters: 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`. + Structure is documented below. + :param pulumi.Input[str] update_time: (Output) + The last time cross cluster replication config was updated. + """ + if cluster_role is not None: + pulumi.set(__self__, "cluster_role", cluster_role) + if memberships is not None: + pulumi.set(__self__, "memberships", memberships) + if primary_cluster is not None: + pulumi.set(__self__, "primary_cluster", primary_cluster) + if secondary_clusters is not None: + pulumi.set(__self__, "secondary_clusters", secondary_clusters) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="clusterRole") + def cluster_role(self) -> Optional[pulumi.Input[str]]: + """ + The role of the cluster in cross cluster replication. Supported values are: + 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + 1. `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. + 1. `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. + 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + """ + return pulumi.get(self, "cluster_role") + + @cluster_role.setter + def cluster_role(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cluster_role", value) + + @property + @pulumi.getter + def memberships(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipArgs']]]]: + """ + (Output) + An 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. + Structure is documented below. + """ + return pulumi.get(self, "memberships") + + @memberships.setter + def memberships(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipArgs']]]]): + pulumi.set(self, "memberships", value) + + @property + @pulumi.getter(name="primaryCluster") + def primary_cluster(self) -> Optional[pulumi.Input['ClusterCrossClusterReplicationConfigPrimaryClusterArgs']]: + """ + 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`. + Structure is documented below. + """ + return pulumi.get(self, "primary_cluster") + + @primary_cluster.setter + def primary_cluster(self, value: Optional[pulumi.Input['ClusterCrossClusterReplicationConfigPrimaryClusterArgs']]): + pulumi.set(self, "primary_cluster", value) + + @property + @pulumi.getter(name="secondaryClusters") + def secondary_clusters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigSecondaryClusterArgs']]]]: + """ + 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`. + Structure is documented below. + """ + return pulumi.get(self, "secondary_clusters") + + @secondary_clusters.setter + def secondary_clusters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigSecondaryClusterArgs']]]]): + pulumi.set(self, "secondary_clusters", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + The last time cross cluster replication config was updated. + """ + return pulumi.get(self, "update_time") + + @update_time.setter + def update_time(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "update_time", value) + + +if not MYPY: + class ClusterCrossClusterReplicationConfigMembershipArgsDict(TypedDict): + primary_clusters: NotRequired[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgsDict']]]] + """ + Details of the primary cluster that is used as the replication source for all the secondary clusters. + """ + secondary_clusters: NotRequired[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgsDict']]]] + """ + List of secondary clusters that are replicating from the primary cluster. + """ +elif False: + ClusterCrossClusterReplicationConfigMembershipArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterCrossClusterReplicationConfigMembershipArgs: + def __init__(__self__, *, + primary_clusters: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs']]]] = None, + secondary_clusters: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs']]]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs']]] primary_clusters: Details of the primary cluster that is used as the replication source for all the secondary clusters. + :param pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs']]] secondary_clusters: List of secondary clusters that are replicating from the primary cluster. + """ + if primary_clusters is not None: + pulumi.set(__self__, "primary_clusters", primary_clusters) + if secondary_clusters is not None: + pulumi.set(__self__, "secondary_clusters", secondary_clusters) + + @property + @pulumi.getter(name="primaryClusters") + def primary_clusters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs']]]]: + """ + Details of the primary cluster that is used as the replication source for all the secondary clusters. + """ + return pulumi.get(self, "primary_clusters") + + @primary_clusters.setter + def primary_clusters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs']]]]): + pulumi.set(self, "primary_clusters", value) + + @property + @pulumi.getter(name="secondaryClusters") + def secondary_clusters(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs']]]]: + """ + List of secondary clusters that are replicating from the primary cluster. + """ + return pulumi.get(self, "secondary_clusters") + + @secondary_clusters.setter + def secondary_clusters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs']]]]): + pulumi.set(self, "secondary_clusters", value) + + +if not MYPY: + class ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgsDict(TypedDict): + cluster: NotRequired[pulumi.Input[str]] + """ + The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + uid: NotRequired[pulumi.Input[str]] + """ + (Output) + The unique id of the primary cluster. + """ +elif False: + ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs: + def __init__(__self__, *, + cluster: Optional[pulumi.Input[str]] = None, + uid: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] cluster: The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + :param pulumi.Input[str] uid: (Output) + The unique id of the primary cluster. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if uid is not None: + pulumi.set(__self__, "uid", uid) + + @property + @pulumi.getter + def cluster(self) -> Optional[pulumi.Input[str]]: + """ + The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + return pulumi.get(self, "cluster") + + @cluster.setter + def cluster(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cluster", value) + + @property + @pulumi.getter + def uid(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + The unique id of the primary cluster. + """ + return pulumi.get(self, "uid") + + @uid.setter + def uid(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "uid", value) + + +if not MYPY: + class ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgsDict(TypedDict): + cluster: NotRequired[pulumi.Input[str]] + """ + (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + uid: NotRequired[pulumi.Input[str]] + """ + (Output) + The unique id of the secondary cluster. + """ +elif False: + ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs: + def __init__(__self__, *, + cluster: Optional[pulumi.Input[str]] = None, + uid: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] cluster: (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + :param pulumi.Input[str] uid: (Output) + The unique id of the secondary cluster. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if uid is not None: + pulumi.set(__self__, "uid", uid) + + @property + @pulumi.getter + def cluster(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + return pulumi.get(self, "cluster") + + @cluster.setter + def cluster(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cluster", value) + + @property + @pulumi.getter + def uid(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + The unique id of the secondary cluster. + """ + return pulumi.get(self, "uid") + + @uid.setter + def uid(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "uid", value) + + +if not MYPY: + class ClusterCrossClusterReplicationConfigPrimaryClusterArgsDict(TypedDict): + cluster: NotRequired[pulumi.Input[str]] + """ + The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + uid: NotRequired[pulumi.Input[str]] + """ + (Output) + The unique id of the primary cluster. + """ +elif False: + ClusterCrossClusterReplicationConfigPrimaryClusterArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterCrossClusterReplicationConfigPrimaryClusterArgs: + def __init__(__self__, *, + cluster: Optional[pulumi.Input[str]] = None, + uid: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] cluster: The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + :param pulumi.Input[str] uid: (Output) + The unique id of the primary cluster. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if uid is not None: + pulumi.set(__self__, "uid", uid) + + @property + @pulumi.getter + def cluster(self) -> Optional[pulumi.Input[str]]: + """ + The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + return pulumi.get(self, "cluster") + + @cluster.setter + def cluster(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cluster", value) + + @property + @pulumi.getter + def uid(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + The unique id of the primary cluster. + """ + return pulumi.get(self, "uid") + + @uid.setter + def uid(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "uid", value) + + +if not MYPY: + class ClusterCrossClusterReplicationConfigSecondaryClusterArgsDict(TypedDict): + cluster: NotRequired[pulumi.Input[str]] + """ + (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + uid: NotRequired[pulumi.Input[str]] + """ + (Output) + The unique id of the secondary cluster. + """ +elif False: + ClusterCrossClusterReplicationConfigSecondaryClusterArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class ClusterCrossClusterReplicationConfigSecondaryClusterArgs: + def __init__(__self__, *, + cluster: Optional[pulumi.Input[str]] = None, + uid: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] cluster: (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + :param pulumi.Input[str] uid: (Output) + The unique id of the secondary cluster. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if uid is not None: + pulumi.set(__self__, "uid", uid) + + @property + @pulumi.getter + def cluster(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + return pulumi.get(self, "cluster") + + @cluster.setter + def cluster(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cluster", value) + + @property + @pulumi.getter + def uid(self) -> Optional[pulumi.Input[str]]: + """ + (Output) + The unique id of the secondary cluster. + """ + return pulumi.get(self, "uid") + + @uid.setter + def uid(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "uid", value) + + if not MYPY: class ClusterDiscoveryEndpointArgsDict(TypedDict): address: NotRequired[pulumi.Input[str]] @@ -677,7 +1109,7 @@ class ClusterPersistenceConfigAofConfigArgsDict(TypedDict): append_fsync: NotRequired[pulumi.Input[str]] """ Optional. Available fsync modes. - - NO - Do not explicilty call fsync(). Rely on OS defaults. + - NO - Do not explicitly call fsync(). Rely on OS defaults. - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. - ALWAYS - Call fsync() for earch write command. Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -691,7 +1123,7 @@ def __init__(__self__, *, append_fsync: Optional[pulumi.Input[str]] = None): """ :param pulumi.Input[str] append_fsync: Optional. Available fsync modes. - - NO - Do not explicilty call fsync(). Rely on OS defaults. + - NO - Do not explicitly call fsync(). Rely on OS defaults. - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. - ALWAYS - Call fsync() for earch write command. Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -704,7 +1136,7 @@ def __init__(__self__, *, def append_fsync(self) -> Optional[pulumi.Input[str]]: """ Optional. Available fsync modes. - - NO - Do not explicilty call fsync(). Rely on OS defaults. + - NO - Do not explicitly call fsync(). Rely on OS defaults. - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. - ALWAYS - Call fsync() for earch write command. Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. diff --git a/sdk/python/pulumi_gcp/redis/cluster.py b/sdk/python/pulumi_gcp/redis/cluster.py index 6ce77761df..881e25e68c 100644 --- a/sdk/python/pulumi_gcp/redis/cluster.py +++ b/sdk/python/pulumi_gcp/redis/cluster.py @@ -24,6 +24,7 @@ def __init__(__self__, *, psc_configs: pulumi.Input[Sequence[pulumi.Input['ClusterPscConfigArgs']]], shard_count: pulumi.Input[int], authorization_mode: Optional[pulumi.Input[str]] = None, + cross_cluster_replication_config: Optional[pulumi.Input['ClusterCrossClusterReplicationConfigArgs']] = None, deletion_protection_enabled: Optional[pulumi.Input[bool]] = None, maintenance_policy: Optional[pulumi.Input['ClusterMaintenancePolicyArgs']] = None, name: Optional[pulumi.Input[str]] = None, @@ -45,6 +46,7 @@ def __init__(__self__, *, :param pulumi.Input[str] authorization_mode: Optional. The authorization mode of the Redis cluster. If not provided, auth feature is disabled for the cluster. Default value: "AUTH_MODE_DISABLED" Possible values: ["AUTH_MODE_UNSPECIFIED", "AUTH_MODE_IAM_AUTH", "AUTH_MODE_DISABLED"] + :param pulumi.Input['ClusterCrossClusterReplicationConfigArgs'] cross_cluster_replication_config: Cross cluster replication config :param pulumi.Input[bool] deletion_protection_enabled: Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster operation will fail. Default value is true. :param pulumi.Input['ClusterMaintenancePolicyArgs'] maintenance_policy: Maintenance policy for a cluster @@ -67,6 +69,8 @@ def __init__(__self__, *, pulumi.set(__self__, "shard_count", shard_count) if authorization_mode is not None: pulumi.set(__self__, "authorization_mode", authorization_mode) + if cross_cluster_replication_config is not None: + pulumi.set(__self__, "cross_cluster_replication_config", cross_cluster_replication_config) if deletion_protection_enabled is not None: pulumi.set(__self__, "deletion_protection_enabled", deletion_protection_enabled) if maintenance_policy is not None: @@ -131,6 +135,18 @@ def authorization_mode(self) -> Optional[pulumi.Input[str]]: def authorization_mode(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "authorization_mode", value) + @property + @pulumi.getter(name="crossClusterReplicationConfig") + def cross_cluster_replication_config(self) -> Optional[pulumi.Input['ClusterCrossClusterReplicationConfigArgs']]: + """ + Cross cluster replication config + """ + return pulumi.get(self, "cross_cluster_replication_config") + + @cross_cluster_replication_config.setter + def cross_cluster_replication_config(self, value: Optional[pulumi.Input['ClusterCrossClusterReplicationConfigArgs']]): + pulumi.set(self, "cross_cluster_replication_config", value) + @property @pulumi.getter(name="deletionProtectionEnabled") def deletion_protection_enabled(self) -> Optional[pulumi.Input[bool]]: @@ -273,6 +289,7 @@ class _ClusterState: def __init__(__self__, *, authorization_mode: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, + cross_cluster_replication_config: Optional[pulumi.Input['ClusterCrossClusterReplicationConfigArgs']] = None, deletion_protection_enabled: Optional[pulumi.Input[bool]] = None, discovery_endpoints: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterDiscoveryEndpointArgs']]]] = None, maintenance_policy: Optional[pulumi.Input['ClusterMaintenancePolicyArgs']] = None, @@ -302,6 +319,7 @@ def __init__(__self__, *, :param pulumi.Input[str] create_time: The timestamp associated with the cluster creation request. 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". + :param pulumi.Input['ClusterCrossClusterReplicationConfigArgs'] cross_cluster_replication_config: Cross cluster replication config :param pulumi.Input[bool] deletion_protection_enabled: Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster operation will fail. Default value is true. :param pulumi.Input[Sequence[pulumi.Input['ClusterDiscoveryEndpointArgs']]] discovery_endpoints: Output only. Endpoints created on each given network, @@ -343,6 +361,8 @@ def __init__(__self__, *, pulumi.set(__self__, "authorization_mode", authorization_mode) if create_time is not None: pulumi.set(__self__, "create_time", create_time) + if cross_cluster_replication_config is not None: + pulumi.set(__self__, "cross_cluster_replication_config", cross_cluster_replication_config) if deletion_protection_enabled is not None: pulumi.set(__self__, "deletion_protection_enabled", deletion_protection_enabled) if discovery_endpoints is not None: @@ -414,6 +434,18 @@ def create_time(self) -> Optional[pulumi.Input[str]]: def create_time(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "create_time", value) + @property + @pulumi.getter(name="crossClusterReplicationConfig") + def cross_cluster_replication_config(self) -> Optional[pulumi.Input['ClusterCrossClusterReplicationConfigArgs']]: + """ + Cross cluster replication config + """ + return pulumi.get(self, "cross_cluster_replication_config") + + @cross_cluster_replication_config.setter + def cross_cluster_replication_config(self, value: Optional[pulumi.Input['ClusterCrossClusterReplicationConfigArgs']]): + pulumi.set(self, "cross_cluster_replication_config", value) + @property @pulumi.getter(name="deletionProtectionEnabled") def deletion_protection_enabled(self) -> Optional[pulumi.Input[bool]]: @@ -686,6 +718,7 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, authorization_mode: Optional[pulumi.Input[str]] = None, + cross_cluster_replication_config: Optional[pulumi.Input[Union['ClusterCrossClusterReplicationConfigArgs', 'ClusterCrossClusterReplicationConfigArgsDict']]] = None, deletion_protection_enabled: Optional[pulumi.Input[bool]] = None, maintenance_policy: Optional[pulumi.Input[Union['ClusterMaintenancePolicyArgs', 'ClusterMaintenancePolicyArgsDict']]] = None, name: Optional[pulumi.Input[str]] = None, @@ -701,14 +734,6 @@ def __init__(__self__, zone_distribution_config: Optional[pulumi.Input[Union['ClusterZoneDistributionConfigArgs', 'ClusterZoneDistributionConfigArgsDict']]] = None, __props__=None): """ - A Google Cloud Redis Cluster instance. - - To get more information about Cluster, see: - - * [API documentation](https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters) - * How-to Guides - * [Official Documentation](https://cloud.google.com/memorystore/docs/cluster/) - ## Example Usage ### Redis Cluster Ha @@ -813,6 +838,126 @@ def __init__(__self__, deletion_protection_enabled=True, opts = pulumi.ResourceOptions(depends_on=[default])) ``` + ### Redis Cluster Secondary + + ```python + import pulumi + import pulumi_gcp as gcp + + producer_net = gcp.compute.Network("producer_net", + name="mynetwork", + auto_create_subnetworks=False) + primary_cluster_producer_subnet = gcp.compute.Subnetwork("primary_cluster_producer_subnet", + name="mysubnet-primary-cluster", + ip_cidr_range="10.0.1.0/29", + region="us-east1", + network=producer_net.id) + primary_cluster_region_scp = gcp.networkconnectivity.ServiceConnectionPolicy("primary_cluster_region_scp", + name="mypolicy-primary-cluster", + location="us-east1", + service_class="gcp-memorystore-redis", + description="Primary cluster service connection policy", + network=producer_net.id, + psc_config={ + "subnetworks": [primary_cluster_producer_subnet.id], + }) + # Primary cluster + primary_cluster = gcp.redis.Cluster("primary_cluster", + name="my-primary-cluster", + region="us-east1", + psc_configs=[{ + "network": producer_net.id, + }], + authorization_mode="AUTH_MODE_DISABLED", + transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED", + shard_count=3, + redis_configs={ + "maxmemory-policy": "volatile-ttl", + }, + node_type="REDIS_HIGHMEM_MEDIUM", + persistence_config={ + "mode": "RDB", + "rdb_config": { + "rdb_snapshot_period": "ONE_HOUR", + "rdb_snapshot_start_time": "2024-10-02T15:01:23Z", + }, + }, + zone_distribution_config={ + "mode": "MULTI_ZONE", + }, + replica_count=1, + maintenance_policy={ + "weekly_maintenance_windows": [{ + "day": "MONDAY", + "start_time": { + "hours": 1, + "minutes": 0, + "seconds": 0, + "nanos": 0, + }, + }], + }, + deletion_protection_enabled=True, + opts = pulumi.ResourceOptions(depends_on=[primary_cluster_region_scp])) + secondary_cluster_producer_subnet = gcp.compute.Subnetwork("secondary_cluster_producer_subnet", + name="mysubnet-secondary-cluster", + ip_cidr_range="10.0.2.0/29", + region="europe-west1", + network=producer_net.id) + secondary_cluster_region_scp = gcp.networkconnectivity.ServiceConnectionPolicy("secondary_cluster_region_scp", + name="mypolicy-secondary-cluster", + location="europe-west1", + service_class="gcp-memorystore-redis", + description="Secondary cluster service connection policy", + network=producer_net.id, + psc_config={ + "subnetworks": [secondary_cluster_producer_subnet.id], + }) + # Secondary cluster + secondary_cluster = gcp.redis.Cluster("secondary_cluster", + name="my-secondary-cluster", + region="europe-west1", + psc_configs=[{ + "network": producer_net.id, + }], + authorization_mode="AUTH_MODE_DISABLED", + transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED", + shard_count=3, + redis_configs={ + "maxmemory-policy": "volatile-ttl", + }, + node_type="REDIS_HIGHMEM_MEDIUM", + persistence_config={ + "mode": "RDB", + "rdb_config": { + "rdb_snapshot_period": "ONE_HOUR", + "rdb_snapshot_start_time": "2024-10-02T15:01:23Z", + }, + }, + zone_distribution_config={ + "mode": "MULTI_ZONE", + }, + replica_count=2, + maintenance_policy={ + "weekly_maintenance_windows": [{ + "day": "WEDNESDAY", + "start_time": { + "hours": 1, + "minutes": 0, + "seconds": 0, + "nanos": 0, + }, + }], + }, + deletion_protection_enabled=True, + cross_cluster_replication_config={ + "cluster_role": "SECONDARY", + "primary_cluster": { + "cluster": primary_cluster.id, + }, + }, + opts = pulumi.ResourceOptions(depends_on=[secondary_cluster_region_scp])) + ``` ### Redis Cluster Rdb ```python @@ -970,6 +1115,7 @@ def __init__(__self__, :param pulumi.Input[str] authorization_mode: Optional. The authorization mode of the Redis cluster. If not provided, auth feature is disabled for the cluster. Default value: "AUTH_MODE_DISABLED" Possible values: ["AUTH_MODE_UNSPECIFIED", "AUTH_MODE_IAM_AUTH", "AUTH_MODE_DISABLED"] + :param pulumi.Input[Union['ClusterCrossClusterReplicationConfigArgs', 'ClusterCrossClusterReplicationConfigArgsDict']] cross_cluster_replication_config: Cross cluster replication config :param pulumi.Input[bool] deletion_protection_enabled: Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster operation will fail. Default value is true. :param pulumi.Input[Union['ClusterMaintenancePolicyArgs', 'ClusterMaintenancePolicyArgsDict']] maintenance_policy: Maintenance policy for a cluster @@ -1000,14 +1146,6 @@ def __init__(__self__, args: ClusterArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A Google Cloud Redis Cluster instance. - - To get more information about Cluster, see: - - * [API documentation](https://cloud.google.com/memorystore/docs/cluster/reference/rest/v1/projects.locations.clusters) - * How-to Guides - * [Official Documentation](https://cloud.google.com/memorystore/docs/cluster/) - ## Example Usage ### Redis Cluster Ha @@ -1112,6 +1250,126 @@ def __init__(__self__, deletion_protection_enabled=True, opts = pulumi.ResourceOptions(depends_on=[default])) ``` + ### Redis Cluster Secondary + + ```python + import pulumi + import pulumi_gcp as gcp + + producer_net = gcp.compute.Network("producer_net", + name="mynetwork", + auto_create_subnetworks=False) + primary_cluster_producer_subnet = gcp.compute.Subnetwork("primary_cluster_producer_subnet", + name="mysubnet-primary-cluster", + ip_cidr_range="10.0.1.0/29", + region="us-east1", + network=producer_net.id) + primary_cluster_region_scp = gcp.networkconnectivity.ServiceConnectionPolicy("primary_cluster_region_scp", + name="mypolicy-primary-cluster", + location="us-east1", + service_class="gcp-memorystore-redis", + description="Primary cluster service connection policy", + network=producer_net.id, + psc_config={ + "subnetworks": [primary_cluster_producer_subnet.id], + }) + # Primary cluster + primary_cluster = gcp.redis.Cluster("primary_cluster", + name="my-primary-cluster", + region="us-east1", + psc_configs=[{ + "network": producer_net.id, + }], + authorization_mode="AUTH_MODE_DISABLED", + transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED", + shard_count=3, + redis_configs={ + "maxmemory-policy": "volatile-ttl", + }, + node_type="REDIS_HIGHMEM_MEDIUM", + persistence_config={ + "mode": "RDB", + "rdb_config": { + "rdb_snapshot_period": "ONE_HOUR", + "rdb_snapshot_start_time": "2024-10-02T15:01:23Z", + }, + }, + zone_distribution_config={ + "mode": "MULTI_ZONE", + }, + replica_count=1, + maintenance_policy={ + "weekly_maintenance_windows": [{ + "day": "MONDAY", + "start_time": { + "hours": 1, + "minutes": 0, + "seconds": 0, + "nanos": 0, + }, + }], + }, + deletion_protection_enabled=True, + opts = pulumi.ResourceOptions(depends_on=[primary_cluster_region_scp])) + secondary_cluster_producer_subnet = gcp.compute.Subnetwork("secondary_cluster_producer_subnet", + name="mysubnet-secondary-cluster", + ip_cidr_range="10.0.2.0/29", + region="europe-west1", + network=producer_net.id) + secondary_cluster_region_scp = gcp.networkconnectivity.ServiceConnectionPolicy("secondary_cluster_region_scp", + name="mypolicy-secondary-cluster", + location="europe-west1", + service_class="gcp-memorystore-redis", + description="Secondary cluster service connection policy", + network=producer_net.id, + psc_config={ + "subnetworks": [secondary_cluster_producer_subnet.id], + }) + # Secondary cluster + secondary_cluster = gcp.redis.Cluster("secondary_cluster", + name="my-secondary-cluster", + region="europe-west1", + psc_configs=[{ + "network": producer_net.id, + }], + authorization_mode="AUTH_MODE_DISABLED", + transit_encryption_mode="TRANSIT_ENCRYPTION_MODE_DISABLED", + shard_count=3, + redis_configs={ + "maxmemory-policy": "volatile-ttl", + }, + node_type="REDIS_HIGHMEM_MEDIUM", + persistence_config={ + "mode": "RDB", + "rdb_config": { + "rdb_snapshot_period": "ONE_HOUR", + "rdb_snapshot_start_time": "2024-10-02T15:01:23Z", + }, + }, + zone_distribution_config={ + "mode": "MULTI_ZONE", + }, + replica_count=2, + maintenance_policy={ + "weekly_maintenance_windows": [{ + "day": "WEDNESDAY", + "start_time": { + "hours": 1, + "minutes": 0, + "seconds": 0, + "nanos": 0, + }, + }], + }, + deletion_protection_enabled=True, + cross_cluster_replication_config={ + "cluster_role": "SECONDARY", + "primary_cluster": { + "cluster": primary_cluster.id, + }, + }, + opts = pulumi.ResourceOptions(depends_on=[secondary_cluster_region_scp])) + ``` ### Redis Cluster Rdb ```python @@ -1280,6 +1538,7 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, authorization_mode: Optional[pulumi.Input[str]] = None, + cross_cluster_replication_config: Optional[pulumi.Input[Union['ClusterCrossClusterReplicationConfigArgs', 'ClusterCrossClusterReplicationConfigArgsDict']]] = None, deletion_protection_enabled: Optional[pulumi.Input[bool]] = None, maintenance_policy: Optional[pulumi.Input[Union['ClusterMaintenancePolicyArgs', 'ClusterMaintenancePolicyArgsDict']]] = None, name: Optional[pulumi.Input[str]] = None, @@ -1303,6 +1562,7 @@ def _internal_init(__self__, __props__ = ClusterArgs.__new__(ClusterArgs) __props__.__dict__["authorization_mode"] = authorization_mode + __props__.__dict__["cross_cluster_replication_config"] = cross_cluster_replication_config __props__.__dict__["deletion_protection_enabled"] = deletion_protection_enabled __props__.__dict__["maintenance_policy"] = maintenance_policy __props__.__dict__["name"] = name @@ -1341,6 +1601,7 @@ def get(resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, authorization_mode: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, + cross_cluster_replication_config: Optional[pulumi.Input[Union['ClusterCrossClusterReplicationConfigArgs', 'ClusterCrossClusterReplicationConfigArgsDict']]] = None, deletion_protection_enabled: Optional[pulumi.Input[bool]] = None, discovery_endpoints: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ClusterDiscoveryEndpointArgs', 'ClusterDiscoveryEndpointArgsDict']]]]] = None, maintenance_policy: Optional[pulumi.Input[Union['ClusterMaintenancePolicyArgs', 'ClusterMaintenancePolicyArgsDict']]] = None, @@ -1375,6 +1636,7 @@ def get(resource_name: str, :param pulumi.Input[str] create_time: The timestamp associated with the cluster creation request. 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". + :param pulumi.Input[Union['ClusterCrossClusterReplicationConfigArgs', 'ClusterCrossClusterReplicationConfigArgsDict']] cross_cluster_replication_config: Cross cluster replication config :param pulumi.Input[bool] deletion_protection_enabled: Optional. Indicates if the cluster is deletion protected or not. If the value if set to true, any delete cluster operation will fail. Default value is true. :param pulumi.Input[Sequence[pulumi.Input[Union['ClusterDiscoveryEndpointArgs', 'ClusterDiscoveryEndpointArgsDict']]]] discovery_endpoints: Output only. Endpoints created on each given network, @@ -1418,6 +1680,7 @@ def get(resource_name: str, __props__.__dict__["authorization_mode"] = authorization_mode __props__.__dict__["create_time"] = create_time + __props__.__dict__["cross_cluster_replication_config"] = cross_cluster_replication_config __props__.__dict__["deletion_protection_enabled"] = deletion_protection_enabled __props__.__dict__["discovery_endpoints"] = discovery_endpoints __props__.__dict__["maintenance_policy"] = maintenance_policy @@ -1461,6 +1724,14 @@ def create_time(self) -> pulumi.Output[str]: """ return pulumi.get(self, "create_time") + @property + @pulumi.getter(name="crossClusterReplicationConfig") + def cross_cluster_replication_config(self) -> pulumi.Output['outputs.ClusterCrossClusterReplicationConfig']: + """ + Cross cluster replication config + """ + return pulumi.get(self, "cross_cluster_replication_config") + @property @pulumi.getter(name="deletionProtectionEnabled") def deletion_protection_enabled(self) -> pulumi.Output[Optional[bool]]: diff --git a/sdk/python/pulumi_gcp/redis/outputs.py b/sdk/python/pulumi_gcp/redis/outputs.py index 9e0dfc681d..15b9e67efb 100644 --- a/sdk/python/pulumi_gcp/redis/outputs.py +++ b/sdk/python/pulumi_gcp/redis/outputs.py @@ -16,6 +16,12 @@ from . import outputs __all__ = [ + 'ClusterCrossClusterReplicationConfig', + 'ClusterCrossClusterReplicationConfigMembership', + 'ClusterCrossClusterReplicationConfigMembershipPrimaryCluster', + 'ClusterCrossClusterReplicationConfigMembershipSecondaryCluster', + 'ClusterCrossClusterReplicationConfigPrimaryCluster', + 'ClusterCrossClusterReplicationConfigSecondaryCluster', 'ClusterDiscoveryEndpoint', 'ClusterDiscoveryEndpointPscConfig', 'ClusterMaintenancePolicy', @@ -46,6 +52,302 @@ 'GetInstanceServerCaCertResult', ] +@pulumi.output_type +class ClusterCrossClusterReplicationConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "clusterRole": + suggest = "cluster_role" + elif key == "primaryCluster": + suggest = "primary_cluster" + elif key == "secondaryClusters": + suggest = "secondary_clusters" + elif key == "updateTime": + suggest = "update_time" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterCrossClusterReplicationConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterCrossClusterReplicationConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterCrossClusterReplicationConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + cluster_role: Optional[str] = None, + memberships: Optional[Sequence['outputs.ClusterCrossClusterReplicationConfigMembership']] = None, + primary_cluster: Optional['outputs.ClusterCrossClusterReplicationConfigPrimaryCluster'] = None, + secondary_clusters: Optional[Sequence['outputs.ClusterCrossClusterReplicationConfigSecondaryCluster']] = None, + update_time: Optional[str] = None): + """ + :param str cluster_role: The role of the cluster in cross cluster replication. Supported values are: + 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + 1. `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. + 1. `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. + 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + :param Sequence['ClusterCrossClusterReplicationConfigMembershipArgs'] memberships: (Output) + An 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. + Structure is documented below. + :param 'ClusterCrossClusterReplicationConfigPrimaryClusterArgs' primary_cluster: 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`. + Structure is documented below. + :param Sequence['ClusterCrossClusterReplicationConfigSecondaryClusterArgs'] secondary_clusters: 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`. + Structure is documented below. + :param str update_time: (Output) + The last time cross cluster replication config was updated. + """ + if cluster_role is not None: + pulumi.set(__self__, "cluster_role", cluster_role) + if memberships is not None: + pulumi.set(__self__, "memberships", memberships) + if primary_cluster is not None: + pulumi.set(__self__, "primary_cluster", primary_cluster) + if secondary_clusters is not None: + pulumi.set(__self__, "secondary_clusters", secondary_clusters) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter(name="clusterRole") + def cluster_role(self) -> Optional[str]: + """ + The role of the cluster in cross cluster replication. Supported values are: + 1. `CLUSTER_ROLE_UNSPECIFIED`: This is an independent cluster that has never participated in cross cluster replication. It allows both reads and writes. + 1. `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. + 1. `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. + 1. `SECONDARY`: This cluster replicates data from the primary cluster. It allows only reads. + Possible values are: `CLUSTER_ROLE_UNSPECIFIED`, `NONE`, `PRIMARY`, `SECONDARY`. + """ + return pulumi.get(self, "cluster_role") + + @property + @pulumi.getter + def memberships(self) -> Optional[Sequence['outputs.ClusterCrossClusterReplicationConfigMembership']]: + """ + (Output) + An 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. + Structure is documented below. + """ + return pulumi.get(self, "memberships") + + @property + @pulumi.getter(name="primaryCluster") + def primary_cluster(self) -> Optional['outputs.ClusterCrossClusterReplicationConfigPrimaryCluster']: + """ + 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`. + Structure is documented below. + """ + return pulumi.get(self, "primary_cluster") + + @property + @pulumi.getter(name="secondaryClusters") + def secondary_clusters(self) -> Optional[Sequence['outputs.ClusterCrossClusterReplicationConfigSecondaryCluster']]: + """ + 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`. + Structure is documented below. + """ + return pulumi.get(self, "secondary_clusters") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[str]: + """ + (Output) + The last time cross cluster replication config was updated. + """ + return pulumi.get(self, "update_time") + + +@pulumi.output_type +class ClusterCrossClusterReplicationConfigMembership(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "primaryClusters": + suggest = "primary_clusters" + elif key == "secondaryClusters": + suggest = "secondary_clusters" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterCrossClusterReplicationConfigMembership. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterCrossClusterReplicationConfigMembership.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterCrossClusterReplicationConfigMembership.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + primary_clusters: Optional[Sequence['outputs.ClusterCrossClusterReplicationConfigMembershipPrimaryCluster']] = None, + secondary_clusters: Optional[Sequence['outputs.ClusterCrossClusterReplicationConfigMembershipSecondaryCluster']] = None): + """ + :param Sequence['ClusterCrossClusterReplicationConfigMembershipPrimaryClusterArgs'] primary_clusters: Details of the primary cluster that is used as the replication source for all the secondary clusters. + :param Sequence['ClusterCrossClusterReplicationConfigMembershipSecondaryClusterArgs'] secondary_clusters: List of secondary clusters that are replicating from the primary cluster. + """ + if primary_clusters is not None: + pulumi.set(__self__, "primary_clusters", primary_clusters) + if secondary_clusters is not None: + pulumi.set(__self__, "secondary_clusters", secondary_clusters) + + @property + @pulumi.getter(name="primaryClusters") + def primary_clusters(self) -> Optional[Sequence['outputs.ClusterCrossClusterReplicationConfigMembershipPrimaryCluster']]: + """ + Details of the primary cluster that is used as the replication source for all the secondary clusters. + """ + return pulumi.get(self, "primary_clusters") + + @property + @pulumi.getter(name="secondaryClusters") + def secondary_clusters(self) -> Optional[Sequence['outputs.ClusterCrossClusterReplicationConfigMembershipSecondaryCluster']]: + """ + List of secondary clusters that are replicating from the primary cluster. + """ + return pulumi.get(self, "secondary_clusters") + + +@pulumi.output_type +class ClusterCrossClusterReplicationConfigMembershipPrimaryCluster(dict): + def __init__(__self__, *, + cluster: Optional[str] = None, + uid: Optional[str] = None): + """ + :param str cluster: The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + :param str uid: (Output) + The unique id of the primary cluster. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if uid is not None: + pulumi.set(__self__, "uid", uid) + + @property + @pulumi.getter + def cluster(self) -> Optional[str]: + """ + The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + return pulumi.get(self, "cluster") + + @property + @pulumi.getter + def uid(self) -> Optional[str]: + """ + (Output) + The unique id of the primary cluster. + """ + return pulumi.get(self, "uid") + + +@pulumi.output_type +class ClusterCrossClusterReplicationConfigMembershipSecondaryCluster(dict): + def __init__(__self__, *, + cluster: Optional[str] = None, + uid: Optional[str] = None): + """ + :param str cluster: (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + :param str uid: (Output) + The unique id of the secondary cluster. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if uid is not None: + pulumi.set(__self__, "uid", uid) + + @property + @pulumi.getter + def cluster(self) -> Optional[str]: + """ + (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + return pulumi.get(self, "cluster") + + @property + @pulumi.getter + def uid(self) -> Optional[str]: + """ + (Output) + The unique id of the secondary cluster. + """ + return pulumi.get(self, "uid") + + +@pulumi.output_type +class ClusterCrossClusterReplicationConfigPrimaryCluster(dict): + def __init__(__self__, *, + cluster: Optional[str] = None, + uid: Optional[str] = None): + """ + :param str cluster: The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + :param str uid: (Output) + The unique id of the primary cluster. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if uid is not None: + pulumi.set(__self__, "uid", uid) + + @property + @pulumi.getter + def cluster(self) -> Optional[str]: + """ + The full resource path of the primary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + return pulumi.get(self, "cluster") + + @property + @pulumi.getter + def uid(self) -> Optional[str]: + """ + (Output) + The unique id of the primary cluster. + """ + return pulumi.get(self, "uid") + + +@pulumi.output_type +class ClusterCrossClusterReplicationConfigSecondaryCluster(dict): + def __init__(__self__, *, + cluster: Optional[str] = None, + uid: Optional[str] = None): + """ + :param str cluster: (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + :param str uid: (Output) + The unique id of the secondary cluster. + """ + if cluster is not None: + pulumi.set(__self__, "cluster", cluster) + if uid is not None: + pulumi.set(__self__, "uid", uid) + + @property + @pulumi.getter + def cluster(self) -> Optional[str]: + """ + (Output) + The full resource path of the secondary cluster in the format: projects/{project}/locations/{region}/clusters/{cluster-id} + """ + return pulumi.get(self, "cluster") + + @property + @pulumi.getter + def uid(self) -> Optional[str]: + """ + (Output) + The unique id of the secondary cluster. + """ + return pulumi.get(self, "uid") + + @pulumi.output_type class ClusterDiscoveryEndpoint(dict): @staticmethod @@ -537,7 +839,7 @@ def __init__(__self__, *, append_fsync: Optional[str] = None): """ :param str append_fsync: Optional. Available fsync modes. - - NO - Do not explicilty call fsync(). Rely on OS defaults. + - NO - Do not explicitly call fsync(). Rely on OS defaults. - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. - ALWAYS - Call fsync() for earch write command. Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. @@ -550,7 +852,7 @@ def __init__(__self__, *, def append_fsync(self) -> Optional[str]: """ Optional. Available fsync modes. - - NO - Do not explicilty call fsync(). Rely on OS defaults. + - NO - Do not explicitly call fsync(). Rely on OS defaults. - EVERYSEC - Call fsync() once per second in a background thread. A balance between performance and durability. - ALWAYS - Call fsync() for earch write command. Possible values are: `APPEND_FSYNC_UNSPECIFIED`, `NO`, `EVERYSEC`, `ALWAYS`. diff --git a/sdk/python/pulumi_gcp/serviceaccount/get_account_id_token.py b/sdk/python/pulumi_gcp/serviceaccount/get_account_id_token.py index 87c0570432..d36ec7e5d0 100644 --- a/sdk/python/pulumi_gcp/serviceaccount/get_account_id_token.py +++ b/sdk/python/pulumi_gcp/serviceaccount/get_account_id_token.py @@ -122,7 +122,7 @@ def get_account_id_token(delegates: Optional[Sequence[str]] = None, ``` ### Service Account Impersonation. - `serviceaccount_get_account_access_token` will use background impersonated credentials provided by `serviceaccount_get_account_access_token`. + `serviceaccount_get_account_id_token` will use background impersonated credentials provided by `serviceaccount_get_account_access_token`. Note: to use the following, you must grant `target_service_account` the `roles/iam.serviceAccountTokenCreator` role on itself. @@ -208,7 +208,7 @@ def get_account_id_token_output(delegates: Optional[pulumi.Input[Optional[Sequen ``` ### Service Account Impersonation. - `serviceaccount_get_account_access_token` will use background impersonated credentials provided by `serviceaccount_get_account_access_token`. + `serviceaccount_get_account_id_token` will use background impersonated credentials provided by `serviceaccount_get_account_access_token`. Note: to use the following, you must grant `target_service_account` the `roles/iam.serviceAccountTokenCreator` role on itself. diff --git a/sdk/python/pulumi_gcp/serviceaccount/get_account_key.py b/sdk/python/pulumi_gcp/serviceaccount/get_account_key.py index 97e727b5fd..6a7d143259 100644 --- a/sdk/python/pulumi_gcp/serviceaccount/get_account_key.py +++ b/sdk/python/pulumi_gcp/serviceaccount/get_account_key.py @@ -120,7 +120,7 @@ def get_account_key(name: Optional[str] = None, :param str name: The name of the service account key. This must have format `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{KEYID}`, where `{ACCOUNT}` is the email address or unique id of the service account. - :param str project: The ID of the project that the service account will be created in. + :param str project: The ID of the project that the service account is present in. Defaults to the provider project configuration. :param str public_key_type: The output format of the public key requested. TYPE_X509_PEM_FILE is the default output format. """ @@ -161,7 +161,7 @@ def get_account_key_output(name: Optional[pulumi.Input[str]] = None, :param str name: The name of the service account key. This must have format `projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT}/keys/{KEYID}`, where `{ACCOUNT}` is the email address or unique id of the service account. - :param str project: The ID of the project that the service account will be created in. + :param str project: The ID of the project that the service account is present in. Defaults to the provider project configuration. :param str public_key_type: The output format of the public key requested. TYPE_X509_PEM_FILE is the default output format. """ diff --git a/sdk/python/pulumi_gcp/storage/get_bucket.py b/sdk/python/pulumi_gcp/storage/get_bucket.py index e23be350ae..29c67eccb7 100644 --- a/sdk/python/pulumi_gcp/storage/get_bucket.py +++ b/sdk/python/pulumi_gcp/storage/get_bucket.py @@ -322,7 +322,7 @@ def get_bucket(name: Optional[str] = None, :param str name: The name of the bucket. - :param str project: 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. + :param str project: 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. """ __args__ = dict() __args__['name'] = name @@ -380,7 +380,7 @@ def get_bucket_output(name: Optional[pulumi.Input[str]] = None, :param str name: The name of the bucket. - :param str project: 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. + :param str project: 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. """ __args__ = dict() __args__['name'] = name diff --git a/sdk/python/pulumi_gcp/storage/get_bucket_object_content.py b/sdk/python/pulumi_gcp/storage/get_bucket_object_content.py index 73f476e493..0f2bbe31b2 100644 --- a/sdk/python/pulumi_gcp/storage/get_bucket_object_content.py +++ b/sdk/python/pulumi_gcp/storage/get_bucket_object_content.py @@ -270,7 +270,7 @@ def get_bucket_object_content(bucket: Optional[str] = None, and [API](https://cloud.google.com/storage/docs/json_api/v1/objects). - > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. ## Example Usage @@ -332,7 +332,7 @@ def get_bucket_object_content_output(bucket: Optional[pulumi.Input[str]] = None, and [API](https://cloud.google.com/storage/docs/json_api/v1/objects). - > **Warning:** The object content will be saved in the state, and visiable to everyone who has access to the state file. + > **Warning:** The object content will be saved in the state, and visible to everyone who has access to the state file. ## Example Usage diff --git a/sdk/python/pulumi_gcp/tpu/__init__.py b/sdk/python/pulumi_gcp/tpu/__init__.py index f1e57364ae..b010442054 100644 --- a/sdk/python/pulumi_gcp/tpu/__init__.py +++ b/sdk/python/pulumi_gcp/tpu/__init__.py @@ -9,6 +9,7 @@ from .get_v2_accelerator_types import * from .get_v2_runtime_versions import * from .node import * +from .v2_queued_resource import * from .v2_vm import * from ._inputs import * from . import outputs diff --git a/sdk/python/pulumi_gcp/tpu/_inputs.py b/sdk/python/pulumi_gcp/tpu/_inputs.py index e7f15fe801..ddfaa361c0 100644 --- a/sdk/python/pulumi_gcp/tpu/_inputs.py +++ b/sdk/python/pulumi_gcp/tpu/_inputs.py @@ -19,6 +19,12 @@ 'NodeNetworkEndpointArgsDict', 'NodeSchedulingConfigArgs', 'NodeSchedulingConfigArgsDict', + 'V2QueuedResourceTpuArgs', + 'V2QueuedResourceTpuArgsDict', + 'V2QueuedResourceTpuNodeSpecArgs', + 'V2QueuedResourceTpuNodeSpecArgsDict', + 'V2QueuedResourceTpuNodeSpecNodeArgs', + 'V2QueuedResourceTpuNodeSpecNodeArgsDict', 'V2VmAcceleratorConfigArgs', 'V2VmAcceleratorConfigArgsDict', 'V2VmDataDiskArgs', @@ -130,6 +136,185 @@ def preemptible(self, value: pulumi.Input[bool]): pulumi.set(self, "preemptible", value) +if not MYPY: + class V2QueuedResourceTpuArgsDict(TypedDict): + node_specs: NotRequired[pulumi.Input[Sequence[pulumi.Input['V2QueuedResourceTpuNodeSpecArgsDict']]]] + """ + The TPU node(s) being requested. + Structure is documented below. + """ +elif False: + V2QueuedResourceTpuArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class V2QueuedResourceTpuArgs: + def __init__(__self__, *, + node_specs: Optional[pulumi.Input[Sequence[pulumi.Input['V2QueuedResourceTpuNodeSpecArgs']]]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input['V2QueuedResourceTpuNodeSpecArgs']]] node_specs: The TPU node(s) being requested. + Structure is documented below. + """ + if node_specs is not None: + pulumi.set(__self__, "node_specs", node_specs) + + @property + @pulumi.getter(name="nodeSpecs") + def node_specs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['V2QueuedResourceTpuNodeSpecArgs']]]]: + """ + The TPU node(s) being requested. + Structure is documented below. + """ + return pulumi.get(self, "node_specs") + + @node_specs.setter + def node_specs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['V2QueuedResourceTpuNodeSpecArgs']]]]): + pulumi.set(self, "node_specs", value) + + +if not MYPY: + class V2QueuedResourceTpuNodeSpecArgsDict(TypedDict): + node: pulumi.Input['V2QueuedResourceTpuNodeSpecNodeArgsDict'] + """ + The node. + Structure is documented below. + """ + parent: pulumi.Input[str] + """ + The parent resource name. + """ + node_id: NotRequired[pulumi.Input[str]] + """ + Unqualified node identifier used to identify the node in the project once provisioned. + """ +elif False: + V2QueuedResourceTpuNodeSpecArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class V2QueuedResourceTpuNodeSpecArgs: + def __init__(__self__, *, + node: pulumi.Input['V2QueuedResourceTpuNodeSpecNodeArgs'], + parent: pulumi.Input[str], + node_id: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input['V2QueuedResourceTpuNodeSpecNodeArgs'] node: The node. + Structure is documented below. + :param pulumi.Input[str] parent: The parent resource name. + :param pulumi.Input[str] node_id: Unqualified node identifier used to identify the node in the project once provisioned. + """ + pulumi.set(__self__, "node", node) + pulumi.set(__self__, "parent", parent) + if node_id is not None: + pulumi.set(__self__, "node_id", node_id) + + @property + @pulumi.getter + def node(self) -> pulumi.Input['V2QueuedResourceTpuNodeSpecNodeArgs']: + """ + The node. + Structure is documented below. + """ + return pulumi.get(self, "node") + + @node.setter + def node(self, value: pulumi.Input['V2QueuedResourceTpuNodeSpecNodeArgs']): + pulumi.set(self, "node", value) + + @property + @pulumi.getter + def parent(self) -> pulumi.Input[str]: + """ + The parent resource name. + """ + return pulumi.get(self, "parent") + + @parent.setter + def parent(self, value: pulumi.Input[str]): + pulumi.set(self, "parent", value) + + @property + @pulumi.getter(name="nodeId") + def node_id(self) -> Optional[pulumi.Input[str]]: + """ + Unqualified node identifier used to identify the node in the project once provisioned. + """ + return pulumi.get(self, "node_id") + + @node_id.setter + def node_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "node_id", value) + + +if not MYPY: + class V2QueuedResourceTpuNodeSpecNodeArgsDict(TypedDict): + runtime_version: pulumi.Input[str] + """ + Runtime version for the TPU. + """ + accelerator_type: NotRequired[pulumi.Input[str]] + """ + TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + """ + description: NotRequired[pulumi.Input[str]] + """ + Text description of the TPU. + """ +elif False: + V2QueuedResourceTpuNodeSpecNodeArgsDict: TypeAlias = Mapping[str, Any] + +@pulumi.input_type +class V2QueuedResourceTpuNodeSpecNodeArgs: + def __init__(__self__, *, + runtime_version: pulumi.Input[str], + accelerator_type: Optional[pulumi.Input[str]] = None, + description: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] runtime_version: Runtime version for the TPU. + :param pulumi.Input[str] accelerator_type: TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + :param pulumi.Input[str] description: Text description of the TPU. + """ + pulumi.set(__self__, "runtime_version", runtime_version) + if accelerator_type is not None: + pulumi.set(__self__, "accelerator_type", accelerator_type) + if description is not None: + pulumi.set(__self__, "description", description) + + @property + @pulumi.getter(name="runtimeVersion") + def runtime_version(self) -> pulumi.Input[str]: + """ + Runtime version for the TPU. + """ + return pulumi.get(self, "runtime_version") + + @runtime_version.setter + def runtime_version(self, value: pulumi.Input[str]): + pulumi.set(self, "runtime_version", value) + + @property + @pulumi.getter(name="acceleratorType") + def accelerator_type(self) -> Optional[pulumi.Input[str]]: + """ + TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + """ + return pulumi.get(self, "accelerator_type") + + @accelerator_type.setter + def accelerator_type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "accelerator_type", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + Text description of the TPU. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + if not MYPY: class V2VmAcceleratorConfigArgsDict(TypedDict): topology: pulumi.Input[str] @@ -138,8 +323,7 @@ class V2VmAcceleratorConfigArgsDict(TypedDict): """ type: pulumi.Input[str] """ - Type of TPU. - Possible values are: `V2`, `V3`, `V4`, `V5P`. + Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type """ elif False: V2VmAcceleratorConfigArgsDict: TypeAlias = Mapping[str, Any] @@ -151,8 +335,7 @@ def __init__(__self__, *, type: pulumi.Input[str]): """ :param pulumi.Input[str] topology: Topology of TPU in chips. - :param pulumi.Input[str] type: Type of TPU. - Possible values are: `V2`, `V3`, `V4`, `V5P`. + :param pulumi.Input[str] type: Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type """ pulumi.set(__self__, "topology", topology) pulumi.set(__self__, "type", type) @@ -173,8 +356,7 @@ def topology(self, value: pulumi.Input[str]): @pulumi.getter def type(self) -> pulumi.Input[str]: """ - Type of TPU. - Possible values are: `V2`, `V3`, `V4`, `V5P`. + Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type """ return pulumi.get(self, "type") diff --git a/sdk/python/pulumi_gcp/tpu/outputs.py b/sdk/python/pulumi_gcp/tpu/outputs.py index 5c42ef6456..f744c6c297 100644 --- a/sdk/python/pulumi_gcp/tpu/outputs.py +++ b/sdk/python/pulumi_gcp/tpu/outputs.py @@ -18,6 +18,9 @@ __all__ = [ 'NodeNetworkEndpoint', 'NodeSchedulingConfig', + 'V2QueuedResourceTpu', + 'V2QueuedResourceTpuNodeSpec', + 'V2QueuedResourceTpuNodeSpecNode', 'V2VmAcceleratorConfig', 'V2VmDataDisk', 'V2VmNetworkConfig', @@ -99,6 +102,165 @@ def preemptible(self) -> bool: return pulumi.get(self, "preemptible") +@pulumi.output_type +class V2QueuedResourceTpu(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "nodeSpecs": + suggest = "node_specs" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in V2QueuedResourceTpu. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + V2QueuedResourceTpu.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + V2QueuedResourceTpu.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + node_specs: Optional[Sequence['outputs.V2QueuedResourceTpuNodeSpec']] = None): + """ + :param Sequence['V2QueuedResourceTpuNodeSpecArgs'] node_specs: The TPU node(s) being requested. + Structure is documented below. + """ + if node_specs is not None: + pulumi.set(__self__, "node_specs", node_specs) + + @property + @pulumi.getter(name="nodeSpecs") + def node_specs(self) -> Optional[Sequence['outputs.V2QueuedResourceTpuNodeSpec']]: + """ + The TPU node(s) being requested. + Structure is documented below. + """ + return pulumi.get(self, "node_specs") + + +@pulumi.output_type +class V2QueuedResourceTpuNodeSpec(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "nodeId": + suggest = "node_id" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in V2QueuedResourceTpuNodeSpec. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + V2QueuedResourceTpuNodeSpec.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + V2QueuedResourceTpuNodeSpec.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + node: 'outputs.V2QueuedResourceTpuNodeSpecNode', + parent: str, + node_id: Optional[str] = None): + """ + :param 'V2QueuedResourceTpuNodeSpecNodeArgs' node: The node. + Structure is documented below. + :param str parent: The parent resource name. + :param str node_id: Unqualified node identifier used to identify the node in the project once provisioned. + """ + pulumi.set(__self__, "node", node) + pulumi.set(__self__, "parent", parent) + if node_id is not None: + pulumi.set(__self__, "node_id", node_id) + + @property + @pulumi.getter + def node(self) -> 'outputs.V2QueuedResourceTpuNodeSpecNode': + """ + The node. + Structure is documented below. + """ + return pulumi.get(self, "node") + + @property + @pulumi.getter + def parent(self) -> str: + """ + The parent resource name. + """ + return pulumi.get(self, "parent") + + @property + @pulumi.getter(name="nodeId") + def node_id(self) -> Optional[str]: + """ + Unqualified node identifier used to identify the node in the project once provisioned. + """ + return pulumi.get(self, "node_id") + + +@pulumi.output_type +class V2QueuedResourceTpuNodeSpecNode(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "runtimeVersion": + suggest = "runtime_version" + elif key == "acceleratorType": + suggest = "accelerator_type" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in V2QueuedResourceTpuNodeSpecNode. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + V2QueuedResourceTpuNodeSpecNode.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + V2QueuedResourceTpuNodeSpecNode.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + runtime_version: str, + accelerator_type: Optional[str] = None, + description: Optional[str] = None): + """ + :param str runtime_version: Runtime version for the TPU. + :param str accelerator_type: TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + :param str description: Text description of the TPU. + """ + pulumi.set(__self__, "runtime_version", runtime_version) + if accelerator_type is not None: + pulumi.set(__self__, "accelerator_type", accelerator_type) + if description is not None: + pulumi.set(__self__, "description", description) + + @property + @pulumi.getter(name="runtimeVersion") + def runtime_version(self) -> str: + """ + Runtime version for the TPU. + """ + return pulumi.get(self, "runtime_version") + + @property + @pulumi.getter(name="acceleratorType") + def accelerator_type(self) -> Optional[str]: + """ + TPU accelerator type for the TPU. If not specified, this defaults to 'v2-8'. + """ + return pulumi.get(self, "accelerator_type") + + @property + @pulumi.getter + def description(self) -> Optional[str]: + """ + Text description of the TPU. + """ + return pulumi.get(self, "description") + + @pulumi.output_type class V2VmAcceleratorConfig(dict): def __init__(__self__, *, @@ -106,8 +268,7 @@ def __init__(__self__, *, type: str): """ :param str topology: Topology of TPU in chips. - :param str type: Type of TPU. - Possible values are: `V2`, `V3`, `V4`, `V5P`. + :param str type: Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type """ pulumi.set(__self__, "topology", topology) pulumi.set(__self__, "type", type) @@ -124,8 +285,7 @@ def topology(self) -> str: @pulumi.getter def type(self) -> str: """ - Type of TPU. - Possible values are: `V2`, `V3`, `V4`, `V5P`. + Type of TPU. Please select one of the allowed types: https://cloud.google.com/tpu/docs/reference/rest/v2/AcceleratorConfig#Type """ return pulumi.get(self, "type") diff --git a/sdk/python/pulumi_gcp/tpu/v2_queued_resource.py b/sdk/python/pulumi_gcp/tpu/v2_queued_resource.py new file mode 100644 index 0000000000..b8645a5cd2 --- /dev/null +++ b/sdk/python/pulumi_gcp/tpu/v2_queued_resource.py @@ -0,0 +1,434 @@ +# coding=utf-8 +# *** 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! *** + +import copy +import warnings +import sys +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +if sys.version_info >= (3, 11): + from typing import NotRequired, TypedDict, TypeAlias +else: + from typing_extensions import NotRequired, TypedDict, TypeAlias +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['V2QueuedResourceArgs', 'V2QueuedResource'] + +@pulumi.input_type +class V2QueuedResourceArgs: + def __init__(__self__, *, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + tpu: Optional[pulumi.Input['V2QueuedResourceTpuArgs']] = None, + zone: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a V2QueuedResource resource. + :param pulumi.Input[str] name: The immutable name of the Queued Resource. + + + - - - + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input['V2QueuedResourceTpuArgs'] tpu: Defines a TPU resource. + Structure is documented below. + :param pulumi.Input[str] zone: The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + """ + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + if tpu is not None: + pulumi.set(__self__, "tpu", tpu) + if zone is not None: + pulumi.set(__self__, "zone", zone) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The immutable name of the Queued Resource. + + + - - - + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter + def tpu(self) -> Optional[pulumi.Input['V2QueuedResourceTpuArgs']]: + """ + Defines a TPU resource. + Structure is documented below. + """ + return pulumi.get(self, "tpu") + + @tpu.setter + def tpu(self, value: Optional[pulumi.Input['V2QueuedResourceTpuArgs']]): + pulumi.set(self, "tpu", value) + + @property + @pulumi.getter + def zone(self) -> Optional[pulumi.Input[str]]: + """ + The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + """ + return pulumi.get(self, "zone") + + @zone.setter + def zone(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "zone", value) + + +@pulumi.input_type +class _V2QueuedResourceState: + def __init__(__self__, *, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + tpu: Optional[pulumi.Input['V2QueuedResourceTpuArgs']] = None, + zone: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering V2QueuedResource resources. + :param pulumi.Input[str] name: The immutable name of the Queued Resource. + + + - - - + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input['V2QueuedResourceTpuArgs'] tpu: Defines a TPU resource. + Structure is documented below. + :param pulumi.Input[str] zone: The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + """ + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + if tpu is not None: + pulumi.set(__self__, "tpu", tpu) + if zone is not None: + pulumi.set(__self__, "zone", zone) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The immutable name of the Queued Resource. + + + - - - + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter + def tpu(self) -> Optional[pulumi.Input['V2QueuedResourceTpuArgs']]: + """ + Defines a TPU resource. + Structure is documented below. + """ + return pulumi.get(self, "tpu") + + @tpu.setter + def tpu(self, value: Optional[pulumi.Input['V2QueuedResourceTpuArgs']]): + pulumi.set(self, "tpu", value) + + @property + @pulumi.getter + def zone(self) -> Optional[pulumi.Input[str]]: + """ + The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + """ + return pulumi.get(self, "zone") + + @zone.setter + def zone(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "zone", value) + + +class V2QueuedResource(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + tpu: Optional[pulumi.Input[Union['V2QueuedResourceTpuArgs', 'V2QueuedResourceTpuArgsDict']]] = None, + zone: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + + ### Tpu V2 Queued Resource Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + qr = gcp.tpu.V2QueuedResource("qr", + name="test-qr", + zone="us-central1-c", + project="my-project-name", + tpu={ + "node_specs": [{ + "parent": "projects/my-project-name/locations/us-central1-c", + "node_id": "test-tpu", + "node": { + "runtime_version": "tpu-vm-tf-2.13.0", + "accelerator_type": "v2-8", + "description": "Text description of the TPU.", + }, + }], + }) + ``` + + ## Import + + QueuedResource can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{zone}}/queuedResources/{{name}}` + + * `{{project}}/{{zone}}/{{name}}` + + * `{{zone}}/{{name}}` + + * `{{name}}` + + When using the `pulumi import` command, QueuedResource can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default projects/{{project}}/locations/{{zone}}/queuedResources/{{name}} + ``` + + ```sh + $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{project}}/{{zone}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{zone}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] name: The immutable name of the Queued Resource. + + + - - - + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Union['V2QueuedResourceTpuArgs', 'V2QueuedResourceTpuArgsDict']] tpu: Defines a TPU resource. + Structure is documented below. + :param pulumi.Input[str] zone: The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: Optional[V2QueuedResourceArgs] = None, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + + ### Tpu V2 Queued Resource Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + qr = gcp.tpu.V2QueuedResource("qr", + name="test-qr", + zone="us-central1-c", + project="my-project-name", + tpu={ + "node_specs": [{ + "parent": "projects/my-project-name/locations/us-central1-c", + "node_id": "test-tpu", + "node": { + "runtime_version": "tpu-vm-tf-2.13.0", + "accelerator_type": "v2-8", + "description": "Text description of the TPU.", + }, + }], + }) + ``` + + ## Import + + QueuedResource can be imported using any of these accepted formats: + + * `projects/{{project}}/locations/{{zone}}/queuedResources/{{name}}` + + * `{{project}}/{{zone}}/{{name}}` + + * `{{zone}}/{{name}}` + + * `{{name}}` + + When using the `pulumi import` command, QueuedResource can be imported using one of the formats above. For example: + + ```sh + $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default projects/{{project}}/locations/{{zone}}/queuedResources/{{name}} + ``` + + ```sh + $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{project}}/{{zone}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{zone}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:tpu/v2QueuedResource:V2QueuedResource default {{name}} + ``` + + :param str resource_name: The name of the resource. + :param V2QueuedResourceArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(V2QueuedResourceArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + tpu: Optional[pulumi.Input[Union['V2QueuedResourceTpuArgs', 'V2QueuedResourceTpuArgsDict']]] = None, + zone: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = V2QueuedResourceArgs.__new__(V2QueuedResourceArgs) + + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["tpu"] = tpu + __props__.__dict__["zone"] = zone + super(V2QueuedResource, __self__).__init__( + 'gcp:tpu/v2QueuedResource:V2QueuedResource', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + tpu: Optional[pulumi.Input[Union['V2QueuedResourceTpuArgs', 'V2QueuedResourceTpuArgsDict']]] = None, + zone: Optional[pulumi.Input[str]] = None) -> 'V2QueuedResource': + """ + Get an existing V2QueuedResource resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] name: The immutable name of the Queued Resource. + + + - - - + :param pulumi.Input[str] project: The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + :param pulumi.Input[Union['V2QueuedResourceTpuArgs', 'V2QueuedResourceTpuArgsDict']] tpu: Defines a TPU resource. + Structure is documented below. + :param pulumi.Input[str] zone: The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _V2QueuedResourceState.__new__(_V2QueuedResourceState) + + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["tpu"] = tpu + __props__.__dict__["zone"] = zone + return V2QueuedResource(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The immutable name of the Queued Resource. + + + - - - + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The ID of the project in which the resource belongs. + If it is not provided, the provider project is used. + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter + def tpu(self) -> pulumi.Output[Optional['outputs.V2QueuedResourceTpu']]: + """ + Defines a TPU resource. + Structure is documented below. + """ + return pulumi.get(self, "tpu") + + @property + @pulumi.getter + def zone(self) -> pulumi.Output[str]: + """ + The GCP location for the Queued Resource. If it is not provided, the provider zone is used. + """ + return pulumi.get(self, "zone") + diff --git a/sdk/python/pulumi_gcp/vertex/ai_endpoint.py b/sdk/python/pulumi_gcp/vertex/ai_endpoint.py index c269028159..ffaa8da7e2 100644 --- a/sdk/python/pulumi_gcp/vertex/ai_endpoint.py +++ b/sdk/python/pulumi_gcp/vertex/ai_endpoint.py @@ -730,7 +730,7 @@ def __init__(__self__, project = gcp.organizations.get_project() endpoint = gcp.vertex.AiEndpoint("endpoint", - name="endpoint-name_69391", + name="endpoint-name_8270", display_name="sample-endpoint", description="A sample vertex endpoint", location="us-central1", @@ -751,7 +751,7 @@ def __init__(__self__, import pulumi_gcp as gcp endpoint = gcp.vertex.AiEndpoint("endpoint", - name="endpoint-name_8270", + name="endpoint-name_41150", display_name="sample-endpoint", description="A sample vertex endpoint", location="us-central1", @@ -896,7 +896,7 @@ def __init__(__self__, project = gcp.organizations.get_project() endpoint = gcp.vertex.AiEndpoint("endpoint", - name="endpoint-name_69391", + name="endpoint-name_8270", display_name="sample-endpoint", description="A sample vertex endpoint", location="us-central1", @@ -917,7 +917,7 @@ def __init__(__self__, import pulumi_gcp as gcp endpoint = gcp.vertex.AiEndpoint("endpoint", - name="endpoint-name_8270", + name="endpoint-name_41150", display_name="sample-endpoint", description="A sample vertex endpoint", location="us-central1", diff --git a/sdk/python/pulumi_gcp/vertex/ai_feature_online_store_featureview.py b/sdk/python/pulumi_gcp/vertex/ai_feature_online_store_featureview.py index 446b5e21bb..eceecbf6f2 100644 --- a/sdk/python/pulumi_gcp/vertex/ai_feature_online_store_featureview.py +++ b/sdk/python/pulumi_gcp/vertex/ai_feature_online_store_featureview.py @@ -618,8 +618,8 @@ def __init__(__self__, test_project = gcp.organizations.get_project() project = gcp.organizations.Project("project", - project_id="tf-test_41150", - name="tf-test_89313", + project_id="tf-test_89313", + name="tf-test_60646", org_id="123456789", billing_account="000000-0000000-0000000-000000", deletion_policy="DELETE") @@ -1063,8 +1063,8 @@ def __init__(__self__, test_project = gcp.organizations.get_project() project = gcp.organizations.Project("project", - project_id="tf-test_41150", - name="tf-test_89313", + project_id="tf-test_89313", + name="tf-test_60646", org_id="123456789", billing_account="000000-0000000-0000000-000000", deletion_policy="DELETE") diff --git a/sdk/python/pulumi_gcp/vertex/ai_index_endpoint.py b/sdk/python/pulumi_gcp/vertex/ai_index_endpoint.py index 480a8bc468..1aedf95476 100644 --- a/sdk/python/pulumi_gcp/vertex/ai_index_endpoint.py +++ b/sdk/python/pulumi_gcp/vertex/ai_index_endpoint.py @@ -510,7 +510,7 @@ def __init__(__self__, }, private_service_connect_config={ "enable_private_service_connect": True, - "project_allowlists": [project.number], + "project_allowlists": [project.name], }) ``` ### Vertex Ai Index Endpoint With Public Endpoint @@ -639,7 +639,7 @@ def __init__(__self__, }, private_service_connect_config={ "enable_private_service_connect": True, - "project_allowlists": [project.number], + "project_allowlists": [project.name], }) ``` ### Vertex Ai Index Endpoint With Public Endpoint diff --git a/upstream b/upstream index 9ac2c757b0..3cb3eb06bf 160000 --- a/upstream +++ b/upstream @@ -1 +1 @@ -Subproject commit 9ac2c757b0ae848b650ff9be622759aaa987cdd2 +Subproject commit 3cb3eb06bf67ded186d86cdf7e0e542dc98e5fdb