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 d3c7eafc1f..3ce2fc5d75 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,7 +5,7 @@ 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 16cc296c2..da372674a 100644
+index a828724b0..196f48c7e 100644
--- a/google-beta/services/sql/resource_sql_database_instance.go
+++ b/google-beta/services/sql/resource_sql_database_instance.go
@@ -2062,6 +2062,10 @@ func resourceSqlDatabaseInstanceImport(d *schema.ResourceData, meta interface{})
diff --git a/patches/0006-docs-patching.patch b/patches/0006-docs-patching.patch
index 758c807d95..98f952cfd6 100644
--- a/patches/0006-docs-patching.patch
+++ b/patches/0006-docs-patching.patch
@@ -522,12 +522,12 @@ 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 77abc0296..46bd484a8 100644
+index bc7b99b97..2e32cd9b9 100644
--- a/website/docs/r/composer_environment.html.markdown
+++ b/website/docs/r/composer_environment.html.markdown
-@@ -32,24 +32,21 @@ To get more information about Environments, see:
+@@ -31,24 +31,21 @@ To get more information about Environments, see:
+ of Airflow, bugfixes, and security updates. We recommend using
Cloud Composer 2 or Cloud Composer 3 instead.
-
-Several special considerations apply to managing Cloud Composer environments
-with Terraform:
@@ -1611,7 +1611,7 @@ index f18c91533..924ad4cc0 100644
diff --git a/website/docs/r/container_cluster.html.markdown b/website/docs/r/container_cluster.html.markdown
-index 411ac707c..117c575f2 100644
+index 73120a1c1..93f2c3d03 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:
@@ -1702,7 +1702,7 @@ index 411ac707c..117c575f2 100644
release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"`
channel. Structure is [documented below](#nested_release_channel).
-@@ -870,8 +888,6 @@ gvnic {
+@@ -874,8 +892,6 @@ gvnic {
* `guest_accelerator` - (Optional) List of the type and count of accelerator cards attached to the instance.
Structure [documented below](#nested_guest_accelerator).
@@ -1711,7 +1711,7 @@ index 411ac707c..117c575f2 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.
-@@ -892,7 +908,7 @@ gvnic {
+@@ -896,7 +912,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
@@ -1720,7 +1720,7 @@ index 411ac707c..117c575f2 100644
value in your config.
* `min_cpu_platform` - (Optional) Minimum CPU platform to be used by this instance.
-@@ -917,10 +933,7 @@ gvnic {
+@@ -921,10 +937,7 @@ gvnic {
See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms)
for more information. Defaults to false.
@@ -1732,7 +1732,7 @@ index 411ac707c..117c575f2 100644
* `service_account` - (Optional) The service account to be used by the Node VMs.
If not specified, the "default" service account is used.
-@@ -932,13 +945,14 @@ gvnic {
+@@ -936,13 +949,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}`.
@@ -1754,7 +1754,7 @@ index 411ac707c..117c575f2 100644
* `workload_metadata_config` - (Optional) Metadata configuration to expose to workloads on the node pool.
Structure is [documented below](#nested_workload_metadata_config).
-@@ -991,6 +1005,20 @@ sole_tenant_config {
+@@ -995,6 +1009,20 @@ sole_tenant_config {
* `enable_nested_virtualization`- (Optional) Defines whether the instance should have nested virtualization enabled. Defaults to false.
@@ -1775,7 +1775,7 @@ index 411ac707c..117c575f2 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.
-@@ -1151,7 +1179,7 @@ for more details. This field only applies to private clusters, when
+@@ -1155,7 +1183,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
@@ -1784,7 +1784,7 @@ index 411ac707c..117c575f2 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:
-@@ -1252,9 +1280,9 @@ Enables monitoring and attestation of the boot integrity of the instance. The at
+@@ -1256,9 +1284,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:
@@ -2707,7 +2707,7 @@ index 1e419d9e4..16c9465d2 100644
## Example Usage
diff --git a/website/docs/r/google_project.html.markdown b/website/docs/r/google_project.html.markdown
-index 00ee09dc4..304699bf9 100644
+index fff53a4a8..f9dc5f497 100644
--- a/website/docs/r/google_project.html.markdown
+++ b/website/docs/r/google_project.html.markdown
@@ -11,15 +11,13 @@ Allows creation and management of a Google Cloud Platform project.
@@ -2738,11 +2738,11 @@ index 00ee09dc4..304699bf9 100644
See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access)
for more details.
--* `skip_delete` - (Optional) If true, the Terraform resource can be deleted
-+* `skip_delete` - (Optional) If true, the resource can be deleted
- without deleting the Project via the Google API. `skip_delete` is deprecated and will be removed in a future major release. The new release adds support for `deletion_policy` instead.
-
- * `labels` - (Optional) A set of key/value label pairs to assign to the project.
+-* `skip_delete` - (Optional) If true, the Terraform resource can be deleted without
++* `skip_delete` - (Optional) If true, the resource can be deleted without
+ deleting the Project via the Google API. `skip_delete` is deprecated and will be
+ removed in 6.0.0. Please use deletion_policy instead. A `skip_delete` value of `false`
+ can be changed to a `deletion_policy` value of `DELETE` and a `skip_delete` value of `true`
diff --git a/website/docs/r/google_project_iam.html.markdown b/website/docs/r/google_project_iam.html.markdown
index 46cae09f8..69b15c96e 100644
--- a/website/docs/r/google_project_iam.html.markdown
@@ -3599,7 +3599,7 @@ index 2ac02739f..da87bdaae 100644
The `encryption_config` block supports:
diff --git a/website/docs/r/sql_database_instance.html.markdown b/website/docs/r/sql_database_instance.html.markdown
-index 429b84d0d..195b61f47 100644
+index da7cc31cf..56e5111f0 100644
--- a/website/docs/r/sql_database_instance.html.markdown
+++ b/website/docs/r/sql_database_instance.html.markdown
@@ -10,12 +10,12 @@ Creates a new Google SQL Database Instance. For more information, see the [offic
@@ -3790,7 +3790,7 @@ index 762e52b5f..e0fd45e24 100644
## Attributes Reference
diff --git a/website/docs/r/storage_bucket_object.html.markdown b/website/docs/r/storage_bucket_object.html.markdown
-index 92eec523d..2ecef695c 100644
+index c58c1c856..4278b76f6 100644
--- a/website/docs/r/storage_bucket_object.html.markdown
+++ b/website/docs/r/storage_bucket_object.html.markdown
@@ -48,7 +48,7 @@ The following arguments are supported:
diff --git a/patches/0009-Fix-794-with-an-unconditional-read.patch b/patches/0009-Fix-794-with-an-unconditional-read.patch
index 83b53e133c..3929de57c5 100644
--- a/patches/0009-Fix-794-with-an-unconditional-read.patch
+++ b/patches/0009-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 da372674a..db76a3d3e 100644
+index 196f48c7e..ae5e9d0c7 100644
--- a/google-beta/services/sql/resource_sql_database_instance.go
+++ b/google-beta/services/sql/resource_sql_database_instance.go
@@ -1917,10 +1917,11 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
diff --git a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json
index 95bdbbc8c8..f3bdb6f812 100644
--- a/provider/cmd/pulumi-resource-gcp/bridge-metadata.json
+++ b/provider/cmd/pulumi-resource-gcp/bridge-metadata.json
@@ -493,6 +493,87 @@
}
}
},
+ "google_access_context_manager_service_perimeter_dry_run_egress_policy": {
+ "current": "gcp:accesscontextmanager/servicePerimeterDryRunEgressPolicy:ServicePerimeterDryRunEgressPolicy",
+ "majorVersion": 7,
+ "fields": {
+ "egress_from": {
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "identities": {
+ "maxItemsOne": false
+ },
+ "sources": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
+ "egress_to": {
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "external_resources": {
+ "maxItemsOne": false
+ },
+ "operations": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "method_selectors": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
+ "resources": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ },
+ "google_access_context_manager_service_perimeter_dry_run_ingress_policy": {
+ "current": "gcp:accesscontextmanager/servicePerimeterDryRunIngressPolicy:ServicePerimeterDryRunIngressPolicy",
+ "majorVersion": 7,
+ "fields": {
+ "ingress_from": {
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "identities": {
+ "maxItemsOne": false
+ },
+ "sources": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
+ "ingress_to": {
+ "maxItemsOne": true,
+ "elem": {
+ "fields": {
+ "operations": {
+ "maxItemsOne": false,
+ "elem": {
+ "fields": {
+ "method_selectors": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ },
+ "resources": {
+ "maxItemsOne": false
+ }
+ }
+ }
+ }
+ }
+ },
"google_access_context_manager_service_perimeter_dry_run_resource": {
"current": "gcp:accesscontextmanager/servicePerimeterDryRunResource:ServicePerimeterDryRunResource",
"majorVersion": 7
@@ -9672,6 +9753,9 @@
}
}
},
+ "auto_provisioning_locations": {
+ "maxItemsOne": false
+ },
"resource_limits": {
"maxItemsOne": false
}
@@ -24244,6 +24328,10 @@
"current": "gcp:securitycenter/sourceIamPolicy:SourceIamPolicy",
"majorVersion": 7
},
+ "google_scc_v2_folder_mute_config": {
+ "current": "gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig",
+ "majorVersion": 7
+ },
"google_scc_v2_organization_mute_config": {
"current": "gcp:securitycenter/v2OrganizationMuteConfig:V2OrganizationMuteConfig",
"majorVersion": 7
@@ -24257,6 +24345,48 @@
}
}
},
+ "google_scc_v2_organization_source": {
+ "current": "gcp:securitycenter/v2OrganizationSource:V2OrganizationSource",
+ "majorVersion": 7
+ },
+ "google_scc_v2_organization_source_iam_binding": {
+ "current": "gcp:securitycenter/v2OrganizationSourceIamBinding:V2OrganizationSourceIamBinding",
+ "majorVersion": 7,
+ "fields": {
+ "condition": {
+ "maxItemsOne": true
+ },
+ "members": {
+ "maxItemsOne": false
+ }
+ }
+ },
+ "google_scc_v2_organization_source_iam_member": {
+ "current": "gcp:securitycenter/v2OrganizationSourceIamMember:V2OrganizationSourceIamMember",
+ "majorVersion": 7,
+ "fields": {
+ "condition": {
+ "maxItemsOne": true
+ }
+ }
+ },
+ "google_scc_v2_organization_source_iam_policy": {
+ "current": "gcp:securitycenter/v2OrganizationSourceIamPolicy:V2OrganizationSourceIamPolicy",
+ "majorVersion": 7
+ },
+ "google_scc_v2_project_mute_config": {
+ "current": "gcp:securitycenter/v2ProjectMuteConfig:V2ProjectMuteConfig",
+ "majorVersion": 7
+ },
+ "google_scc_v2_project_notification_config": {
+ "current": "gcp:securitycenter/v2ProjectNotificationConfig:V2ProjectNotificationConfig",
+ "majorVersion": 7,
+ "fields": {
+ "streaming_config": {
+ "maxItemsOne": true
+ }
+ }
+ },
"google_secret_manager_secret": {
"current": "gcp:secretmanager/secret:Secret",
"majorVersion": 7,
@@ -29343,6 +29473,9 @@
}
}
},
+ "auto_provisioning_locations": {
+ "maxItemsOne": false
+ },
"resource_limits": {
"maxItemsOne": false
}
@@ -31098,6 +31231,10 @@
"current": "gcp:securitycenter/getSourceIamPolicy:getSourceIamPolicy",
"majorVersion": 7
},
+ "google_scc_v2_organization_source_iam_policy": {
+ "current": "gcp:securitycenter/getV2OrganizationSourceIamPolicy:getV2OrganizationSourceIamPolicy",
+ "majorVersion": 7
+ },
"google_secret_manager_secret": {
"current": "gcp:secretmanager/getSecret:getSecret",
"majorVersion": 7,
@@ -32904,6 +33041,8 @@
"gcp:accesscontextmanager/gcpUserAccessBinding:GcpUserAccessBinding": 0,
"gcp:accesscontextmanager/ingressPolicy:IngressPolicy": 0,
"gcp:accesscontextmanager/servicePerimeter:ServicePerimeter": 0,
+ "gcp:accesscontextmanager/servicePerimeterDryRunEgressPolicy:ServicePerimeterDryRunEgressPolicy": 0,
+ "gcp:accesscontextmanager/servicePerimeterDryRunIngressPolicy:ServicePerimeterDryRunIngressPolicy": 0,
"gcp:accesscontextmanager/servicePerimeterDryRunResource:ServicePerimeterDryRunResource": 0,
"gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy": 0,
"gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy": 0,
@@ -33733,8 +33872,15 @@
"gcp:securitycenter/sourceIamBinding:SourceIamBinding": 0,
"gcp:securitycenter/sourceIamMember:SourceIamMember": 0,
"gcp:securitycenter/sourceIamPolicy:SourceIamPolicy": 0,
+ "gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig": 0,
"gcp:securitycenter/v2OrganizationMuteConfig:V2OrganizationMuteConfig": 0,
"gcp:securitycenter/v2OrganizationNotificationConfig:V2OrganizationNotificationConfig": 0,
+ "gcp:securitycenter/v2OrganizationSource:V2OrganizationSource": 0,
+ "gcp:securitycenter/v2OrganizationSourceIamBinding:V2OrganizationSourceIamBinding": 0,
+ "gcp:securitycenter/v2OrganizationSourceIamMember:V2OrganizationSourceIamMember": 0,
+ "gcp:securitycenter/v2OrganizationSourceIamPolicy:V2OrganizationSourceIamPolicy": 0,
+ "gcp:securitycenter/v2ProjectMuteConfig:V2ProjectMuteConfig": 0,
+ "gcp:securitycenter/v2ProjectNotificationConfig:V2ProjectNotificationConfig": 0,
"gcp:securityposture/posture:Posture": 0,
"gcp:securityposture/postureDeployment:PostureDeployment": 0,
"gcp:serviceaccount/account:Account": 0,
@@ -34103,6 +34249,7 @@
"gcp:securesourcemanager/getInstanceIamPolicy:getInstanceIamPolicy": 0,
"gcp:securesourcemanager/getRepositoryIamPolicy:getRepositoryIamPolicy": 0,
"gcp:securitycenter/getSourceIamPolicy:getSourceIamPolicy": 0,
+ "gcp:securitycenter/getV2OrganizationSourceIamPolicy:getV2OrganizationSourceIamPolicy": 0,
"gcp:serviceaccount/getAccount:getAccount": 0,
"gcp:serviceaccount/getAccountAccessToken:getAccountAccessToken": 0,
"gcp:serviceaccount/getAccountIdToken:getAccountIdToken": 0,
diff --git a/provider/cmd/pulumi-resource-gcp/schema.json b/provider/cmd/pulumi-resource-gcp/schema.json
index 810132da08..144cbefa32 100644
--- a/provider/cmd/pulumi-resource-gcp/schema.json
+++ b/provider/cmd/pulumi-resource-gcp/schema.json
@@ -1284,6 +1284,204 @@
"title"
]
},
+ "gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressFrom:ServicePerimeterDryRunEgressPolicyEgressFrom": {
+ "properties": {
+ "identities": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "A list of identities that are allowed access through this `EgressPolicy`.\nShould be in the format of email address. The email address should\nrepresent individual user or service account only.\n",
+ "willReplaceOnChanges": true
+ },
+ "identityType": {
+ "type": "string",
+ "description": "Specifies the type of identities that are allowed access to outside the\nperimeter. If left unspecified, then members of `identities` field will\nbe allowed access.\nPossible values are: `ANY_IDENTITY`, `ANY_USER_ACCOUNT`, `ANY_SERVICE_ACCOUNT`.\n",
+ "willReplaceOnChanges": true
+ },
+ "sourceRestriction": {
+ "type": "string",
+ "description": "Whether to enforce traffic restrictions based on `sources` field. If the `sources` field is non-empty, then this field must be set to `SOURCE_RESTRICTION_ENABLED`.\nPossible values are: `SOURCE_RESTRICTION_ENABLED`, `SOURCE_RESTRICTION_DISABLED`.\n",
+ "willReplaceOnChanges": true
+ },
+ "sources": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressFromSource:ServicePerimeterDryRunEgressPolicyEgressFromSource"
+ },
+ "description": "Sources that this EgressPolicy authorizes access from.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressFromSource:ServicePerimeterDryRunEgressPolicyEgressFromSource": {
+ "properties": {
+ "accessLevel": {
+ "type": "string",
+ "description": "An AccessLevel resource name that allows resources outside the ServicePerimeter to be accessed from the inside.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressTo:ServicePerimeterDryRunEgressPolicyEgressTo": {
+ "properties": {
+ "externalResources": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "A list of external resources that are allowed to be accessed. A request\nmatches if it contains an external resource in this list (Example:\ns3://bucket/path). Currently '*' is not allowed.\n",
+ "willReplaceOnChanges": true
+ },
+ "operations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressToOperation:ServicePerimeterDryRunEgressPolicyEgressToOperation"
+ },
+ "description": "A list of `ApiOperations` that this egress rule applies to. A request matches\nif it contains an operation/service in this list.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "resources": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "A list of resources, currently only projects in the form\n`projects/\u003cprojectnumber\u003e`, that match this to stanza. A request matches\nif it contains a resource in this list. If * is specified for resources,\nthen this `EgressTo` rule will authorize access to all resources outside\nthe perimeter.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressToOperation:ServicePerimeterDryRunEgressPolicyEgressToOperation": {
+ "properties": {
+ "methodSelectors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelector:ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelector"
+ },
+ "description": "API methods or permissions to allow. Method or permission must belong\nto the service specified by `serviceName` field. A single MethodSelector\nentry with `*` specified for the `method` field will allow all methods\nAND permissions for the service specified in `serviceName`.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "serviceName": {
+ "type": "string",
+ "description": "The name of the API whose methods or permissions the `IngressPolicy` or\n`EgressPolicy` want to allow. A single `ApiOperation` with serviceName\nfield set to `*` will allow all methods AND permissions for all services.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelector:ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelector": {
+ "properties": {
+ "method": {
+ "type": "string",
+ "description": "Value for `method` should be a valid method name for the corresponding\n`serviceName` in `ApiOperation`. If `*` used as value for method,\nthen ALL methods and permissions are allowed.\n",
+ "willReplaceOnChanges": true
+ },
+ "permission": {
+ "type": "string",
+ "description": "Value for permission should be a valid Cloud IAM permission for the\ncorresponding `serviceName` in `ApiOperation`.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressFrom:ServicePerimeterDryRunIngressPolicyIngressFrom": {
+ "properties": {
+ "identities": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "A list of identities that are allowed access through this ingress policy.\nShould be in the format of email address. The email address should represent\nindividual user or service account only.\n",
+ "willReplaceOnChanges": true
+ },
+ "identityType": {
+ "type": "string",
+ "description": "Specifies the type of identities that are allowed access from outside the\nperimeter. If left unspecified, then members of `identities` field will be\nallowed access.\nPossible values are: `ANY_IDENTITY`, `ANY_USER_ACCOUNT`, `ANY_SERVICE_ACCOUNT`.\n",
+ "willReplaceOnChanges": true
+ },
+ "sources": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressFromSource:ServicePerimeterDryRunIngressPolicyIngressFromSource"
+ },
+ "description": "Sources that this `IngressPolicy` authorizes access from.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressFromSource:ServicePerimeterDryRunIngressPolicyIngressFromSource": {
+ "properties": {
+ "accessLevel": {
+ "type": "string",
+ "description": "An `AccessLevel` resource name that allow resources within the\n`ServicePerimeters` to be accessed from the internet. `AccessLevels` listed\nmust be in the same policy as this `ServicePerimeter`. Referencing a nonexistent\n`AccessLevel` will cause an error. If no `AccessLevel` names are listed,\nresources within the perimeter can only be accessed via Google Cloud calls\nwith request origins within the perimeter.\nExample `accessPolicies/MY_POLICY/accessLevels/MY_LEVEL.`\nIf * is specified, then all IngressSources will be allowed.\n",
+ "willReplaceOnChanges": true
+ },
+ "resource": {
+ "type": "string",
+ "description": "A Google Cloud resource that is allowed to ingress the perimeter.\nRequests from these resources will be allowed to access perimeter data.\nCurrently only projects are allowed. Format `projects/{project_number}`\nThe project may be in any Google Cloud organization, not just the\norganization that the perimeter is defined in. `*` is not allowed, the case\nof allowing all Google Cloud resources only is not supported.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressTo:ServicePerimeterDryRunIngressPolicyIngressTo": {
+ "properties": {
+ "operations": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressToOperation:ServicePerimeterDryRunIngressPolicyIngressToOperation"
+ },
+ "description": "A list of `ApiOperations` the sources specified in corresponding `IngressFrom`\nare allowed to perform in this `ServicePerimeter`.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "resources": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "A list of resources, currently only projects in the form\n`projects/\u003cprojectnumber\u003e`, protected by this `ServicePerimeter`\nthat are allowed to be accessed by sources defined in the\ncorresponding `IngressFrom`. A request matches if it contains\na resource in this list. If `*` is specified for resources,\nthen this `IngressTo` rule will authorize access to all\nresources inside the perimeter, provided that the request\nalso matches the `operations` field.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressToOperation:ServicePerimeterDryRunIngressPolicyIngressToOperation": {
+ "properties": {
+ "methodSelectors": {
+ "type": "array",
+ "items": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelector:ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelector"
+ },
+ "description": "API methods or permissions to allow. Method or permission must belong to\nthe service specified by serviceName field. A single `MethodSelector` entry\nwith `*` specified for the method field will allow all methods AND\npermissions for the service specified in `serviceName`.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "serviceName": {
+ "type": "string",
+ "description": "The name of the API whose methods or permissions the `IngressPolicy` or\n`EgressPolicy` want to allow. A single `ApiOperation` with `serviceName`\nfield set to `*` will allow all methods AND permissions for all services.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
+ "gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelector:ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelector": {
+ "properties": {
+ "method": {
+ "type": "string",
+ "description": "Value for method should be a valid method name for the corresponding\nserviceName in `ApiOperation`. If `*` used as value for `method`, then\nALL methods and permissions are allowed.\n",
+ "willReplaceOnChanges": true
+ },
+ "permission": {
+ "type": "string",
+ "description": "Value for permission should be a valid Cloud IAM permission for the\ncorresponding `serviceName` in `ApiOperation`.\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ },
"gcp:accesscontextmanager/ServicePerimeterEgressPolicyEgressFrom:ServicePerimeterEgressPolicyEgressFrom": {
"properties": {
"identities": {
@@ -18334,6 +18532,10 @@
"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"
@@ -23143,6 +23345,10 @@
"type": "string",
"description": "If present, indicates to use Breakglass using this justification. If useDefault is False, then it must be empty. For more information on breakglass, see https://cloud.google.com/binary-authorization/docs/using-breakglass\n"
},
+ "policy": {
+ "type": "string",
+ "description": "The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}\n"
+ },
"useDefault": {
"type": "boolean",
"description": "If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.\n"
@@ -23776,6 +23982,10 @@
"type": "string",
"description": "If present, indicates to use Breakglass using this justification. If useDefault is False, then it must be empty. For more information on breakglass, see https://cloud.google.com/binary-authorization/docs/using-breakglass\n"
},
+ "policy": {
+ "type": "string",
+ "description": "The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}\n"
+ },
"useDefault": {
"type": "boolean",
"description": "If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.\n"
@@ -24704,6 +24914,10 @@
"type": "string",
"description": "If present, indicates to use Breakglass using this justification. If useDefault is False, then it must be empty. For more information on breakglass, see https://cloud.google.com/binary-authorization/docs/using-breakglass\n"
},
+ "policy": {
+ "type": "string",
+ "description": "The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}\n"
+ },
"useDefault": {
"type": "boolean",
"description": "If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.\n"
@@ -24712,6 +24926,7 @@
"type": "object",
"required": [
"breakglassJustification",
+ "policy",
"useDefault"
],
"language": {
@@ -25440,6 +25655,10 @@
"type": "string",
"description": "If present, indicates to use Breakglass using this justification. If useDefault is False, then it must be empty. For more information on breakglass, see https://cloud.google.com/binary-authorization/docs/using-breakglass\n"
},
+ "policy": {
+ "type": "string",
+ "description": "The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}\n"
+ },
"useDefault": {
"type": "boolean",
"description": "If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.\n"
@@ -25448,6 +25667,7 @@
"type": "object",
"required": [
"breakglassJustification",
+ "policy",
"useDefault"
],
"language": {
@@ -51101,6 +51321,13 @@
"$ref": "#/types/gcp:container/ClusterClusterAutoscalingAutoProvisioningDefaults:ClusterClusterAutoscalingAutoProvisioningDefaults",
"description": "Contains defaults for a node pool created by NAP. A subset of fields also apply to\nGKE Autopilot clusters.\nStructure is documented below.\n"
},
+ "autoProvisioningLocations": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of Google Compute Engine \n[zones](https://cloud.google.com/compute/docs/zones#available) in which the\nNodePool's nodes can be created by NAP.\n"
+ },
"autoscalingProfile": {
"type": "string",
"description": "Configuration\noptions for the [Autoscaling profile](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#autoscaling_profiles)\nfeature, which lets you choose whether the cluster autoscaler should optimize for resource utilization or resource availability\nwhen deciding to remove nodes from a cluster. Can be `BALANCED` or `OPTIMIZE_UTILIZATION`. Defaults to `BALANCED`.\n"
@@ -51122,6 +51349,7 @@
"nodejs": {
"requiredOutputs": [
"autoProvisioningDefaults",
+ "autoProvisioningLocations",
"enabled"
]
}
@@ -55603,6 +55831,13 @@
},
"description": "Contains defaults for a node pool created by NAP.\n"
},
+ "autoProvisioningLocations": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The list of Google Compute Engine zones in which the NodePool's nodes can be created by NAP.\n"
+ },
"autoscalingProfile": {
"type": "string",
"description": "Configuration options for the Autoscaling profile feature, which lets you choose whether the cluster autoscaler should optimize for resource utilization or resource availability when deciding to remove nodes from a cluster. Can be BALANCED or OPTIMIZE_UTILIZATION. Defaults to BALANCED.\n"
@@ -55622,6 +55857,7 @@
"type": "object",
"required": [
"autoProvisioningDefaults",
+ "autoProvisioningLocations",
"autoscalingProfile",
"enabled",
"resourceLimits"
@@ -82257,6 +82493,10 @@
"$ref": "#/types/gcp:gkehub/FeatureFleetDefaultMemberConfigConfigmanagementConfigSync:FeatureFleetDefaultMemberConfigConfigmanagementConfigSync",
"description": "ConfigSync configuration for the cluster\nStructure is documented below.\n"
},
+ "management": {
+ "type": "string",
+ "description": "Set this field to MANAGEMENT_AUTOMATIC to enable Config Sync auto-upgrades, and set this field to MANAGEMENT_MANUAL or MANAGEMENT_UNSPECIFIED to disable Config Sync auto-upgrades.\nPossible values are: `MANAGEMENT_UNSPECIFIED`, `MANAGEMENT_AUTOMATIC`, `MANAGEMENT_MANUAL`.\n"
+ },
"version": {
"type": "string",
"description": "Version of ACM installed\n"
@@ -82687,6 +82927,10 @@
"$ref": "#/types/gcp:gkehub/FeatureMembershipConfigmanagementHierarchyController:FeatureMembershipConfigmanagementHierarchyController",
"description": "Hierarchy Controller configuration for the cluster. Structure is documented below.\n"
},
+ "management": {
+ "type": "string",
+ "description": "Set this field to MANAGEMENT_AUTOMATIC to enable Config Sync auto-upgrades, and set this field to MANAGEMENT_MANUAL or MANAGEMENT_UNSPECIFIED to disable Config Sync auto-upgrades.\n"
+ },
"policyController": {
"$ref": "#/types/gcp:gkehub/FeatureMembershipConfigmanagementPolicyController:FeatureMembershipConfigmanagementPolicyController",
"description": "Policy Controller configuration for the cluster. Structure is documented below.\n"
@@ -82701,6 +82945,7 @@
"nodejs": {
"requiredOutputs": [
"binauthz",
+ "management",
"version"
]
}
@@ -82717,6 +82962,10 @@
},
"gcp:gkehub/FeatureMembershipConfigmanagementConfigSync:FeatureMembershipConfigmanagementConfigSync": {
"properties": {
+ "enabled": {
+ "type": "boolean",
+ "description": "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.\n"
+ },
"git": {
"$ref": "#/types/gcp:gkehub/FeatureMembershipConfigmanagementConfigSyncGit:FeatureMembershipConfigmanagementConfigSyncGit",
"description": "(Optional) Structure is documented below.\n"
@@ -92339,11 +92588,11 @@
},
"totalTransferDuration": {
"type": "string",
- "description": "(Output)\nTotal time taken so far during current transfer.\n"
+ "description": "(Output)\nCumulative time taken across all transfers for the replication relationship.\n"
},
"transferBytes": {
"type": "string",
- "description": "(Output)\nNumber of bytes transferred so far in current transfer.\n"
+ "description": "(Output)\nCumulative bytes transferred so far for the replication relationship.\n"
},
"updateTime": {
"type": "string",
@@ -102237,6 +102486,60 @@
"filter"
]
},
+ "gcp:securitycenter/V2OrganizationSourceIamBindingCondition:V2OrganizationSourceIamBindingCondition": {
+ "properties": {
+ "description": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "expression": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "title": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "expression",
+ "title"
+ ]
+ },
+ "gcp:securitycenter/V2OrganizationSourceIamMemberCondition:V2OrganizationSourceIamMemberCondition": {
+ "properties": {
+ "description": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "expression": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "title": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "expression",
+ "title"
+ ]
+ },
+ "gcp:securitycenter/V2ProjectNotificationConfigStreamingConfig:V2ProjectNotificationConfigStreamingConfig": {
+ "properties": {
+ "filter": {
+ "type": "string",
+ "description": "Expression that defines the filter to apply across create/update\nevents of assets or findings as specified by the event type. The\nexpression is a list of zero or more restrictions combined via\nlogical operators AND and OR. Parentheses are supported, and OR\nhas higher precedence than AND.\nRestrictions have the form \u003cfield\u003e \u003coperator\u003e \u003cvalue\u003e and may have\na - character in front of them to indicate negation. The fields\nmap to those defined in the corresponding resource.\nThe supported operators are:\n* = for all value types.\n* \u003e, \u003c, \u003e=, \u003c= for integer values.\n* :, meaning substring matching, for strings.\nThe supported value types are:\n* string literals in quotes.\n* integer literals without quotes.\n* boolean literals true and false without quotes.\nSee\n[Filtering notifications](https://cloud.google.com/security-command-center/docs/how-to-api-filter-notifications)\nfor information on how to write a filter.\n\n- - -\n"
+ }
+ },
+ "type": "object",
+ "required": [
+ "filter"
+ ]
+ },
"gcp:securityposture/PosturePolicySet:PosturePolicySet": {
"properties": {
"description": {
@@ -103397,7 +103700,7 @@
},
"connectorEnforcement": {
"type": "string",
- "description": "Specifies if connections must use Cloud SQL connectors.\n"
+ "description": "Enables the enforcement of Cloud SQL Auth Proxy or Cloud SQL connectors for all the connections. If enabled, all the direct connections are rejected.\n"
},
"dataCacheConfig": {
"$ref": "#/types/gcp:sql/DatabaseInstanceSettingsDataCacheConfig:DatabaseInstanceSettingsDataCacheConfig",
@@ -104183,7 +104486,7 @@
},
"connectorEnforcement": {
"type": "string",
- "description": "Specifies if connections must use Cloud SQL connectors.\n"
+ "description": "Enables the enforcement of Cloud SQL Auth Proxy or Cloud SQL connectors for all the connections. If enabled, all the direct connections are rejected.\n"
},
"dataCacheConfigs": {
"type": "array",
@@ -105152,7 +105455,7 @@
},
"connectorEnforcement": {
"type": "string",
- "description": "Specifies if connections must use Cloud SQL connectors.\n"
+ "description": "Enables the enforcement of Cloud SQL Auth Proxy or Cloud SQL connectors for all the connections. If enabled, all the direct connections are rejected.\n"
},
"dataCacheConfigs": {
"type": "array",
@@ -112853,6 +113156,128 @@
"type": "object"
}
},
+ "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\n## Example Usage\n\n",
+ "properties": {
+ "egressFrom": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressFrom:ServicePerimeterDryRunEgressPolicyEgressFrom",
+ "description": "Defines conditions on the source of a request causing this `EgressPolicy` to apply.\nStructure is documented below.\n"
+ },
+ "egressTo": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressTo:ServicePerimeterDryRunEgressPolicyEgressTo",
+ "description": "Defines the conditions on the `ApiOperation` and destination resources that\ncause this `EgressPolicy` to apply.\nStructure is documented below.\n"
+ },
+ "perimeter": {
+ "type": "string",
+ "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n"
+ }
+ },
+ "required": [
+ "perimeter"
+ ],
+ "inputProperties": {
+ "egressFrom": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressFrom:ServicePerimeterDryRunEgressPolicyEgressFrom",
+ "description": "Defines conditions on the source of a request causing this `EgressPolicy` to apply.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "egressTo": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressTo:ServicePerimeterDryRunEgressPolicyEgressTo",
+ "description": "Defines the conditions on the `ApiOperation` and destination resources that\ncause this `EgressPolicy` to apply.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "perimeter": {
+ "type": "string",
+ "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "perimeter"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering ServicePerimeterDryRunEgressPolicy resources.\n",
+ "properties": {
+ "egressFrom": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressFrom:ServicePerimeterDryRunEgressPolicyEgressFrom",
+ "description": "Defines conditions on the source of a request causing this `EgressPolicy` to apply.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "egressTo": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunEgressPolicyEgressTo:ServicePerimeterDryRunEgressPolicyEgressTo",
+ "description": "Defines the conditions on the `ApiOperation` and destination resources that\ncause this `EgressPolicy` to apply.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "perimeter": {
+ "type": "string",
+ "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
+ "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\n## Example Usage\n\n",
+ "properties": {
+ "ingressFrom": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressFrom:ServicePerimeterDryRunIngressPolicyIngressFrom",
+ "description": "Defines the conditions on the source of a request causing this `IngressPolicy`\nto apply.\nStructure is documented below.\n"
+ },
+ "ingressTo": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressTo:ServicePerimeterDryRunIngressPolicyIngressTo",
+ "description": "Defines the conditions on the `ApiOperation` and request destination that cause\nthis `IngressPolicy` to apply.\nStructure is documented below.\n"
+ },
+ "perimeter": {
+ "type": "string",
+ "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n"
+ }
+ },
+ "required": [
+ "perimeter"
+ ],
+ "inputProperties": {
+ "ingressFrom": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressFrom:ServicePerimeterDryRunIngressPolicyIngressFrom",
+ "description": "Defines the conditions on the source of a request causing this `IngressPolicy`\nto apply.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "ingressTo": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressTo:ServicePerimeterDryRunIngressPolicyIngressTo",
+ "description": "Defines the conditions on the `ApiOperation` and request destination that cause\nthis `IngressPolicy` to apply.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "perimeter": {
+ "type": "string",
+ "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "perimeter"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering ServicePerimeterDryRunIngressPolicy resources.\n",
+ "properties": {
+ "ingressFrom": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressFrom:ServicePerimeterDryRunIngressPolicyIngressFrom",
+ "description": "Defines the conditions on the source of a request causing this `IngressPolicy`\nto apply.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "ingressTo": {
+ "$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterDryRunIngressPolicyIngressTo:ServicePerimeterDryRunIngressPolicyIngressTo",
+ "description": "Defines the conditions on the `ApiOperation` and request destination that cause\nthis `IngressPolicy` to apply.\nStructure is documented below.\n",
+ "willReplaceOnChanges": true
+ },
+ "perimeter": {
+ "type": "string",
+ "description": "The name of the Service Perimeter to add this resource to.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
"gcp:accesscontextmanager/servicePerimeterDryRunResource:ServicePerimeterDryRunResource": {
"description": "Allows configuring a single GCP resource that should be inside of the `spec` block of a dry run service perimeter.\nThis resource is intended to be used in cases where it is not possible to compile a full list\nof projects to include in a `gcp.accesscontextmanager.ServicePerimeter` resource,\nto enable them to be added separately.\nIf your perimeter is NOT in dry-run mode use `gcp.accesscontextmanager.ServicePerimeterResource` instead.\n\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].resources]` so\nthey don't fight over which resources should be in the policy.\n\n\nTo get more information about ServicePerimeterDryRunResource, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters)\n* How-to Guides\n * [Service Perimeter Quickstart](https://cloud.google.com/vpc-service-controls/docs/quickstart)\n\n\u003e **Warning:** If you are using User ADCs (Application Default Credentials) with this resource,\nyou must specify a `billing_project` and set `user_project_override` to true\nin the provider configuration. Otherwise the ACM API will return a 403 error.\nYour account must have the `serviceusage.services.use` permission on the\n`billing_project` you defined.\n\n## Example Usage\n\n### Access Context Manager Service Perimeter Dry Run 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 access_policy = new gcp.accesscontextmanager.AccessPolicy(\"access-policy\", {\n parent: \"organizations/123456789\",\n title: \"my policy\",\n});\nconst service_perimeter_dry_run_resourceServicePerimeter = new gcp.accesscontextmanager.ServicePerimeter(\"service-perimeter-dry-run-resource\", {\n parent: pulumi.interpolate`accessPolicies/${access_policy.name}`,\n name: pulumi.interpolate`accessPolicies/${access_policy.name}/servicePerimeters/restrict_all`,\n title: \"restrict_all\",\n spec: {\n restrictedServices: [\"storage.googleapis.com\"],\n },\n useExplicitDryRunSpec: true,\n});\nconst service_perimeter_dry_run_resource = new gcp.accesscontextmanager.ServicePerimeterDryRunResource(\"service-perimeter-dry-run-resource\", {\n perimeterName: service_perimeter_dry_run_resourceServicePerimeter.name,\n resource: \"projects/987654321\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccess_policy = gcp.accesscontextmanager.AccessPolicy(\"access-policy\",\n parent=\"organizations/123456789\",\n title=\"my policy\")\nservice_perimeter_dry_run_resource_service_perimeter = gcp.accesscontextmanager.ServicePerimeter(\"service-perimeter-dry-run-resource\",\n parent=access_policy.name.apply(lambda name: f\"accessPolicies/{name}\"),\n name=access_policy.name.apply(lambda name: f\"accessPolicies/{name}/servicePerimeters/restrict_all\"),\n title=\"restrict_all\",\n spec={\n \"restricted_services\": [\"storage.googleapis.com\"],\n },\n use_explicit_dry_run_spec=True)\nservice_perimeter_dry_run_resource = gcp.accesscontextmanager.ServicePerimeterDryRunResource(\"service-perimeter-dry-run-resource\",\n perimeter_name=service_perimeter_dry_run_resource_service_perimeter.name,\n resource=\"projects/987654321\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var access_policy = new Gcp.AccessContextManager.AccessPolicy(\"access-policy\", new()\n {\n Parent = \"organizations/123456789\",\n Title = \"my policy\",\n });\n\n var service_perimeter_dry_run_resourceServicePerimeter = new Gcp.AccessContextManager.ServicePerimeter(\"service-perimeter-dry-run-resource\", new()\n {\n Parent = access_policy.Name.Apply(name =\u003e $\"accessPolicies/{name}\"),\n Name = access_policy.Name.Apply(name =\u003e $\"accessPolicies/{name}/servicePerimeters/restrict_all\"),\n Title = \"restrict_all\",\n Spec = new Gcp.AccessContextManager.Inputs.ServicePerimeterSpecArgs\n {\n RestrictedServices = new[]\n {\n \"storage.googleapis.com\",\n },\n },\n UseExplicitDryRunSpec = true,\n });\n\n var service_perimeter_dry_run_resource = new Gcp.AccessContextManager.ServicePerimeterDryRunResource(\"service-perimeter-dry-run-resource\", new()\n {\n PerimeterName = service_perimeter_dry_run_resourceServicePerimeter.Name,\n Resource = \"projects/987654321\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/accesscontextmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := accesscontextmanager.NewAccessPolicy(ctx, \"access-policy\", \u0026accesscontextmanager.AccessPolicyArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tTitle: pulumi.String(\"my policy\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = accesscontextmanager.NewServicePerimeter(ctx, \"service-perimeter-dry-run-resource\", \u0026accesscontextmanager.ServicePerimeterArgs{\n\t\t\tParent: access_policy.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"accessPolicies/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tName: access_policy.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"accessPolicies/%v/servicePerimeters/restrict_all\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTitle: pulumi.String(\"restrict_all\"),\n\t\t\tSpec: \u0026accesscontextmanager.ServicePerimeterSpecArgs{\n\t\t\t\tRestrictedServices: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"storage.googleapis.com\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tUseExplicitDryRunSpec: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = accesscontextmanager.NewServicePerimeterDryRunResource(ctx, \"service-perimeter-dry-run-resource\", \u0026accesscontextmanager.ServicePerimeterDryRunResourceArgs{\n\t\t\tPerimeterName: service_perimeter_dry_run_resourceServicePerimeter.Name,\n\t\t\tResource: pulumi.String(\"projects/987654321\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.accesscontextmanager.AccessPolicy;\nimport com.pulumi.gcp.accesscontextmanager.AccessPolicyArgs;\nimport com.pulumi.gcp.accesscontextmanager.ServicePerimeter;\nimport com.pulumi.gcp.accesscontextmanager.ServicePerimeterArgs;\nimport com.pulumi.gcp.accesscontextmanager.inputs.ServicePerimeterSpecArgs;\nimport com.pulumi.gcp.accesscontextmanager.ServicePerimeterDryRunResource;\nimport com.pulumi.gcp.accesscontextmanager.ServicePerimeterDryRunResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var access_policy = new AccessPolicy(\"access-policy\", AccessPolicyArgs.builder()\n .parent(\"organizations/123456789\")\n .title(\"my policy\")\n .build());\n\n var service_perimeter_dry_run_resourceServicePerimeter = new ServicePerimeter(\"service-perimeter-dry-run-resourceServicePerimeter\", ServicePerimeterArgs.builder()\n .parent(access_policy.name().applyValue(name -\u003e String.format(\"accessPolicies/%s\", name)))\n .name(access_policy.name().applyValue(name -\u003e String.format(\"accessPolicies/%s/servicePerimeters/restrict_all\", name)))\n .title(\"restrict_all\")\n .spec(ServicePerimeterSpecArgs.builder()\n .restrictedServices(\"storage.googleapis.com\")\n .build())\n .useExplicitDryRunSpec(true)\n .build());\n\n var service_perimeter_dry_run_resource = new ServicePerimeterDryRunResource(\"service-perimeter-dry-run-resource\", ServicePerimeterDryRunResourceArgs.builder()\n .perimeterName(service_perimeter_dry_run_resourceServicePerimeter.name())\n .resource(\"projects/987654321\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n service-perimeter-dry-run-resource:\n type: gcp:accesscontextmanager:ServicePerimeterDryRunResource\n properties:\n perimeterName: ${[\"service-perimeter-dry-run-resourceServicePerimeter\"].name}\n resource: projects/987654321\n service-perimeter-dry-run-resourceServicePerimeter:\n type: gcp:accesscontextmanager:ServicePerimeter\n name: service-perimeter-dry-run-resource\n properties:\n parent: accessPolicies/${[\"access-policy\"].name}\n name: accessPolicies/${[\"access-policy\"].name}/servicePerimeters/restrict_all\n title: restrict_all\n spec:\n restrictedServices:\n - storage.googleapis.com\n useExplicitDryRunSpec: true\n access-policy:\n type: gcp:accesscontextmanager:AccessPolicy\n properties:\n parent: organizations/123456789\n title: my policy\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nServicePerimeterDryRunResource can be imported using any of these accepted formats:\n\n* `{{perimeter_name}}/{{resource}}`\n\nWhen using the `pulumi import` command, ServicePerimeterDryRunResource can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:accesscontextmanager/servicePerimeterDryRunResource:ServicePerimeterDryRunResource default {{perimeter_name}}/{{resource}}\n```\n\n",
"properties": {
@@ -112903,7 +113328,7 @@
}
},
"gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy": {
- "description": "EgressPolicies 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\n## Example Usage\n\n## Import\n\nServicePerimeterEgressPolicy can be imported using any of these accepted formats:\n\n* `{{perimeter}}`\n\nWhen using the `pulumi import` command, ServicePerimeterEgressPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy default {{perimeter}}\n```\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\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\n## Example Usage\n\n",
"properties": {
"egressFrom": {
"$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterEgressPolicyEgressFrom:ServicePerimeterEgressPolicyEgressFrom",
@@ -112964,7 +113389,7 @@
}
},
"gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy": {
- "description": "IngressPolicies 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\n## Example Usage\n\n## Import\n\nServicePerimeterIngressPolicy can be imported using any of these accepted formats:\n\n* `{{perimeter}}`\n\nWhen using the `pulumi import` command, ServicePerimeterIngressPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy default {{perimeter}}\n```\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\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\n## Example Usage\n\n",
"properties": {
"ingressFrom": {
"$ref": "#/types/gcp:accesscontextmanager/ServicePerimeterIngressPolicyIngressFrom:ServicePerimeterIngressPolicyIngressFrom",
@@ -121115,7 +121540,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/v7/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-account-id\",\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-account-id\",\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-account-id\",\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/v7/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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, nil, 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-account-id\"),\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-account-id\")\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-account-id\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/v7/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: \"my-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=\"my-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 = \"my-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/v7/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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, nil, 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(\"my-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(\"my-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: my-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",
"properties": {
"cloudKmsConfig": {
"$ref": "#/types/gcp:applicationintegration/ClientCloudKmsConfig:ClientCloudKmsConfig",
@@ -161557,7 +161982,7 @@
},
"serverTlsPolicy": {
"type": "string",
- "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\n"
+ "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\nIf you remove this field from your configuration at the same time as\ndeleting or recreating a referenced ServerTlsPolicy resource, you will\nreceive a resourceInUseByAnotherResource error. Use lifecycle.create_before_destroy\nwithin the ServerTlsPolicy resource to avoid this.\n"
},
"sslCertificates": {
"type": "array",
@@ -161614,8 +162039,7 @@
},
"serverTlsPolicy": {
"type": "string",
- "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\n",
- "willReplaceOnChanges": true
+ "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\nIf you remove this field from your configuration at the same time as\ndeleting or recreating a referenced ServerTlsPolicy resource, you will\nreceive a resourceInUseByAnotherResource error. Use lifecycle.create_before_destroy\nwithin the ServerTlsPolicy resource to avoid this.\n"
},
"sslCertificates": {
"type": "array",
@@ -161680,8 +162104,7 @@
},
"serverTlsPolicy": {
"type": "string",
- "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\n",
- "willReplaceOnChanges": true
+ "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\nIf you remove this field from your configuration at the same time as\ndeleting or recreating a referenced ServerTlsPolicy resource, you will\nreceive a resourceInUseByAnotherResource error. Use lifecycle.create_before_destroy\nwithin the ServerTlsPolicy resource to avoid this.\n"
},
"sslCertificates": {
"type": "array",
@@ -166603,8 +167026,7 @@
},
"serverTlsPolicy": {
"type": "string",
- "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\n",
- "willReplaceOnChanges": true
+ "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\n"
},
"sslCertificates": {
"type": "array",
@@ -166687,8 +167109,7 @@
},
"serverTlsPolicy": {
"type": "string",
- "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\n",
- "willReplaceOnChanges": true
+ "description": "A URL referring to a networksecurity.ServerTlsPolicy\nresource that describes how the proxy should authenticate inbound\ntraffic. serverTlsPolicy only applies to a global TargetHttpsProxy\nattached to globalForwardingRules with the loadBalancingScheme\nset to INTERNAL_SELF_MANAGED or EXTERNAL or EXTERNAL_MANAGED.\nFor details which ServerTlsPolicy resources are accepted with\nINTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED\nloadBalancingScheme consult ServerTlsPolicy documentation.\nIf left blank, communications are not encrypted.\n"
},
"sslCertificates": {
"type": "array",
@@ -174863,7 +175284,7 @@
}
},
"gcp:dataform/repository:Repository": {
- "description": "## Example Usage\n\n### Dataform Repository\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"my-secret\",\n replication: {\n auto: {},\n },\n});\nconst secretVersion = new gcp.secretmanager.SecretVersion(\"secret_version\", {\n secret: secret.id,\n secretData: \"secret-data\",\n});\nconst dataformRepository = new gcp.dataform.Repository(\"dataform_repository\", {\n name: \"dataform_repository\",\n displayName: \"dataform_repository\",\n npmrcEnvironmentVariablesSecretVersion: secretVersion.id,\n labels: {\n label_foo1: \"label-bar1\",\n },\n gitRemoteSettings: {\n url: \"https://github.com/OWNER/REPOSITORY.git\",\n defaultBranch: \"main\",\n authenticationTokenSecretVersion: secretVersion.id,\n },\n workspaceCompilationOverrides: {\n defaultDatabase: \"database\",\n schemaSuffix: \"_suffix\",\n tablePrefix: \"prefix_\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"my-secret\",\n replication={\n \"auto\": {},\n })\nsecret_version = gcp.secretmanager.SecretVersion(\"secret_version\",\n secret=secret.id,\n secret_data=\"secret-data\")\ndataform_repository = gcp.dataform.Repository(\"dataform_repository\",\n name=\"dataform_repository\",\n display_name=\"dataform_repository\",\n npmrc_environment_variables_secret_version=secret_version.id,\n labels={\n \"label_foo1\": \"label-bar1\",\n },\n git_remote_settings={\n \"url\": \"https://github.com/OWNER/REPOSITORY.git\",\n \"default_branch\": \"main\",\n \"authentication_token_secret_version\": secret_version.id,\n },\n workspace_compilation_overrides={\n \"default_database\": \"database\",\n \"schema_suffix\": \"_suffix\",\n \"table_prefix\": \"prefix_\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"my-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var secretVersion = new Gcp.SecretManager.SecretVersion(\"secret_version\", new()\n {\n Secret = secret.Id,\n SecretData = \"secret-data\",\n });\n\n var dataformRepository = new Gcp.Dataform.Repository(\"dataform_repository\", new()\n {\n Name = \"dataform_repository\",\n DisplayName = \"dataform_repository\",\n NpmrcEnvironmentVariablesSecretVersion = secretVersion.Id,\n Labels = \n {\n { \"label_foo1\", \"label-bar1\" },\n },\n GitRemoteSettings = new Gcp.Dataform.Inputs.RepositoryGitRemoteSettingsArgs\n {\n Url = \"https://github.com/OWNER/REPOSITORY.git\",\n DefaultBranch = \"main\",\n AuthenticationTokenSecretVersion = secretVersion.Id,\n },\n WorkspaceCompilationOverrides = new Gcp.Dataform.Inputs.RepositoryWorkspaceCompilationOverridesArgs\n {\n DefaultDatabase = \"database\",\n SchemaSuffix = \"_suffix\",\n TablePrefix = \"prefix_\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataform\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"my-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecretVersion, err := secretmanager.NewSecretVersion(ctx, \"secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.ID(),\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataform.NewRepository(ctx, \"dataform_repository\", \u0026dataform.RepositoryArgs{\n\t\t\tName: pulumi.String(\"dataform_repository\"),\n\t\t\tDisplayName: pulumi.String(\"dataform_repository\"),\n\t\t\tNpmrcEnvironmentVariablesSecretVersion: secretVersion.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label_foo1\": pulumi.String(\"label-bar1\"),\n\t\t\t},\n\t\t\tGitRemoteSettings: \u0026dataform.RepositoryGitRemoteSettingsArgs{\n\t\t\t\tUrl: pulumi.String(\"https://github.com/OWNER/REPOSITORY.git\"),\n\t\t\t\tDefaultBranch: pulumi.String(\"main\"),\n\t\t\t\tAuthenticationTokenSecretVersion: secretVersion.ID(),\n\t\t\t},\n\t\t\tWorkspaceCompilationOverrides: \u0026dataform.RepositoryWorkspaceCompilationOverridesArgs{\n\t\t\t\tDefaultDatabase: pulumi.String(\"database\"),\n\t\t\t\tSchemaSuffix: pulumi.String(\"_suffix\"),\n\t\t\t\tTablePrefix: pulumi.String(\"prefix_\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\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.dataform.Repository;\nimport com.pulumi.gcp.dataform.RepositoryArgs;\nimport com.pulumi.gcp.dataform.inputs.RepositoryGitRemoteSettingsArgs;\nimport com.pulumi.gcp.dataform.inputs.RepositoryWorkspaceCompilationOverridesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"my-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var secretVersion = new SecretVersion(\"secretVersion\", SecretVersionArgs.builder()\n .secret(secret.id())\n .secretData(\"secret-data\")\n .build());\n\n var dataformRepository = new Repository(\"dataformRepository\", RepositoryArgs.builder()\n .name(\"dataform_repository\")\n .displayName(\"dataform_repository\")\n .npmrcEnvironmentVariablesSecretVersion(secretVersion.id())\n .labels(Map.of(\"label_foo1\", \"label-bar1\"))\n .gitRemoteSettings(RepositoryGitRemoteSettingsArgs.builder()\n .url(\"https://github.com/OWNER/REPOSITORY.git\")\n .defaultBranch(\"main\")\n .authenticationTokenSecretVersion(secretVersion.id())\n .build())\n .workspaceCompilationOverrides(RepositoryWorkspaceCompilationOverridesArgs.builder()\n .defaultDatabase(\"database\")\n .schemaSuffix(\"_suffix\")\n .tablePrefix(\"prefix_\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: my-secret\n replication:\n auto: {}\n secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: secret_version\n properties:\n secret: ${secret.id}\n secretData: secret-data\n dataformRepository:\n type: gcp:dataform:Repository\n name: dataform_repository\n properties:\n name: dataform_repository\n displayName: dataform_repository\n npmrcEnvironmentVariablesSecretVersion: ${secretVersion.id}\n labels:\n label_foo1: label-bar1\n gitRemoteSettings:\n url: https://github.com/OWNER/REPOSITORY.git\n defaultBranch: main\n authenticationTokenSecretVersion: ${secretVersion.id}\n workspaceCompilationOverrides:\n defaultDatabase: database\n schemaSuffix: _suffix\n tablePrefix: prefix_\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/{{region}}/repositories/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\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:dataform/repository:Repository default projects/{{project}}/locations/{{region}}/repositories/{{name}}\n```\n\n```sh\n$ pulumi import gcp:dataform/repository:Repository default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:dataform/repository:Repository default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:dataform/repository:Repository default {{name}}\n```\n\n",
+ "description": "## Example Usage\n\n### Dataform Repository\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"my-secret\",\n replication: {\n auto: {},\n },\n});\nconst secretVersion = new gcp.secretmanager.SecretVersion(\"secret_version\", {\n secret: secret.id,\n secretData: \"secret-data\",\n});\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {\n name: \"example-key-ring\",\n location: \"us-central1\",\n});\nconst exampleKey = new gcp.kms.CryptoKey(\"example_key\", {\n name: \"example-crypto-key-name\",\n keyRing: keyring.id,\n});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"crypto_key_binding\", {\n cryptoKeyId: exampleKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [`serviceAccount:service-${project.number}@gcp-sa-dataform.iam.gserviceaccount.com`],\n});\nconst dataformRepository = new gcp.dataform.Repository(\"dataform_repository\", {\n name: \"dataform_repository\",\n displayName: \"dataform_repository\",\n npmrcEnvironmentVariablesSecretVersion: secretVersion.id,\n kmsKeyName: exampleKey.id,\n labels: {\n label_foo1: \"label-bar1\",\n },\n gitRemoteSettings: {\n url: \"https://github.com/OWNER/REPOSITORY.git\",\n defaultBranch: \"main\",\n authenticationTokenSecretVersion: secretVersion.id,\n },\n workspaceCompilationOverrides: {\n defaultDatabase: \"database\",\n schemaSuffix: \"_suffix\",\n tablePrefix: \"prefix_\",\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"my-secret\",\n replication={\n \"auto\": {},\n })\nsecret_version = gcp.secretmanager.SecretVersion(\"secret_version\",\n secret=secret.id,\n secret_data=\"secret-data\")\nkeyring = gcp.kms.KeyRing(\"keyring\",\n name=\"example-key-ring\",\n location=\"us-central1\")\nexample_key = gcp.kms.CryptoKey(\"example_key\",\n name=\"example-crypto-key-name\",\n key_ring=keyring.id)\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"crypto_key_binding\",\n crypto_key_id=example_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:service-{project['number']}@gcp-sa-dataform.iam.gserviceaccount.com\"])\ndataform_repository = gcp.dataform.Repository(\"dataform_repository\",\n name=\"dataform_repository\",\n display_name=\"dataform_repository\",\n npmrc_environment_variables_secret_version=secret_version.id,\n kms_key_name=example_key.id,\n labels={\n \"label_foo1\": \"label-bar1\",\n },\n git_remote_settings={\n \"url\": \"https://github.com/OWNER/REPOSITORY.git\",\n \"default_branch\": \"main\",\n \"authentication_token_secret_version\": secret_version.id,\n },\n workspace_compilation_overrides={\n \"default_database\": \"database\",\n \"schema_suffix\": \"_suffix\",\n \"table_prefix\": \"prefix_\",\n },\n opts = pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"my-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var secretVersion = new Gcp.SecretManager.SecretVersion(\"secret_version\", new()\n {\n Secret = secret.Id,\n SecretData = \"secret-data\",\n });\n\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Name = \"example-key-ring\",\n Location = \"us-central1\",\n });\n\n var exampleKey = new Gcp.Kms.CryptoKey(\"example_key\", new()\n {\n Name = \"example-crypto-key-name\",\n KeyRing = keyring.Id,\n });\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"crypto_key_binding\", new()\n {\n CryptoKeyId = exampleKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Number}@gcp-sa-dataform.iam.gserviceaccount.com\",\n },\n });\n\n var dataformRepository = new Gcp.Dataform.Repository(\"dataform_repository\", new()\n {\n Name = \"dataform_repository\",\n DisplayName = \"dataform_repository\",\n NpmrcEnvironmentVariablesSecretVersion = secretVersion.Id,\n KmsKeyName = exampleKey.Id,\n Labels = \n {\n { \"label_foo1\", \"label-bar1\" },\n },\n GitRemoteSettings = new Gcp.Dataform.Inputs.RepositoryGitRemoteSettingsArgs\n {\n Url = \"https://github.com/OWNER/REPOSITORY.git\",\n DefaultBranch = \"main\",\n AuthenticationTokenSecretVersion = secretVersion.Id,\n },\n WorkspaceCompilationOverrides = new Gcp.Dataform.Inputs.RepositoryWorkspaceCompilationOverridesArgs\n {\n DefaultDatabase = \"database\",\n SchemaSuffix = \"_suffix\",\n TablePrefix = \"prefix_\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/dataform\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"my-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: nil,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecretVersion, err := secretmanager.NewSecretVersion(ctx, \"secret_version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.ID(),\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\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(\"example-key-ring\"),\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\texampleKey, err := kms.NewCryptoKey(ctx, \"example_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"example-crypto-key-name\"),\n\t\t\tKeyRing: keyring.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"crypto_key_binding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: exampleKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-dataform.iam.gserviceaccount.com\", project.Number),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dataform.NewRepository(ctx, \"dataform_repository\", \u0026dataform.RepositoryArgs{\n\t\t\tName: pulumi.String(\"dataform_repository\"),\n\t\t\tDisplayName: pulumi.String(\"dataform_repository\"),\n\t\t\tNpmrcEnvironmentVariablesSecretVersion: secretVersion.ID(),\n\t\t\tKmsKeyName: exampleKey.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label_foo1\": pulumi.String(\"label-bar1\"),\n\t\t\t},\n\t\t\tGitRemoteSettings: \u0026dataform.RepositoryGitRemoteSettingsArgs{\n\t\t\t\tUrl: pulumi.String(\"https://github.com/OWNER/REPOSITORY.git\"),\n\t\t\t\tDefaultBranch: pulumi.String(\"main\"),\n\t\t\t\tAuthenticationTokenSecretVersion: secretVersion.ID(),\n\t\t\t},\n\t\t\tWorkspaceCompilationOverrides: \u0026dataform.RepositoryWorkspaceCompilationOverridesArgs{\n\t\t\t\tDefaultDatabase: pulumi.String(\"database\"),\n\t\t\t\tSchemaSuffix: pulumi.String(\"_suffix\"),\n\t\t\t\tTablePrefix: pulumi.String(\"prefix_\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\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.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.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.dataform.Repository;\nimport com.pulumi.gcp.dataform.RepositoryArgs;\nimport com.pulumi.gcp.dataform.inputs.RepositoryGitRemoteSettingsArgs;\nimport com.pulumi.gcp.dataform.inputs.RepositoryWorkspaceCompilationOverridesArgs;\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 secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"my-secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var secretVersion = new SecretVersion(\"secretVersion\", SecretVersionArgs.builder()\n .secret(secret.id())\n .secretData(\"secret-data\")\n .build());\n\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder()\n .name(\"example-key-ring\")\n .location(\"us-central1\")\n .build());\n\n var exampleKey = new CryptoKey(\"exampleKey\", CryptoKeyArgs.builder()\n .name(\"example-crypto-key-name\")\n .keyRing(keyring.id())\n .build());\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder()\n .cryptoKeyId(exampleKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-dataform.iam.gserviceaccount.com\", project.number()))\n .build());\n\n var dataformRepository = new Repository(\"dataformRepository\", RepositoryArgs.builder()\n .name(\"dataform_repository\")\n .displayName(\"dataform_repository\")\n .npmrcEnvironmentVariablesSecretVersion(secretVersion.id())\n .kmsKeyName(exampleKey.id())\n .labels(Map.of(\"label_foo1\", \"label-bar1\"))\n .gitRemoteSettings(RepositoryGitRemoteSettingsArgs.builder()\n .url(\"https://github.com/OWNER/REPOSITORY.git\")\n .defaultBranch(\"main\")\n .authenticationTokenSecretVersion(secretVersion.id())\n .build())\n .workspaceCompilationOverrides(RepositoryWorkspaceCompilationOverridesArgs.builder()\n .defaultDatabase(\"database\")\n .schemaSuffix(\"_suffix\")\n .tablePrefix(\"prefix_\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: my-secret\n replication:\n auto: {}\n secretVersion:\n type: gcp:secretmanager:SecretVersion\n name: secret_version\n properties:\n secret: ${secret.id}\n secretData: secret-data\n keyring:\n type: gcp:kms:KeyRing\n properties:\n name: example-key-ring\n location: us-central1\n exampleKey:\n type: gcp:kms:CryptoKey\n name: example_key\n properties:\n name: example-crypto-key-name\n keyRing: ${keyring.id}\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n name: crypto_key_binding\n properties:\n cryptoKeyId: ${exampleKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:service-${project.number}@gcp-sa-dataform.iam.gserviceaccount.com\n dataformRepository:\n type: gcp:dataform:Repository\n name: dataform_repository\n properties:\n name: dataform_repository\n displayName: dataform_repository\n npmrcEnvironmentVariablesSecretVersion: ${secretVersion.id}\n kmsKeyName: ${exampleKey.id}\n labels:\n label_foo1: label-bar1\n gitRemoteSettings:\n url: https://github.com/OWNER/REPOSITORY.git\n defaultBranch: main\n authenticationTokenSecretVersion: ${secretVersion.id}\n workspaceCompilationOverrides:\n defaultDatabase: database\n schemaSuffix: _suffix\n tablePrefix: prefix_\n options:\n dependson:\n - ${cryptoKeyBinding}\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/{{region}}/repositories/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\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:dataform/repository:Repository default projects/{{project}}/locations/{{region}}/repositories/{{name}}\n```\n\n```sh\n$ pulumi import gcp:dataform/repository:Repository default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:dataform/repository:Repository default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:dataform/repository:Repository default {{name}}\n```\n\n",
"properties": {
"displayName": {
"type": "string",
@@ -174881,6 +175302,10 @@
"$ref": "#/types/gcp:dataform/RepositoryGitRemoteSettings:RepositoryGitRemoteSettings",
"description": "Optional. If set, configures this repository to be linked to a Git remote.\nStructure is documented below.\n"
},
+ "kmsKeyName": {
+ "type": "string",
+ "description": "Optional. The reference to a KMS encryption key. If provided, it will be used to encrypt user data in the repository and all child resources.\nIt is not possible to add or update the encryption key after the repository is created. Example projects/[kms_project_id]/locations/[region]/keyRings/[key_region]/cryptoKeys/[key]\n"
+ },
"labels": {
"type": "object",
"additionalProperties": {
@@ -174936,6 +175361,10 @@
"$ref": "#/types/gcp:dataform/RepositoryGitRemoteSettings:RepositoryGitRemoteSettings",
"description": "Optional. If set, configures this repository to be linked to a Git remote.\nStructure is documented below.\n"
},
+ "kmsKeyName": {
+ "type": "string",
+ "description": "Optional. The reference to a KMS encryption key. If provided, it will be used to encrypt user data in the repository and all child resources.\nIt is not possible to add or update the encryption key after the repository is created. Example projects/[kms_project_id]/locations/[region]/keyRings/[key_region]/cryptoKeys/[key]\n"
+ },
"labels": {
"type": "object",
"additionalProperties": {
@@ -174990,6 +175419,10 @@
"$ref": "#/types/gcp:dataform/RepositoryGitRemoteSettings:RepositoryGitRemoteSettings",
"description": "Optional. If set, configures this repository to be linked to a Git remote.\nStructure is documented below.\n"
},
+ "kmsKeyName": {
+ "type": "string",
+ "description": "Optional. The reference to a KMS encryption key. If provided, it will be used to encrypt user data in the repository and all child resources.\nIt is not possible to add or update the encryption key after the repository is created. Example projects/[kms_project_id]/locations/[region]/keyRings/[key_region]/cryptoKeys/[key]\n"
+ },
"labels": {
"type": "object",
"additionalProperties": {
@@ -187594,7 +188027,7 @@
}
},
"gcp:discoveryengine/dataStore:DataStore": {
- "description": "Data store is a collection of websites and documents used to find answers for\nend-user's questions in Discovery Engine (a.k.a. Vertex AI Search and\nConversation).\n\n\nTo get more information about DataStore, see:\n\n* [API documentation](https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/projects.locations.collections.dataStores)\n* How-to Guides\n * [Create a search data store](https://cloud.google.com/generative-ai-app-builder/docs/create-data-store-es)\n\n## Example Usage\n\n### Discoveryengine Datastore Basic\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.discoveryengine.DataStore(\"basic\", {\n location: \"global\",\n dataStoreId: \"data-store-id\",\n displayName: \"tf-test-structured-datastore\",\n industryVertical: \"GENERIC\",\n contentConfig: \"NO_CONTENT\",\n solutionTypes: [\"SOLUTION_TYPE_SEARCH\"],\n createAdvancedSiteSearch: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.discoveryengine.DataStore(\"basic\",\n location=\"global\",\n data_store_id=\"data-store-id\",\n display_name=\"tf-test-structured-datastore\",\n industry_vertical=\"GENERIC\",\n content_config=\"NO_CONTENT\",\n solution_types=[\"SOLUTION_TYPE_SEARCH\"],\n create_advanced_site_search=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 basic = new Gcp.DiscoveryEngine.DataStore(\"basic\", new()\n {\n Location = \"global\",\n DataStoreId = \"data-store-id\",\n DisplayName = \"tf-test-structured-datastore\",\n IndustryVertical = \"GENERIC\",\n ContentConfig = \"NO_CONTENT\",\n SolutionTypes = new[]\n {\n \"SOLUTION_TYPE_SEARCH\",\n },\n CreateAdvancedSiteSearch = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/discoveryengine\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := discoveryengine.NewDataStore(ctx, \"basic\", \u0026discoveryengine.DataStoreArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDataStoreId: pulumi.String(\"data-store-id\"),\n\t\t\tDisplayName: pulumi.String(\"tf-test-structured-datastore\"),\n\t\t\tIndustryVertical: pulumi.String(\"GENERIC\"),\n\t\t\tContentConfig: pulumi.String(\"NO_CONTENT\"),\n\t\t\tSolutionTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"SOLUTION_TYPE_SEARCH\"),\n\t\t\t},\n\t\t\tCreateAdvancedSiteSearch: 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.discoveryengine.DataStore;\nimport com.pulumi.gcp.discoveryengine.DataStoreArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 DataStore(\"basic\", DataStoreArgs.builder()\n .location(\"global\")\n .dataStoreId(\"data-store-id\")\n .displayName(\"tf-test-structured-datastore\")\n .industryVertical(\"GENERIC\")\n .contentConfig(\"NO_CONTENT\")\n .solutionTypes(\"SOLUTION_TYPE_SEARCH\")\n .createAdvancedSiteSearch(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:discoveryengine:DataStore\n properties:\n location: global\n dataStoreId: data-store-id\n displayName: tf-test-structured-datastore\n industryVertical: GENERIC\n contentConfig: NO_CONTENT\n solutionTypes:\n - SOLUTION_TYPE_SEARCH\n createAdvancedSiteSearch: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Discoveryengine Datastore Document Processing Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst documentProcessingConfig = new gcp.discoveryengine.DataStore(\"document_processing_config\", {\n location: \"global\",\n dataStoreId: \"data-store-id\",\n displayName: \"tf-test-structured-datastore\",\n industryVertical: \"GENERIC\",\n contentConfig: \"NO_CONTENT\",\n solutionTypes: [\"SOLUTION_TYPE_SEARCH\"],\n createAdvancedSiteSearch: false,\n documentProcessingConfig: {\n defaultParsingConfig: {\n digitalParsingConfig: {},\n },\n parsingConfigOverrides: [{\n fileType: \"pdf\",\n ocrParsingConfig: {\n useNativeText: true,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndocument_processing_config = gcp.discoveryengine.DataStore(\"document_processing_config\",\n location=\"global\",\n data_store_id=\"data-store-id\",\n display_name=\"tf-test-structured-datastore\",\n industry_vertical=\"GENERIC\",\n content_config=\"NO_CONTENT\",\n solution_types=[\"SOLUTION_TYPE_SEARCH\"],\n create_advanced_site_search=False,\n document_processing_config={\n \"default_parsing_config\": {\n \"digital_parsing_config\": {},\n },\n \"parsing_config_overrides\": [{\n \"file_type\": \"pdf\",\n \"ocr_parsing_config\": {\n \"use_native_text\": 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 documentProcessingConfig = new Gcp.DiscoveryEngine.DataStore(\"document_processing_config\", new()\n {\n Location = \"global\",\n DataStoreId = \"data-store-id\",\n DisplayName = \"tf-test-structured-datastore\",\n IndustryVertical = \"GENERIC\",\n ContentConfig = \"NO_CONTENT\",\n SolutionTypes = new[]\n {\n \"SOLUTION_TYPE_SEARCH\",\n },\n CreateAdvancedSiteSearch = false,\n DocumentProcessingConfig = new Gcp.DiscoveryEngine.Inputs.DataStoreDocumentProcessingConfigArgs\n {\n DefaultParsingConfig = new Gcp.DiscoveryEngine.Inputs.DataStoreDocumentProcessingConfigDefaultParsingConfigArgs\n {\n DigitalParsingConfig = null,\n },\n ParsingConfigOverrides = new[]\n {\n new Gcp.DiscoveryEngine.Inputs.DataStoreDocumentProcessingConfigParsingConfigOverrideArgs\n {\n FileType = \"pdf\",\n OcrParsingConfig = new Gcp.DiscoveryEngine.Inputs.DataStoreDocumentProcessingConfigParsingConfigOverrideOcrParsingConfigArgs\n {\n UseNativeText = true,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/discoveryengine\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := discoveryengine.NewDataStore(ctx, \"document_processing_config\", \u0026discoveryengine.DataStoreArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDataStoreId: pulumi.String(\"data-store-id\"),\n\t\t\tDisplayName: pulumi.String(\"tf-test-structured-datastore\"),\n\t\t\tIndustryVertical: pulumi.String(\"GENERIC\"),\n\t\t\tContentConfig: pulumi.String(\"NO_CONTENT\"),\n\t\t\tSolutionTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"SOLUTION_TYPE_SEARCH\"),\n\t\t\t},\n\t\t\tCreateAdvancedSiteSearch: pulumi.Bool(false),\n\t\t\tDocumentProcessingConfig: \u0026discoveryengine.DataStoreDocumentProcessingConfigArgs{\n\t\t\t\tDefaultParsingConfig: \u0026discoveryengine.DataStoreDocumentProcessingConfigDefaultParsingConfigArgs{\n\t\t\t\t\tDigitalParsingConfig: nil,\n\t\t\t\t},\n\t\t\t\tParsingConfigOverrides: discoveryengine.DataStoreDocumentProcessingConfigParsingConfigOverrideArray{\n\t\t\t\t\t\u0026discoveryengine.DataStoreDocumentProcessingConfigParsingConfigOverrideArgs{\n\t\t\t\t\t\tFileType: pulumi.String(\"pdf\"),\n\t\t\t\t\t\tOcrParsingConfig: \u0026discoveryengine.DataStoreDocumentProcessingConfigParsingConfigOverrideOcrParsingConfigArgs{\n\t\t\t\t\t\t\tUseNativeText: pulumi.Bool(true),\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.discoveryengine.DataStore;\nimport com.pulumi.gcp.discoveryengine.DataStoreArgs;\nimport com.pulumi.gcp.discoveryengine.inputs.DataStoreDocumentProcessingConfigArgs;\nimport com.pulumi.gcp.discoveryengine.inputs.DataStoreDocumentProcessingConfigDefaultParsingConfigArgs;\nimport com.pulumi.gcp.discoveryengine.inputs.DataStoreDocumentProcessingConfigDefaultParsingConfigDigitalParsingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var documentProcessingConfig = new DataStore(\"documentProcessingConfig\", DataStoreArgs.builder()\n .location(\"global\")\n .dataStoreId(\"data-store-id\")\n .displayName(\"tf-test-structured-datastore\")\n .industryVertical(\"GENERIC\")\n .contentConfig(\"NO_CONTENT\")\n .solutionTypes(\"SOLUTION_TYPE_SEARCH\")\n .createAdvancedSiteSearch(false)\n .documentProcessingConfig(DataStoreDocumentProcessingConfigArgs.builder()\n .defaultParsingConfig(DataStoreDocumentProcessingConfigDefaultParsingConfigArgs.builder()\n .digitalParsingConfig()\n .build())\n .parsingConfigOverrides(DataStoreDocumentProcessingConfigParsingConfigOverrideArgs.builder()\n .fileType(\"pdf\")\n .ocrParsingConfig(DataStoreDocumentProcessingConfigParsingConfigOverrideOcrParsingConfigArgs.builder()\n .useNativeText(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n documentProcessingConfig:\n type: gcp:discoveryengine:DataStore\n name: document_processing_config\n properties:\n location: global\n dataStoreId: data-store-id\n displayName: tf-test-structured-datastore\n industryVertical: GENERIC\n contentConfig: NO_CONTENT\n solutionTypes:\n - SOLUTION_TYPE_SEARCH\n createAdvancedSiteSearch: false\n documentProcessingConfig:\n defaultParsingConfig:\n digitalParsingConfig: {}\n parsingConfigOverrides:\n - fileType: pdf\n ocrParsingConfig:\n useNativeText: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDataStore can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/collections/default_collection/dataStores/{{data_store_id}}`\n\n* `{{project}}/{{location}}/{{data_store_id}}`\n\n* `{{location}}/{{data_store_id}}`\n\nWhen using the `pulumi import` command, DataStore can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:discoveryengine/dataStore:DataStore default projects/{{project}}/locations/{{location}}/collections/default_collection/dataStores/{{data_store_id}}\n```\n\n```sh\n$ pulumi import gcp:discoveryengine/dataStore:DataStore default {{project}}/{{location}}/{{data_store_id}}\n```\n\n```sh\n$ pulumi import gcp:discoveryengine/dataStore:DataStore default {{location}}/{{data_store_id}}\n```\n\n",
+ "description": "Data store is a collection of websites and documents used to find answers for\nend-user's questions in Discovery Engine (a.k.a. Vertex AI Search and\nConversation).\n\n\nTo get more information about DataStore, see:\n\n* [API documentation](https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/projects.locations.collections.dataStores)\n* How-to Guides\n * [Create a search data store](https://cloud.google.com/generative-ai-app-builder/docs/create-data-store-es)\n\n## Example Usage\n\n### Discoveryengine Datastore Basic\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.discoveryengine.DataStore(\"basic\", {\n location: \"global\",\n dataStoreId: \"data-store-id\",\n displayName: \"tf-test-structured-datastore\",\n industryVertical: \"GENERIC\",\n contentConfig: \"NO_CONTENT\",\n solutionTypes: [\"SOLUTION_TYPE_SEARCH\"],\n createAdvancedSiteSearch: false,\n skipDefaultSchemaCreation: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.discoveryengine.DataStore(\"basic\",\n location=\"global\",\n data_store_id=\"data-store-id\",\n display_name=\"tf-test-structured-datastore\",\n industry_vertical=\"GENERIC\",\n content_config=\"NO_CONTENT\",\n solution_types=[\"SOLUTION_TYPE_SEARCH\"],\n create_advanced_site_search=False,\n skip_default_schema_creation=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 basic = new Gcp.DiscoveryEngine.DataStore(\"basic\", new()\n {\n Location = \"global\",\n DataStoreId = \"data-store-id\",\n DisplayName = \"tf-test-structured-datastore\",\n IndustryVertical = \"GENERIC\",\n ContentConfig = \"NO_CONTENT\",\n SolutionTypes = new[]\n {\n \"SOLUTION_TYPE_SEARCH\",\n },\n CreateAdvancedSiteSearch = false,\n SkipDefaultSchemaCreation = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/discoveryengine\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := discoveryengine.NewDataStore(ctx, \"basic\", \u0026discoveryengine.DataStoreArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDataStoreId: pulumi.String(\"data-store-id\"),\n\t\t\tDisplayName: pulumi.String(\"tf-test-structured-datastore\"),\n\t\t\tIndustryVertical: pulumi.String(\"GENERIC\"),\n\t\t\tContentConfig: pulumi.String(\"NO_CONTENT\"),\n\t\t\tSolutionTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"SOLUTION_TYPE_SEARCH\"),\n\t\t\t},\n\t\t\tCreateAdvancedSiteSearch: pulumi.Bool(false),\n\t\t\tSkipDefaultSchemaCreation: 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.discoveryengine.DataStore;\nimport com.pulumi.gcp.discoveryengine.DataStoreArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 DataStore(\"basic\", DataStoreArgs.builder()\n .location(\"global\")\n .dataStoreId(\"data-store-id\")\n .displayName(\"tf-test-structured-datastore\")\n .industryVertical(\"GENERIC\")\n .contentConfig(\"NO_CONTENT\")\n .solutionTypes(\"SOLUTION_TYPE_SEARCH\")\n .createAdvancedSiteSearch(false)\n .skipDefaultSchemaCreation(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:discoveryengine:DataStore\n properties:\n location: global\n dataStoreId: data-store-id\n displayName: tf-test-structured-datastore\n industryVertical: GENERIC\n contentConfig: NO_CONTENT\n solutionTypes:\n - SOLUTION_TYPE_SEARCH\n createAdvancedSiteSearch: false\n skipDefaultSchemaCreation: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Discoveryengine Datastore Document Processing Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst documentProcessingConfig = new gcp.discoveryengine.DataStore(\"document_processing_config\", {\n location: \"global\",\n dataStoreId: \"data-store-id\",\n displayName: \"tf-test-structured-datastore\",\n industryVertical: \"GENERIC\",\n contentConfig: \"NO_CONTENT\",\n solutionTypes: [\"SOLUTION_TYPE_SEARCH\"],\n createAdvancedSiteSearch: false,\n documentProcessingConfig: {\n defaultParsingConfig: {\n digitalParsingConfig: {},\n },\n parsingConfigOverrides: [{\n fileType: \"pdf\",\n ocrParsingConfig: {\n useNativeText: true,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndocument_processing_config = gcp.discoveryengine.DataStore(\"document_processing_config\",\n location=\"global\",\n data_store_id=\"data-store-id\",\n display_name=\"tf-test-structured-datastore\",\n industry_vertical=\"GENERIC\",\n content_config=\"NO_CONTENT\",\n solution_types=[\"SOLUTION_TYPE_SEARCH\"],\n create_advanced_site_search=False,\n document_processing_config={\n \"default_parsing_config\": {\n \"digital_parsing_config\": {},\n },\n \"parsing_config_overrides\": [{\n \"file_type\": \"pdf\",\n \"ocr_parsing_config\": {\n \"use_native_text\": 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 documentProcessingConfig = new Gcp.DiscoveryEngine.DataStore(\"document_processing_config\", new()\n {\n Location = \"global\",\n DataStoreId = \"data-store-id\",\n DisplayName = \"tf-test-structured-datastore\",\n IndustryVertical = \"GENERIC\",\n ContentConfig = \"NO_CONTENT\",\n SolutionTypes = new[]\n {\n \"SOLUTION_TYPE_SEARCH\",\n },\n CreateAdvancedSiteSearch = false,\n DocumentProcessingConfig = new Gcp.DiscoveryEngine.Inputs.DataStoreDocumentProcessingConfigArgs\n {\n DefaultParsingConfig = new Gcp.DiscoveryEngine.Inputs.DataStoreDocumentProcessingConfigDefaultParsingConfigArgs\n {\n DigitalParsingConfig = null,\n },\n ParsingConfigOverrides = new[]\n {\n new Gcp.DiscoveryEngine.Inputs.DataStoreDocumentProcessingConfigParsingConfigOverrideArgs\n {\n FileType = \"pdf\",\n OcrParsingConfig = new Gcp.DiscoveryEngine.Inputs.DataStoreDocumentProcessingConfigParsingConfigOverrideOcrParsingConfigArgs\n {\n UseNativeText = true,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/discoveryengine\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := discoveryengine.NewDataStore(ctx, \"document_processing_config\", \u0026discoveryengine.DataStoreArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDataStoreId: pulumi.String(\"data-store-id\"),\n\t\t\tDisplayName: pulumi.String(\"tf-test-structured-datastore\"),\n\t\t\tIndustryVertical: pulumi.String(\"GENERIC\"),\n\t\t\tContentConfig: pulumi.String(\"NO_CONTENT\"),\n\t\t\tSolutionTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"SOLUTION_TYPE_SEARCH\"),\n\t\t\t},\n\t\t\tCreateAdvancedSiteSearch: pulumi.Bool(false),\n\t\t\tDocumentProcessingConfig: \u0026discoveryengine.DataStoreDocumentProcessingConfigArgs{\n\t\t\t\tDefaultParsingConfig: \u0026discoveryengine.DataStoreDocumentProcessingConfigDefaultParsingConfigArgs{\n\t\t\t\t\tDigitalParsingConfig: nil,\n\t\t\t\t},\n\t\t\t\tParsingConfigOverrides: discoveryengine.DataStoreDocumentProcessingConfigParsingConfigOverrideArray{\n\t\t\t\t\t\u0026discoveryengine.DataStoreDocumentProcessingConfigParsingConfigOverrideArgs{\n\t\t\t\t\t\tFileType: pulumi.String(\"pdf\"),\n\t\t\t\t\t\tOcrParsingConfig: \u0026discoveryengine.DataStoreDocumentProcessingConfigParsingConfigOverrideOcrParsingConfigArgs{\n\t\t\t\t\t\t\tUseNativeText: pulumi.Bool(true),\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.discoveryengine.DataStore;\nimport com.pulumi.gcp.discoveryengine.DataStoreArgs;\nimport com.pulumi.gcp.discoveryengine.inputs.DataStoreDocumentProcessingConfigArgs;\nimport com.pulumi.gcp.discoveryengine.inputs.DataStoreDocumentProcessingConfigDefaultParsingConfigArgs;\nimport com.pulumi.gcp.discoveryengine.inputs.DataStoreDocumentProcessingConfigDefaultParsingConfigDigitalParsingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var documentProcessingConfig = new DataStore(\"documentProcessingConfig\", DataStoreArgs.builder()\n .location(\"global\")\n .dataStoreId(\"data-store-id\")\n .displayName(\"tf-test-structured-datastore\")\n .industryVertical(\"GENERIC\")\n .contentConfig(\"NO_CONTENT\")\n .solutionTypes(\"SOLUTION_TYPE_SEARCH\")\n .createAdvancedSiteSearch(false)\n .documentProcessingConfig(DataStoreDocumentProcessingConfigArgs.builder()\n .defaultParsingConfig(DataStoreDocumentProcessingConfigDefaultParsingConfigArgs.builder()\n .digitalParsingConfig()\n .build())\n .parsingConfigOverrides(DataStoreDocumentProcessingConfigParsingConfigOverrideArgs.builder()\n .fileType(\"pdf\")\n .ocrParsingConfig(DataStoreDocumentProcessingConfigParsingConfigOverrideOcrParsingConfigArgs.builder()\n .useNativeText(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n documentProcessingConfig:\n type: gcp:discoveryengine:DataStore\n name: document_processing_config\n properties:\n location: global\n dataStoreId: data-store-id\n displayName: tf-test-structured-datastore\n industryVertical: GENERIC\n contentConfig: NO_CONTENT\n solutionTypes:\n - SOLUTION_TYPE_SEARCH\n createAdvancedSiteSearch: false\n documentProcessingConfig:\n defaultParsingConfig:\n digitalParsingConfig: {}\n parsingConfigOverrides:\n - fileType: pdf\n ocrParsingConfig:\n useNativeText: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDataStore can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/collections/default_collection/dataStores/{{data_store_id}}`\n\n* `{{project}}/{{location}}/{{data_store_id}}`\n\n* `{{location}}/{{data_store_id}}`\n\nWhen using the `pulumi import` command, DataStore can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:discoveryengine/dataStore:DataStore default projects/{{project}}/locations/{{location}}/collections/default_collection/dataStores/{{data_store_id}}\n```\n\n```sh\n$ pulumi import gcp:discoveryengine/dataStore:DataStore default {{project}}/{{location}}/{{data_store_id}}\n```\n\n```sh\n$ pulumi import gcp:discoveryengine/dataStore:DataStore default {{location}}/{{data_store_id}}\n```\n\n",
"properties": {
"contentConfig": {
"type": "string",
@@ -187640,6 +188073,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"
},
+ "skipDefaultSchemaCreation": {
+ "type": "boolean",
+ "description": "A boolean flag indicating whether to skip the default schema creation for\nthe data store. Only enable this flag if you are certain that the default\nschema is incompatible with your use case.\nIf set to true, you must manually create a schema for the data store\nbefore any documents can be ingested.\nThis flag cannot be specified if `data_store.starting_schema` is\nspecified.\n"
+ },
"solutionTypes": {
"type": "array",
"items": {
@@ -187698,6 +188135,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
},
+ "skipDefaultSchemaCreation": {
+ "type": "boolean",
+ "description": "A boolean flag indicating whether to skip the default schema creation for\nthe data store. Only enable this flag if you are certain that the default\nschema is incompatible with your use case.\nIf set to true, you must manually create a schema for the data store\nbefore any documents can be ingested.\nThis flag cannot be specified if `data_store.starting_schema` is\nspecified.\n"
+ },
"solutionTypes": {
"type": "array",
"items": {
@@ -187767,6 +188208,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
},
+ "skipDefaultSchemaCreation": {
+ "type": "boolean",
+ "description": "A boolean flag indicating whether to skip the default schema creation for\nthe data store. Only enable this flag if you are certain that the default\nschema is incompatible with your use case.\nIf set to true, you must manually create a schema for the data store\nbefore any documents can be ingested.\nThis flag cannot be specified if `data_store.starting_schema` is\nspecified.\n"
+ },
"solutionTypes": {
"type": "array",
"items": {
@@ -211300,7 +211745,7 @@
}
},
"gcp:logging/logViewIamBinding:LogViewIamBinding": {
- "description": "\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nCloud (Stackdriver) Logging logview 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:logging/logViewIamBinding:LogViewIamBinding editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin 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:logging/logViewIamBinding:LogViewIamBinding editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:logging/logViewIamBinding:LogViewIamBinding editor {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}}\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",
+ "description": "Three different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:\n\n* `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.\n* `gcp.logging.LogViewIamBinding`: 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 logview are preserved.\n* `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview\n\n\u003e **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n\n\n## gcp.logging.LogViewIamPolicy\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n \"condition\": {\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamBinding\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n members=[\"user:jane@example.com\"],\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026logging.LogViewIamBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(LogViewIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamMember\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n member=\"user:jane@example.com\",\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026logging.LogViewIamMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .condition(LogViewIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\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\n# IAM policy for Cloud (Stackdriver) Logging LogView\nThree different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:\n\n* `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.\n* `gcp.logging.LogViewIamBinding`: 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 logview are preserved.\n* `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview\n\n\u003e **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n\n\n## gcp.logging.LogViewIamPolicy\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n \"condition\": {\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamBinding\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n members=[\"user:jane@example.com\"],\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026logging.LogViewIamBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(LogViewIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamMember\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n member=\"user:jane@example.com\",\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026logging.LogViewIamMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .condition(LogViewIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\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* {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nCloud (Stackdriver) Logging logview 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:logging/logViewIamBinding:LogViewIamBinding editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin 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:logging/logViewIamBinding:LogViewIamBinding editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:logging/logViewIamBinding:LogViewIamBinding editor {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}}\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": {
"bucket": {
"type": "string",
@@ -211441,7 +211886,7 @@
}
},
"gcp:logging/logViewIamMember:LogViewIamMember": {
- "description": "\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nCloud (Stackdriver) Logging logview 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:logging/logViewIamMember:LogViewIamMember editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin 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:logging/logViewIamMember:LogViewIamMember editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:logging/logViewIamMember:LogViewIamMember editor {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}}\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",
+ "description": "Three different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:\n\n* `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.\n* `gcp.logging.LogViewIamBinding`: 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 logview are preserved.\n* `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview\n\n\u003e **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n\n\n## gcp.logging.LogViewIamPolicy\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n \"condition\": {\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamBinding\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n members=[\"user:jane@example.com\"],\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026logging.LogViewIamBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(LogViewIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamMember\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n member=\"user:jane@example.com\",\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026logging.LogViewIamMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .condition(LogViewIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\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\n# IAM policy for Cloud (Stackdriver) Logging LogView\nThree different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:\n\n* `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.\n* `gcp.logging.LogViewIamBinding`: 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 logview are preserved.\n* `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview\n\n\u003e **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n\n\n## gcp.logging.LogViewIamPolicy\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n \"condition\": {\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamBinding\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n members=[\"user:jane@example.com\"],\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026logging.LogViewIamBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(LogViewIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamMember\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n member=\"user:jane@example.com\",\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026logging.LogViewIamMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .condition(LogViewIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\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* {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nCloud (Stackdriver) Logging logview 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:logging/logViewIamMember:LogViewIamMember editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin 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:logging/logViewIamMember:LogViewIamMember editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:logging/logViewIamMember:LogViewIamMember editor {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}}\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": {
"bucket": {
"type": "string",
@@ -211575,7 +212020,7 @@
}
},
"gcp:logging/logViewIamPolicy:LogViewIamPolicy": {
- "description": "\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms:\n\n* {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nCloud (Stackdriver) Logging logview 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:logging/logViewIamPolicy:LogViewIamPolicy editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin 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:logging/logViewIamPolicy:LogViewIamPolicy editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:logging/logViewIamPolicy:LogViewIamPolicy editor {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}}\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",
+ "description": "Three different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:\n\n* `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.\n* `gcp.logging.LogViewIamBinding`: 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 logview are preserved.\n* `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview\n\n\u003e **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n\n\n## gcp.logging.LogViewIamPolicy\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n \"condition\": {\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamBinding\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n members=[\"user:jane@example.com\"],\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026logging.LogViewIamBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(LogViewIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamMember\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n member=\"user:jane@example.com\",\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026logging.LogViewIamMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .condition(LogViewIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\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\n# IAM policy for Cloud (Stackdriver) Logging LogView\nThree different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:\n\n* `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.\n* `gcp.logging.LogViewIamBinding`: 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 logview are preserved.\n* `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview\n\n\u003e **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n\n\n## gcp.logging.LogViewIamPolicy\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst policy = new gcp.logging.LogViewIamPolicy(\"policy\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.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/logging.admin\",\n \"members\": [\"user:jane@example.com\"],\n \"condition\": {\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}])\npolicy = gcp.logging.LogViewIamPolicy(\"policy\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var policy = new Gcp.Logging.LogViewIamPolicy(\"policy\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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/logging.admin\",\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\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\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 = logging.NewLogViewIamPolicy(ctx, \"policy\", \u0026logging.LogViewIamPolicyArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.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.logging.LogViewIamPolicy;\nimport com.pulumi.gcp.logging.LogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var policy = new LogViewIamPolicy(\"policy\", LogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:logging:LogViewIamPolicy\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamBinding\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\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/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamBinding(\"binding\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.logging.LogViewIamBinding(\"binding\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n members=[\"user:jane@example.com\"],\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamBinding(\"binding\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamBinding(ctx, \"binding\", \u0026logging.LogViewIamBindingArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026logging.LogViewIamBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamBinding;\nimport com.pulumi.gcp.logging.LogViewIamBindingArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamBinding(\"binding\", LogViewIamBindingArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .members(\"user:jane@example.com\")\n .condition(LogViewIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:logging:LogViewIamBinding\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n## gcp.logging.LogViewIamMember\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\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.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\nWith IAM Conditions:\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.logging.LogViewIamMember(\"member\", {\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n role: \"roles/logging.admin\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.logging.LogViewIamMember(\"member\",\n parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"name\"],\n role=\"roles/logging.admin\",\n member=\"user:jane@example.com\",\n condition={\n \"title\": \"expires_after_2019_12_31\",\n \"description\": \"Expiring at midnight of 2019-12-31\",\n \"expression\": \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n })\n```\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.Logging.LogViewIamMember(\"member\", new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n Role = \"roles/logging.admin\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewLogViewIamMember(ctx, \"member\", \u0026logging.LogViewIamMemberArgs{\n\t\t\tParent: pulumi.Any(loggingLogView.Parent),\n\t\t\tLocation: pulumi.Any(loggingLogView.Location),\n\t\t\tBucket: pulumi.Any(loggingLogView.Bucket),\n\t\t\tName: pulumi.Any(loggingLogView.Name),\n\t\t\tRole: pulumi.String(\"roles/logging.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026logging.LogViewIamMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LogViewIamMember;\nimport com.pulumi.gcp.logging.LogViewIamMemberArgs;\nimport com.pulumi.gcp.logging.inputs.LogViewIamMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 LogViewIamMember(\"member\", LogViewIamMemberArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .role(\"roles/logging.admin\")\n .member(\"user:jane@example.com\")\n .condition(LogViewIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:logging:LogViewIamMember\n properties:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n role: roles/logging.admin\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\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* {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{name}}\n\n* {{name}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nCloud (Stackdriver) Logging logview 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:logging/logViewIamPolicy:LogViewIamPolicy editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin 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:logging/logViewIamPolicy:LogViewIamPolicy editor \"{{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}} roles/logging.admin\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:logging/logViewIamPolicy:LogViewIamPolicy editor {{parent}}/locations/{{location}}/buckets/{{bucket}}/views/{{log_view}}\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": {
"bucket": {
"type": "string",
@@ -218521,7 +218966,7 @@
}
},
"gcp:networkconnectivity/regionalEndpoint:RegionalEndpoint": {
- "description": "Regional Private Service Connect (PSC) endpoint resource.\n\n\nTo get more information about RegionalEndpoint, see:\n\n* [API documentation](https://cloud.google.com/network-connectivity/docs/reference/networkconnectivity/rest/v1/projects.locations.regionalEndpoints)\n* How-to Guides\n * [Access regional Google APIs through endpoints](https://cloud.google.com/vpc/docs/access-regional-google-apis-endpoints)\n\n## Example Usage\n\n### Network Connectivity Regional Endpoint Regional Access\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myNetwork = new gcp.compute.Network(\"my_network\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst mySubnetwork = new gcp.compute.Subnetwork(\"my_subnetwork\", {\n name: \"my-subnetwork\",\n ipCidrRange: \"192.168.0.0/24\",\n region: \"us-central1\",\n network: myNetwork.id,\n});\nconst _default = new gcp.networkconnectivity.RegionalEndpoint(\"default\", {\n name: \"my-rep\",\n location: \"us-central1\",\n targetGoogleApi: \"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\",\n accessType: \"REGIONAL\",\n address: \"192.168.0.5\",\n network: myNetwork.id,\n subnetwork: mySubnetwork.id,\n description: \"My RegionalEndpoint targeting Google API boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\",\n labels: {\n env: \"default\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_network = gcp.compute.Network(\"my_network\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nmy_subnetwork = gcp.compute.Subnetwork(\"my_subnetwork\",\n name=\"my-subnetwork\",\n ip_cidr_range=\"192.168.0.0/24\",\n region=\"us-central1\",\n network=my_network.id)\ndefault = gcp.networkconnectivity.RegionalEndpoint(\"default\",\n name=\"my-rep\",\n location=\"us-central1\",\n target_google_api=\"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\",\n access_type=\"REGIONAL\",\n address=\"192.168.0.5\",\n network=my_network.id,\n subnetwork=my_subnetwork.id,\n description=\"My RegionalEndpoint targeting Google API boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\",\n labels={\n \"env\": \"default\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myNetwork = new Gcp.Compute.Network(\"my_network\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var mySubnetwork = new Gcp.Compute.Subnetwork(\"my_subnetwork\", new()\n {\n Name = \"my-subnetwork\",\n IpCidrRange = \"192.168.0.0/24\",\n Region = \"us-central1\",\n Network = myNetwork.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.RegionalEndpoint(\"default\", new()\n {\n Name = \"my-rep\",\n Location = \"us-central1\",\n TargetGoogleApi = \"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\",\n AccessType = \"REGIONAL\",\n Address = \"192.168.0.5\",\n Network = myNetwork.Id,\n Subnetwork = mySubnetwork.Id,\n Description = \"My RegionalEndpoint targeting Google API boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\",\n Labels = \n {\n { \"env\", \"default\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\tmyNetwork, err := compute.NewNetwork(ctx, \"my_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-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\tmySubnetwork, err := compute.NewSubnetwork(ctx, \"my_subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"192.168.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: myNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewRegionalEndpoint(ctx, \"default\", \u0026networkconnectivity.RegionalEndpointArgs{\n\t\t\tName: pulumi.String(\"my-rep\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTargetGoogleApi: pulumi.String(\"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\"),\n\t\t\tAccessType: pulumi.String(\"REGIONAL\"),\n\t\t\tAddress: pulumi.String(\"192.168.0.5\"),\n\t\t\tNetwork: myNetwork.ID(),\n\t\t\tSubnetwork: mySubnetwork.ID(),\n\t\t\tDescription: pulumi.String(\"My RegionalEndpoint targeting Google API boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.RegionalEndpoint;\nimport com.pulumi.gcp.networkconnectivity.RegionalEndpointArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myNetwork = new Network(\"myNetwork\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var mySubnetwork = new Subnetwork(\"mySubnetwork\", SubnetworkArgs.builder()\n .name(\"my-subnetwork\")\n .ipCidrRange(\"192.168.0.0/24\")\n .region(\"us-central1\")\n .network(myNetwork.id())\n .build());\n\n var default_ = new RegionalEndpoint(\"default\", RegionalEndpointArgs.builder()\n .name(\"my-rep\")\n .location(\"us-central1\")\n .targetGoogleApi(\"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\")\n .accessType(\"REGIONAL\")\n .address(\"192.168.0.5\")\n .network(myNetwork.id())\n .subnetwork(mySubnetwork.id())\n .description(\"My RegionalEndpoint targeting Google API boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\")\n .labels(Map.of(\"env\", \"default\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myNetwork:\n type: gcp:compute:Network\n name: my_network\n properties:\n name: my-network\n autoCreateSubnetworks: false\n mySubnetwork:\n type: gcp:compute:Subnetwork\n name: my_subnetwork\n properties:\n name: my-subnetwork\n ipCidrRange: 192.168.0.0/24\n region: us-central1\n network: ${myNetwork.id}\n default:\n type: gcp:networkconnectivity:RegionalEndpoint\n properties:\n name: my-rep\n location: us-central1\n targetGoogleApi: boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\n accessType: REGIONAL\n address: 192.168.0.5\n network: ${myNetwork.id}\n subnetwork: ${mySubnetwork.id}\n description: My RegionalEndpoint targeting Google API boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\n labels:\n env: default\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Regional Endpoint Global Access\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myNetwork = new gcp.compute.Network(\"my_network\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst mySubnetwork = new gcp.compute.Subnetwork(\"my_subnetwork\", {\n name: \"my-subnetwork\",\n ipCidrRange: \"192.168.0.0/24\",\n region: \"us-central1\",\n network: myNetwork.id,\n});\nconst _default = new gcp.networkconnectivity.RegionalEndpoint(\"default\", {\n name: \"my-rep\",\n location: \"us-central1\",\n targetGoogleApi: \"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\",\n accessType: \"GLOBAL\",\n address: \"192.168.0.4\",\n network: myNetwork.id,\n subnetwork: mySubnetwork.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_network = gcp.compute.Network(\"my_network\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nmy_subnetwork = gcp.compute.Subnetwork(\"my_subnetwork\",\n name=\"my-subnetwork\",\n ip_cidr_range=\"192.168.0.0/24\",\n region=\"us-central1\",\n network=my_network.id)\ndefault = gcp.networkconnectivity.RegionalEndpoint(\"default\",\n name=\"my-rep\",\n location=\"us-central1\",\n target_google_api=\"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\",\n access_type=\"GLOBAL\",\n address=\"192.168.0.4\",\n network=my_network.id,\n subnetwork=my_subnetwork.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myNetwork = new Gcp.Compute.Network(\"my_network\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var mySubnetwork = new Gcp.Compute.Subnetwork(\"my_subnetwork\", new()\n {\n Name = \"my-subnetwork\",\n IpCidrRange = \"192.168.0.0/24\",\n Region = \"us-central1\",\n Network = myNetwork.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.RegionalEndpoint(\"default\", new()\n {\n Name = \"my-rep\",\n Location = \"us-central1\",\n TargetGoogleApi = \"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\",\n AccessType = \"GLOBAL\",\n Address = \"192.168.0.4\",\n Network = myNetwork.Id,\n Subnetwork = mySubnetwork.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\tmyNetwork, err := compute.NewNetwork(ctx, \"my_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-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\tmySubnetwork, err := compute.NewSubnetwork(ctx, \"my_subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"192.168.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: myNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewRegionalEndpoint(ctx, \"default\", \u0026networkconnectivity.RegionalEndpointArgs{\n\t\t\tName: pulumi.String(\"my-rep\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTargetGoogleApi: pulumi.String(\"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\"),\n\t\t\tAccessType: pulumi.String(\"GLOBAL\"),\n\t\t\tAddress: pulumi.String(\"192.168.0.4\"),\n\t\t\tNetwork: myNetwork.ID(),\n\t\t\tSubnetwork: mySubnetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.RegionalEndpoint;\nimport com.pulumi.gcp.networkconnectivity.RegionalEndpointArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myNetwork = new Network(\"myNetwork\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var mySubnetwork = new Subnetwork(\"mySubnetwork\", SubnetworkArgs.builder()\n .name(\"my-subnetwork\")\n .ipCidrRange(\"192.168.0.0/24\")\n .region(\"us-central1\")\n .network(myNetwork.id())\n .build());\n\n var default_ = new RegionalEndpoint(\"default\", RegionalEndpointArgs.builder()\n .name(\"my-rep\")\n .location(\"us-central1\")\n .targetGoogleApi(\"boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\")\n .accessType(\"GLOBAL\")\n .address(\"192.168.0.4\")\n .network(myNetwork.id())\n .subnetwork(mySubnetwork.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myNetwork:\n type: gcp:compute:Network\n name: my_network\n properties:\n name: my-network\n autoCreateSubnetworks: false\n mySubnetwork:\n type: gcp:compute:Subnetwork\n name: my_subnetwork\n properties:\n name: my-subnetwork\n ipCidrRange: 192.168.0.0/24\n region: us-central1\n network: ${myNetwork.id}\n default:\n type: gcp:networkconnectivity:RegionalEndpoint\n properties:\n name: my-rep\n location: us-central1\n targetGoogleApi: boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com\n accessType: GLOBAL\n address: 192.168.0.4\n network: ${myNetwork.id}\n subnetwork: ${mySubnetwork.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionalEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/regionalEndpoints/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RegionalEndpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networkconnectivity/regionalEndpoint:RegionalEndpoint default projects/{{project}}/locations/{{location}}/regionalEndpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/regionalEndpoint:RegionalEndpoint default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/regionalEndpoint:RegionalEndpoint default {{location}}/{{name}}\n```\n\n",
+ "description": "Regional Private Service Connect (PSC) endpoint resource.\n\n\nTo get more information about RegionalEndpoint, see:\n\n* [API documentation](https://cloud.google.com/network-connectivity/docs/reference/networkconnectivity/rest/v1/projects.locations.regionalEndpoints)\n* How-to Guides\n * [Access regional Google APIs through endpoints](https://cloud.google.com/vpc/docs/access-regional-google-apis-endpoints)\n\n## Example Usage\n\n### Network Connectivity Regional Endpoint Regional Access\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myNetwork = new gcp.compute.Network(\"my_network\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst mySubnetwork = new gcp.compute.Subnetwork(\"my_subnetwork\", {\n name: \"my-subnetwork\",\n ipCidrRange: \"192.168.0.0/24\",\n region: \"us-central1\",\n network: myNetwork.id,\n});\nconst _default = new gcp.networkconnectivity.RegionalEndpoint(\"default\", {\n name: \"my-rep\",\n location: \"us-central1\",\n targetGoogleApi: \"storage.us-central1.p.rep.googleapis.com\",\n accessType: \"REGIONAL\",\n address: \"192.168.0.5\",\n network: myNetwork.id,\n subnetwork: mySubnetwork.id,\n description: \"My RegionalEndpoint targeting Google API storage.us-central1.p.rep.googleapis.com\",\n labels: {\n env: \"default\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_network = gcp.compute.Network(\"my_network\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nmy_subnetwork = gcp.compute.Subnetwork(\"my_subnetwork\",\n name=\"my-subnetwork\",\n ip_cidr_range=\"192.168.0.0/24\",\n region=\"us-central1\",\n network=my_network.id)\ndefault = gcp.networkconnectivity.RegionalEndpoint(\"default\",\n name=\"my-rep\",\n location=\"us-central1\",\n target_google_api=\"storage.us-central1.p.rep.googleapis.com\",\n access_type=\"REGIONAL\",\n address=\"192.168.0.5\",\n network=my_network.id,\n subnetwork=my_subnetwork.id,\n description=\"My RegionalEndpoint targeting Google API storage.us-central1.p.rep.googleapis.com\",\n labels={\n \"env\": \"default\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myNetwork = new Gcp.Compute.Network(\"my_network\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var mySubnetwork = new Gcp.Compute.Subnetwork(\"my_subnetwork\", new()\n {\n Name = \"my-subnetwork\",\n IpCidrRange = \"192.168.0.0/24\",\n Region = \"us-central1\",\n Network = myNetwork.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.RegionalEndpoint(\"default\", new()\n {\n Name = \"my-rep\",\n Location = \"us-central1\",\n TargetGoogleApi = \"storage.us-central1.p.rep.googleapis.com\",\n AccessType = \"REGIONAL\",\n Address = \"192.168.0.5\",\n Network = myNetwork.Id,\n Subnetwork = mySubnetwork.Id,\n Description = \"My RegionalEndpoint targeting Google API storage.us-central1.p.rep.googleapis.com\",\n Labels = \n {\n { \"env\", \"default\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\tmyNetwork, err := compute.NewNetwork(ctx, \"my_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-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\tmySubnetwork, err := compute.NewSubnetwork(ctx, \"my_subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"192.168.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: myNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewRegionalEndpoint(ctx, \"default\", \u0026networkconnectivity.RegionalEndpointArgs{\n\t\t\tName: pulumi.String(\"my-rep\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTargetGoogleApi: pulumi.String(\"storage.us-central1.p.rep.googleapis.com\"),\n\t\t\tAccessType: pulumi.String(\"REGIONAL\"),\n\t\t\tAddress: pulumi.String(\"192.168.0.5\"),\n\t\t\tNetwork: myNetwork.ID(),\n\t\t\tSubnetwork: mySubnetwork.ID(),\n\t\t\tDescription: pulumi.String(\"My RegionalEndpoint targeting Google API storage.us-central1.p.rep.googleapis.com\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.RegionalEndpoint;\nimport com.pulumi.gcp.networkconnectivity.RegionalEndpointArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myNetwork = new Network(\"myNetwork\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var mySubnetwork = new Subnetwork(\"mySubnetwork\", SubnetworkArgs.builder()\n .name(\"my-subnetwork\")\n .ipCidrRange(\"192.168.0.0/24\")\n .region(\"us-central1\")\n .network(myNetwork.id())\n .build());\n\n var default_ = new RegionalEndpoint(\"default\", RegionalEndpointArgs.builder()\n .name(\"my-rep\")\n .location(\"us-central1\")\n .targetGoogleApi(\"storage.us-central1.p.rep.googleapis.com\")\n .accessType(\"REGIONAL\")\n .address(\"192.168.0.5\")\n .network(myNetwork.id())\n .subnetwork(mySubnetwork.id())\n .description(\"My RegionalEndpoint targeting Google API storage.us-central1.p.rep.googleapis.com\")\n .labels(Map.of(\"env\", \"default\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myNetwork:\n type: gcp:compute:Network\n name: my_network\n properties:\n name: my-network\n autoCreateSubnetworks: false\n mySubnetwork:\n type: gcp:compute:Subnetwork\n name: my_subnetwork\n properties:\n name: my-subnetwork\n ipCidrRange: 192.168.0.0/24\n region: us-central1\n network: ${myNetwork.id}\n default:\n type: gcp:networkconnectivity:RegionalEndpoint\n properties:\n name: my-rep\n location: us-central1\n targetGoogleApi: storage.us-central1.p.rep.googleapis.com\n accessType: REGIONAL\n address: 192.168.0.5\n network: ${myNetwork.id}\n subnetwork: ${mySubnetwork.id}\n description: My RegionalEndpoint targeting Google API storage.us-central1.p.rep.googleapis.com\n labels:\n env: default\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Connectivity Regional Endpoint Global Access\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myNetwork = new gcp.compute.Network(\"my_network\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst mySubnetwork = new gcp.compute.Subnetwork(\"my_subnetwork\", {\n name: \"my-subnetwork\",\n ipCidrRange: \"192.168.0.0/24\",\n region: \"us-central1\",\n network: myNetwork.id,\n});\nconst _default = new gcp.networkconnectivity.RegionalEndpoint(\"default\", {\n name: \"my-rep\",\n location: \"us-central1\",\n targetGoogleApi: \"storage.us-central1.p.rep.googleapis.com\",\n accessType: \"GLOBAL\",\n address: \"192.168.0.4\",\n network: myNetwork.id,\n subnetwork: mySubnetwork.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_network = gcp.compute.Network(\"my_network\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nmy_subnetwork = gcp.compute.Subnetwork(\"my_subnetwork\",\n name=\"my-subnetwork\",\n ip_cidr_range=\"192.168.0.0/24\",\n region=\"us-central1\",\n network=my_network.id)\ndefault = gcp.networkconnectivity.RegionalEndpoint(\"default\",\n name=\"my-rep\",\n location=\"us-central1\",\n target_google_api=\"storage.us-central1.p.rep.googleapis.com\",\n access_type=\"GLOBAL\",\n address=\"192.168.0.4\",\n network=my_network.id,\n subnetwork=my_subnetwork.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myNetwork = new Gcp.Compute.Network(\"my_network\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var mySubnetwork = new Gcp.Compute.Subnetwork(\"my_subnetwork\", new()\n {\n Name = \"my-subnetwork\",\n IpCidrRange = \"192.168.0.0/24\",\n Region = \"us-central1\",\n Network = myNetwork.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.RegionalEndpoint(\"default\", new()\n {\n Name = \"my-rep\",\n Location = \"us-central1\",\n TargetGoogleApi = \"storage.us-central1.p.rep.googleapis.com\",\n AccessType = \"GLOBAL\",\n Address = \"192.168.0.4\",\n Network = myNetwork.Id,\n Subnetwork = mySubnetwork.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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\tmyNetwork, err := compute.NewNetwork(ctx, \"my_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-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\tmySubnetwork, err := compute.NewSubnetwork(ctx, \"my_subnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"192.168.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: myNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewRegionalEndpoint(ctx, \"default\", \u0026networkconnectivity.RegionalEndpointArgs{\n\t\t\tName: pulumi.String(\"my-rep\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTargetGoogleApi: pulumi.String(\"storage.us-central1.p.rep.googleapis.com\"),\n\t\t\tAccessType: pulumi.String(\"GLOBAL\"),\n\t\t\tAddress: pulumi.String(\"192.168.0.4\"),\n\t\t\tNetwork: myNetwork.ID(),\n\t\t\tSubnetwork: mySubnetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.RegionalEndpoint;\nimport com.pulumi.gcp.networkconnectivity.RegionalEndpointArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myNetwork = new Network(\"myNetwork\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var mySubnetwork = new Subnetwork(\"mySubnetwork\", SubnetworkArgs.builder()\n .name(\"my-subnetwork\")\n .ipCidrRange(\"192.168.0.0/24\")\n .region(\"us-central1\")\n .network(myNetwork.id())\n .build());\n\n var default_ = new RegionalEndpoint(\"default\", RegionalEndpointArgs.builder()\n .name(\"my-rep\")\n .location(\"us-central1\")\n .targetGoogleApi(\"storage.us-central1.p.rep.googleapis.com\")\n .accessType(\"GLOBAL\")\n .address(\"192.168.0.4\")\n .network(myNetwork.id())\n .subnetwork(mySubnetwork.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myNetwork:\n type: gcp:compute:Network\n name: my_network\n properties:\n name: my-network\n autoCreateSubnetworks: false\n mySubnetwork:\n type: gcp:compute:Subnetwork\n name: my_subnetwork\n properties:\n name: my-subnetwork\n ipCidrRange: 192.168.0.0/24\n region: us-central1\n network: ${myNetwork.id}\n default:\n type: gcp:networkconnectivity:RegionalEndpoint\n properties:\n name: my-rep\n location: us-central1\n targetGoogleApi: storage.us-central1.p.rep.googleapis.com\n accessType: GLOBAL\n address: 192.168.0.4\n network: ${myNetwork.id}\n subnetwork: ${mySubnetwork.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionalEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/regionalEndpoints/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, RegionalEndpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networkconnectivity/regionalEndpoint:RegionalEndpoint default projects/{{project}}/locations/{{location}}/regionalEndpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/regionalEndpoint:RegionalEndpoint default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:networkconnectivity/regionalEndpoint:RegionalEndpoint default {{location}}/{{name}}\n```\n\n",
"properties": {
"accessType": {
"type": "string",
@@ -227023,6 +227468,9 @@
"type": "string",
"description": "The alphanumeric ID of the billing account this project\nbelongs to. The user or service account performing this operation with the provider\nmust have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account.\nSee [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access)\nfor more details.\n"
},
+ "deletionPolicy": {
+ "type": "string"
+ },
"effectiveLabels": {
"type": "object",
"additionalProperties": {
@@ -227068,8 +227516,8 @@
},
"skipDelete": {
"type": "boolean",
- "description": "If true, the resource can be deleted\nwithout deleting the Project via the Google API. `skip_delete` is deprecated and will be removed in a future major release. The new release adds support for `deletion_policy` instead.\n",
- "deprecationMessage": "skip_delete is deprecated and will be removed in a future major release. The new release adds support for deletion_policy instead."
+ "description": "If true, the resource can be deleted without\ndeleting the Project via the Google API. `skip_delete` is deprecated and will be\nremoved in 6.0.0. Please use deletion_policy instead. A `skip_delete` value of `false`\ncan be changed to a `deletion_policy` value of `DELETE` and a `skip_delete` value of `true`\nto a `deletion_policy` value of `ABANDON` for equivalent behavior.\n",
+ "deprecationMessage": "skip_delete is deprecated and will be removed in 6.0.0. Please use deletion_policy instead. A skip_delete value of false can be changed to a deletion_policy value of DELETE and a skip_delete value of true to a deletion_policy value of ABANDON for equivalent behavior."
}
},
"required": [
@@ -227089,6 +227537,9 @@
"type": "string",
"description": "The alphanumeric ID of the billing account this project\nbelongs to. The user or service account performing this operation with the provider\nmust have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account.\nSee [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access)\nfor more details.\n"
},
+ "deletionPolicy": {
+ "type": "string"
+ },
"folderId": {
"type": "string",
"description": "The numeric ID of the folder this project should be\ncreated under. Only one of `org_id` or `folder_id` may be\nspecified. If the `folder_id` is specified, then the project is\ncreated under the specified folder. Changing this forces the\nproject to be migrated to the newly specified folder.\n"
@@ -227115,8 +227566,8 @@
},
"skipDelete": {
"type": "boolean",
- "description": "If true, the resource can be deleted\nwithout deleting the Project via the Google API. `skip_delete` is deprecated and will be removed in a future major release. The new release adds support for `deletion_policy` instead.\n",
- "deprecationMessage": "skip_delete is deprecated and will be removed in a future major release. The new release adds support for deletion_policy instead."
+ "description": "If true, the resource can be deleted without\ndeleting the Project via the Google API. `skip_delete` is deprecated and will be\nremoved in 6.0.0. Please use deletion_policy instead. A `skip_delete` value of `false`\ncan be changed to a `deletion_policy` value of `DELETE` and a `skip_delete` value of `true`\nto a `deletion_policy` value of `ABANDON` for equivalent behavior.\n",
+ "deprecationMessage": "skip_delete is deprecated and will be removed in 6.0.0. Please use deletion_policy instead. A skip_delete value of false can be changed to a deletion_policy value of DELETE and a skip_delete value of true to a deletion_policy value of ABANDON for equivalent behavior."
}
},
"stateInputs": {
@@ -227130,6 +227581,9 @@
"type": "string",
"description": "The alphanumeric ID of the billing account this project\nbelongs to. The user or service account performing this operation with the provider\nmust have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account.\nSee [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access)\nfor more details.\n"
},
+ "deletionPolicy": {
+ "type": "string"
+ },
"effectiveLabels": {
"type": "object",
"additionalProperties": {
@@ -227176,8 +227630,8 @@
},
"skipDelete": {
"type": "boolean",
- "description": "If true, the resource can be deleted\nwithout deleting the Project via the Google API. `skip_delete` is deprecated and will be removed in a future major release. The new release adds support for `deletion_policy` instead.\n",
- "deprecationMessage": "skip_delete is deprecated and will be removed in a future major release. The new release adds support for deletion_policy instead."
+ "description": "If true, the resource can be deleted without\ndeleting the Project via the Google API. `skip_delete` is deprecated and will be\nremoved in 6.0.0. Please use deletion_policy instead. A `skip_delete` value of `false`\ncan be changed to a `deletion_policy` value of `DELETE` and a `skip_delete` value of `true`\nto a `deletion_policy` value of `ABANDON` for equivalent behavior.\n",
+ "deprecationMessage": "skip_delete is deprecated and will be removed in 6.0.0. Please use deletion_policy instead. A skip_delete value of false can be changed to a deletion_policy value of DELETE and a skip_delete value of true to a deletion_policy value of ABANDON for equivalent behavior."
}
},
"type": "object"
@@ -236277,6 +236731,145 @@
"type": "object"
}
},
+ "gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig": {
+ "description": "Mute Findings is a volume management feature in Security Command Center\nthat lets you manually or programmatically hide irrelevant findings,\nand create filters to automatically silence existing and future\nfindings based on criteria you specify.\n\n\nTo get more information about FolderMuteConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v2/folders.muteConfigs)\n\n## Example Usage\n\n### Scc V2 Folder Mute Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.organizations.Folder(\"folder\", {\n parent: \"organizations/123456789\",\n displayName: \"folder-name\",\n});\nconst _default = new gcp.securitycenter.V2FolderMuteConfig(\"default\", {\n muteConfigId: \"my-config\",\n folder: folder.folderId,\n location: \"global\",\n description: \"My custom Cloud Security Command Center Finding Folder mute Configuration\",\n filter: \"severity = \\\"HIGH\\\"\",\n type: \"STATIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.organizations.Folder(\"folder\",\n parent=\"organizations/123456789\",\n display_name=\"folder-name\")\ndefault = gcp.securitycenter.V2FolderMuteConfig(\"default\",\n mute_config_id=\"my-config\",\n folder=folder.folder_id,\n location=\"global\",\n description=\"My custom Cloud Security Command Center Finding Folder mute Configuration\",\n filter=\"severity = \\\"HIGH\\\"\",\n type=\"STATIC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Organizations.Folder(\"folder\", new()\n {\n Parent = \"organizations/123456789\",\n DisplayName = \"folder-name\",\n });\n\n var @default = new Gcp.SecurityCenter.V2FolderMuteConfig(\"default\", new()\n {\n MuteConfigId = \"my-config\",\n Folder = folder.FolderId,\n Location = \"global\",\n Description = \"My custom Cloud Security Command Center Finding Folder mute Configuration\",\n Filter = \"severity = \\\"HIGH\\\"\",\n Type = \"STATIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfolder, err := organizations.NewFolder(ctx, \"folder\", \u0026organizations.FolderArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDisplayName: pulumi.String(\"folder-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securitycenter.NewV2FolderMuteConfig(ctx, \"default\", \u0026securitycenter.V2FolderMuteConfigArgs{\n\t\t\tMuteConfigId: pulumi.String(\"my-config\"),\n\t\t\tFolder: folder.FolderId,\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Folder mute Configuration\"),\n\t\t\tFilter: pulumi.String(\"severity = \\\"HIGH\\\"\"),\n\t\t\tType: pulumi.String(\"STATIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.securitycenter.V2FolderMuteConfig;\nimport com.pulumi.gcp.securitycenter.V2FolderMuteConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new Folder(\"folder\", FolderArgs.builder()\n .parent(\"organizations/123456789\")\n .displayName(\"folder-name\")\n .build());\n\n var default_ = new V2FolderMuteConfig(\"default\", V2FolderMuteConfigArgs.builder()\n .muteConfigId(\"my-config\")\n .folder(folder.folderId())\n .location(\"global\")\n .description(\"My custom Cloud Security Command Center Finding Folder mute Configuration\")\n .filter(\"severity = \\\"HIGH\\\"\")\n .type(\"STATIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:organizations:Folder\n properties:\n parent: organizations/123456789\n displayName: folder-name\n default:\n type: gcp:securitycenter:V2FolderMuteConfig\n properties:\n muteConfigId: my-config\n folder: ${folder.folderId}\n location: global\n description: My custom Cloud Security Command Center Finding Folder mute Configuration\n filter: severity = \"HIGH\"\n type: STATIC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFolderMuteConfig can be imported using any of these accepted formats:\n\n* `folders/{{folder}}/locations/{{location}}/muteConfigs/{{mute_config_id}}`\n\n* `{{folder}}/{{location}}/{{mute_config_id}}`\n\nWhen using the `pulumi import` command, FolderMuteConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig default folders/{{folder}}/locations/{{location}}/muteConfigs/{{mute_config_id}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig default {{folder}}/{{location}}/{{mute_config_id}}\n```\n\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "The time at which the mute config was created. This field is set by\nthe server and will be ignored if provided on config creation.\n"
+ },
+ "description": {
+ "type": "string",
+ "description": "A description of the mute config.\n"
+ },
+ "filter": {
+ "type": "string",
+ "description": "An expression that defines the filter to apply across create/update\nevents of findings. While creating a filter string, be mindful of\nthe scope in which the mute configuration is being created. E.g.,\nIf a filter contains project = X but is created under the\nproject = Y scope, it might not match any findings.\n"
+ },
+ "folder": {
+ "type": "string",
+ "description": "The folder whose Cloud Security Command Center the Mute\nConfig lives in.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "location Id is provided by folder. If not provided, Use global as default.\n"
+ },
+ "mostRecentEditor": {
+ "type": "string",
+ "description": "Email address of the user who last edited the mute config. This\nfield is set by the server and will be ignored if provided on\nconfig creation or update.\n"
+ },
+ "muteConfigId": {
+ "type": "string",
+ "description": "Unique identifier provided by the client within the parent scope.\n\n\n- - -\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Name of the mute config. Its format is\norganizations/{organization}/locations/global/muteConfigs/{configId},\nfolders/{folder}/locations/global/muteConfigs/{configId},\nor projects/{project}/locations/global/muteConfigs/{configId}\n"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of the mute config.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. The most recent time at which the mute config was\nupdated. This field is set by the server and will be ignored if\nprovided on config creation or update.\n"
+ }
+ },
+ "required": [
+ "createTime",
+ "filter",
+ "folder",
+ "mostRecentEditor",
+ "muteConfigId",
+ "name",
+ "type",
+ "updateTime"
+ ],
+ "inputProperties": {
+ "description": {
+ "type": "string",
+ "description": "A description of the mute config.\n"
+ },
+ "filter": {
+ "type": "string",
+ "description": "An expression that defines the filter to apply across create/update\nevents of findings. While creating a filter string, be mindful of\nthe scope in which the mute configuration is being created. E.g.,\nIf a filter contains project = X but is created under the\nproject = Y scope, it might not match any findings.\n"
+ },
+ "folder": {
+ "type": "string",
+ "description": "The folder whose Cloud Security Command Center the Mute\nConfig lives in.\n",
+ "willReplaceOnChanges": true
+ },
+ "location": {
+ "type": "string",
+ "description": "location Id is provided by folder. If not provided, Use global as default.\n",
+ "willReplaceOnChanges": true
+ },
+ "muteConfigId": {
+ "type": "string",
+ "description": "Unique identifier provided by the client within the parent scope.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of the mute config.\n"
+ }
+ },
+ "requiredInputs": [
+ "filter",
+ "folder",
+ "muteConfigId",
+ "type"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering V2FolderMuteConfig resources.\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "The time at which the mute config was created. This field is set by\nthe server and will be ignored if provided on config creation.\n"
+ },
+ "description": {
+ "type": "string",
+ "description": "A description of the mute config.\n"
+ },
+ "filter": {
+ "type": "string",
+ "description": "An expression that defines the filter to apply across create/update\nevents of findings. While creating a filter string, be mindful of\nthe scope in which the mute configuration is being created. E.g.,\nIf a filter contains project = X but is created under the\nproject = Y scope, it might not match any findings.\n"
+ },
+ "folder": {
+ "type": "string",
+ "description": "The folder whose Cloud Security Command Center the Mute\nConfig lives in.\n",
+ "willReplaceOnChanges": true
+ },
+ "location": {
+ "type": "string",
+ "description": "location Id is provided by folder. If not provided, Use global as default.\n",
+ "willReplaceOnChanges": true
+ },
+ "mostRecentEditor": {
+ "type": "string",
+ "description": "Email address of the user who last edited the mute config. This\nfield is set by the server and will be ignored if provided on\nconfig creation or update.\n"
+ },
+ "muteConfigId": {
+ "type": "string",
+ "description": "Unique identifier provided by the client within the parent scope.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Name of the mute config. Its format is\norganizations/{organization}/locations/global/muteConfigs/{configId},\nfolders/{folder}/locations/global/muteConfigs/{configId},\nor projects/{project}/locations/global/muteConfigs/{configId}\n"
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of the mute config.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. The most recent time at which the mute config was\nupdated. This field is set by the server and will be ignored if\nprovided on config creation or update.\n"
+ }
+ },
+ "type": "object"
+ }
+ },
"gcp:securitycenter/v2OrganizationMuteConfig:V2OrganizationMuteConfig": {
"description": "Mute Findings is a volume management feature in Security Command Center\nthat lets you manually or programmatically hide irrelevant findings,\nand create filters to automatically silence existing and future\nfindings based on criteria you specify.\n\n\nTo get more information about OrganizationMuteConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v2/organizations.muteConfigs)\n\n## Example Usage\n\n### Scc V2 Organization Mute Config 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.securitycenter.V2OrganizationMuteConfig(\"default\", {\n muteConfigId: \"my-config\",\n organization: \"123456789\",\n location: \"global\",\n description: \"My custom Cloud Security Command Center Finding Organization mute Configuration\",\n filter: \"severity = \\\"HIGH\\\"\",\n type: \"STATIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.securitycenter.V2OrganizationMuteConfig(\"default\",\n mute_config_id=\"my-config\",\n organization=\"123456789\",\n location=\"global\",\n description=\"My custom Cloud Security Command Center Finding Organization mute Configuration\",\n filter=\"severity = \\\"HIGH\\\"\",\n type=\"STATIC\")\n```\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.SecurityCenter.V2OrganizationMuteConfig(\"default\", new()\n {\n MuteConfigId = \"my-config\",\n Organization = \"123456789\",\n Location = \"global\",\n Description = \"My custom Cloud Security Command Center Finding Organization mute Configuration\",\n Filter = \"severity = \\\"HIGH\\\"\",\n Type = \"STATIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationMuteConfig(ctx, \"default\", \u0026securitycenter.V2OrganizationMuteConfigArgs{\n\t\t\tMuteConfigId: pulumi.String(\"my-config\"),\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Organization mute Configuration\"),\n\t\t\tFilter: pulumi.String(\"severity = \\\"HIGH\\\"\"),\n\t\t\tType: pulumi.String(\"STATIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.securitycenter.V2OrganizationMuteConfig;\nimport com.pulumi.gcp.securitycenter.V2OrganizationMuteConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationMuteConfig(\"default\", V2OrganizationMuteConfigArgs.builder()\n .muteConfigId(\"my-config\")\n .organization(\"123456789\")\n .location(\"global\")\n .description(\"My custom Cloud Security Command Center Finding Organization mute Configuration\")\n .filter(\"severity = \\\"HIGH\\\"\")\n .type(\"STATIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:securitycenter:V2OrganizationMuteConfig\n properties:\n muteConfigId: my-config\n organization: '123456789'\n location: global\n description: My custom Cloud Security Command Center Finding Organization mute Configuration\n filter: severity = \"HIGH\"\n type: STATIC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nOrganizationMuteConfig can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/locations/{{location}}/muteConfigs/{{mute_config_id}}`\n\n* `{{organization}}/{{location}}/{{mute_config_id}}`\n\nWhen using the `pulumi import` command, OrganizationMuteConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationMuteConfig:V2OrganizationMuteConfig default organizations/{{organization}}/locations/{{location}}/muteConfigs/{{mute_config_id}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationMuteConfig:V2OrganizationMuteConfig default {{organization}}/{{location}}/{{mute_config_id}}\n```\n\n",
"properties": {
@@ -236537,6 +237130,599 @@
"type": "object"
}
},
+ "gcp:securitycenter/v2OrganizationSource:V2OrganizationSource": {
+ "description": "A Cloud Security Command Center's (Cloud SCC) finding source. A finding\nsource is an entity or a mechanism that can produce a finding. A source is\nlike a container of findings that come from the same scanner, logger,\nmonitor, etc.\n\n\nTo get more information about OrganizationSource, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v2/organizations.sources)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/security-command-center/docs)\n\n## Example Usage\n\n### Scc Source Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customSource = new gcp.securitycenter.Source(\"custom_source\", {\n displayName: \"My Source\",\n organization: \"123456789\",\n description: \"My custom Cloud Security Command Center Finding Source\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_source = gcp.securitycenter.Source(\"custom_source\",\n display_name=\"My Source\",\n organization=\"123456789\",\n description=\"My custom Cloud Security Command Center Finding Source\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customSource = new Gcp.SecurityCenter.Source(\"custom_source\", new()\n {\n DisplayName = \"My Source\",\n Organization = \"123456789\",\n Description = \"My custom Cloud Security Command Center Finding Source\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewSource(ctx, \"custom_source\", \u0026securitycenter.SourceArgs{\n\t\t\tDisplayName: pulumi.String(\"My Source\"),\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Source\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.securitycenter.Source;\nimport com.pulumi.gcp.securitycenter.SourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customSource = new Source(\"customSource\", SourceArgs.builder()\n .displayName(\"My Source\")\n .organization(\"123456789\")\n .description(\"My custom Cloud Security Command Center Finding Source\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customSource:\n type: gcp:securitycenter:Source\n name: custom_source\n properties:\n displayName: My Source\n organization: '123456789'\n description: My custom Cloud Security Command Center Finding Source\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nOrganizationSource can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/sources/{{name}}`\n\n* `{{organization}}/{{name}}`\n\nWhen using the `pulumi import` command, OrganizationSource can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationSource:V2OrganizationSource default organizations/{{organization}}/sources/{{name}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationSource:V2OrganizationSource default {{organization}}/{{name}}\n```\n\n",
+ "properties": {
+ "description": {
+ "type": "string",
+ "description": "The description of the source (max of 1024 characters).\n"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "The source’s display name. A source’s display name must be unique\namongst its siblings, for example, two sources with the same parent\ncan't share the same display name. The display name must start and end\nwith a letter or digit, may contain letters, digits, spaces, hyphens,\nand underscores, and can be no longer than 32 characters.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The resource name of this source, in the format\n`organizations/{{organization}}/sources/{{source}}`.\n"
+ },
+ "organization": {
+ "type": "string",
+ "description": "The organization whose Cloud Security Command Center the Source\nlives in.\n\n\n- - -\n"
+ }
+ },
+ "required": [
+ "displayName",
+ "name",
+ "organization"
+ ],
+ "inputProperties": {
+ "description": {
+ "type": "string",
+ "description": "The description of the source (max of 1024 characters).\n"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "The source’s display name. A source’s display name must be unique\namongst its siblings, for example, two sources with the same parent\ncan't share the same display name. The display name must start and end\nwith a letter or digit, may contain letters, digits, spaces, hyphens,\nand underscores, and can be no longer than 32 characters.\n"
+ },
+ "organization": {
+ "type": "string",
+ "description": "The organization whose Cloud Security Command Center the Source\nlives in.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "displayName",
+ "organization"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering V2OrganizationSource resources.\n",
+ "properties": {
+ "description": {
+ "type": "string",
+ "description": "The description of the source (max of 1024 characters).\n"
+ },
+ "displayName": {
+ "type": "string",
+ "description": "The source’s display name. A source’s display name must be unique\namongst its siblings, for example, two sources with the same parent\ncan't share the same display name. The display name must start and end\nwith a letter or digit, may contain letters, digits, spaces, hyphens,\nand underscores, and can be no longer than 32 characters.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The resource name of this source, in the format\n`organizations/{{organization}}/sources/{{source}}`.\n"
+ },
+ "organization": {
+ "type": "string",
+ "description": "The organization whose Cloud Security Command Center the Source\nlives in.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:securitycenter/v2OrganizationSourceIamBinding:V2OrganizationSourceIamBinding": {
+ "description": "Three different resources help you manage your IAM policy for Security Command Center (SCC)v2 API OrganizationSource. Each of these resources serves a different use case:\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Authoritative. Sets the IAM policy for the organizationsource and replaces any existing policy already attached.\n* `gcp.securitycenter.V2OrganizationSourceIamBinding`: 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 organizationsource are preserved.\n* `gcp.securitycenter.V2OrganizationSourceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organizationsource are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Retrieves the IAM policy for the organizationsource\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamPolicy` **cannot** be used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamBinding` and `gcp.securitycenter.V2OrganizationSourceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamBinding` resources **can be** used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.securitycenter.V2OrganizationSourceIamPolicy\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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamPolicy(\"policy\", new()\n {\n Source = customSource.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/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\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 = securitycenter.NewV2OrganizationSourceIamPolicy(ctx, \"policy\", \u0026securitycenter.V2OrganizationSourceIamPolicyArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamPolicy;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 V2OrganizationSourceIamPolicy(\"policy\", V2OrganizationSourceIamPolicyArgs.builder()\n .source(customSource.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:securitycenter:V2OrganizationSourceIamPolicy\n properties:\n source: ${customSource.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.securitycenter.V2OrganizationSourceIamBinding\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.securitycenter.V2OrganizationSourceIamBinding(\"binding\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamBinding(\"binding\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamBinding(\"binding\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamBinding(ctx, \"binding\", \u0026securitycenter.V2OrganizationSourceIamBindingArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamBinding;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamBinding(\"binding\", V2OrganizationSourceIamBindingArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamBinding\n properties:\n source: ${customSource.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.securitycenter.V2OrganizationSourceIamMember\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.securitycenter.V2OrganizationSourceIamMember(\"member\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamMember(\"member\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamMember(\"member\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamMember(ctx, \"member\", \u0026securitycenter.V2OrganizationSourceIamMemberArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamMember;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamMember(\"member\", V2OrganizationSourceIamMemberArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamMember\n properties:\n source: ${customSource.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\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\n# IAM policy for Security Command Center (SCC)v2 API OrganizationSource\nThree different resources help you manage your IAM policy for Security Command Center (SCC)v2 API OrganizationSource. Each of these resources serves a different use case:\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Authoritative. Sets the IAM policy for the organizationsource and replaces any existing policy already attached.\n* `gcp.securitycenter.V2OrganizationSourceIamBinding`: 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 organizationsource are preserved.\n* `gcp.securitycenter.V2OrganizationSourceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organizationsource are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Retrieves the IAM policy for the organizationsource\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamPolicy` **cannot** be used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamBinding` and `gcp.securitycenter.V2OrganizationSourceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamBinding` resources **can be** used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.securitycenter.V2OrganizationSourceIamPolicy\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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamPolicy(\"policy\", new()\n {\n Source = customSource.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/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\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 = securitycenter.NewV2OrganizationSourceIamPolicy(ctx, \"policy\", \u0026securitycenter.V2OrganizationSourceIamPolicyArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamPolicy;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 V2OrganizationSourceIamPolicy(\"policy\", V2OrganizationSourceIamPolicyArgs.builder()\n .source(customSource.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:securitycenter:V2OrganizationSourceIamPolicy\n properties:\n source: ${customSource.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.securitycenter.V2OrganizationSourceIamBinding\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.securitycenter.V2OrganizationSourceIamBinding(\"binding\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamBinding(\"binding\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamBinding(\"binding\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamBinding(ctx, \"binding\", \u0026securitycenter.V2OrganizationSourceIamBindingArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamBinding;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamBinding(\"binding\", V2OrganizationSourceIamBindingArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamBinding\n properties:\n source: ${customSource.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.securitycenter.V2OrganizationSourceIamMember\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.securitycenter.V2OrganizationSourceIamMember(\"member\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamMember(\"member\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamMember(\"member\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamMember(ctx, \"member\", \u0026securitycenter.V2OrganizationSourceIamMemberArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamMember;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamMember(\"member\", V2OrganizationSourceIamMemberArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamMember\n properties:\n source: ${customSource.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* organizations/{{organization}}/sources/{{source}}\n\n* {{organization}}/{{source}}\n\n* {{source}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nSecurity Command Center (SCC)v2 API organizationsource 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:securitycenter/v2OrganizationSourceIamBinding:V2OrganizationSourceIamBinding editor \"organizations/{{organization}}/sources/{{source}} 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:securitycenter/v2OrganizationSourceIamBinding:V2OrganizationSourceIamBinding editor \"organizations/{{organization}}/sources/{{source}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationSourceIamBinding:V2OrganizationSourceIamBinding editor organizations/{{organization}}/sources/{{source}}\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:securitycenter/V2OrganizationSourceIamBindingCondition:V2OrganizationSourceIamBindingCondition"
+ },
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\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"
+ },
+ "organization": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.securitycenter.V2OrganizationSourceIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n"
+ }
+ },
+ "required": [
+ "etag",
+ "members",
+ "organization",
+ "role",
+ "source"
+ ],
+ "inputProperties": {
+ "condition": {
+ "$ref": "#/types/gcp:securitycenter/V2OrganizationSourceIamBindingCondition:V2OrganizationSourceIamBindingCondition",
+ "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"
+ },
+ "organization": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.securitycenter.V2OrganizationSourceIamBinding` 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
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "members",
+ "organization",
+ "role",
+ "source"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering V2OrganizationSourceIamBinding resources.\n",
+ "properties": {
+ "condition": {
+ "$ref": "#/types/gcp:securitycenter/V2OrganizationSourceIamBindingCondition:V2OrganizationSourceIamBindingCondition",
+ "willReplaceOnChanges": true
+ },
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\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"
+ },
+ "organization": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.securitycenter.V2OrganizationSourceIamBinding` 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
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:securitycenter/v2OrganizationSourceIamMember:V2OrganizationSourceIamMember": {
+ "description": "Three different resources help you manage your IAM policy for Security Command Center (SCC)v2 API OrganizationSource. Each of these resources serves a different use case:\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Authoritative. Sets the IAM policy for the organizationsource and replaces any existing policy already attached.\n* `gcp.securitycenter.V2OrganizationSourceIamBinding`: 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 organizationsource are preserved.\n* `gcp.securitycenter.V2OrganizationSourceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organizationsource are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Retrieves the IAM policy for the organizationsource\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamPolicy` **cannot** be used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamBinding` and `gcp.securitycenter.V2OrganizationSourceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamBinding` resources **can be** used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.securitycenter.V2OrganizationSourceIamPolicy\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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamPolicy(\"policy\", new()\n {\n Source = customSource.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/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\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 = securitycenter.NewV2OrganizationSourceIamPolicy(ctx, \"policy\", \u0026securitycenter.V2OrganizationSourceIamPolicyArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamPolicy;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 V2OrganizationSourceIamPolicy(\"policy\", V2OrganizationSourceIamPolicyArgs.builder()\n .source(customSource.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:securitycenter:V2OrganizationSourceIamPolicy\n properties:\n source: ${customSource.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.securitycenter.V2OrganizationSourceIamBinding\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.securitycenter.V2OrganizationSourceIamBinding(\"binding\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamBinding(\"binding\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamBinding(\"binding\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamBinding(ctx, \"binding\", \u0026securitycenter.V2OrganizationSourceIamBindingArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamBinding;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamBinding(\"binding\", V2OrganizationSourceIamBindingArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamBinding\n properties:\n source: ${customSource.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.securitycenter.V2OrganizationSourceIamMember\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.securitycenter.V2OrganizationSourceIamMember(\"member\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamMember(\"member\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamMember(\"member\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamMember(ctx, \"member\", \u0026securitycenter.V2OrganizationSourceIamMemberArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamMember;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamMember(\"member\", V2OrganizationSourceIamMemberArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamMember\n properties:\n source: ${customSource.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\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\n# IAM policy for Security Command Center (SCC)v2 API OrganizationSource\nThree different resources help you manage your IAM policy for Security Command Center (SCC)v2 API OrganizationSource. Each of these resources serves a different use case:\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Authoritative. Sets the IAM policy for the organizationsource and replaces any existing policy already attached.\n* `gcp.securitycenter.V2OrganizationSourceIamBinding`: 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 organizationsource are preserved.\n* `gcp.securitycenter.V2OrganizationSourceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organizationsource are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Retrieves the IAM policy for the organizationsource\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamPolicy` **cannot** be used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamBinding` and `gcp.securitycenter.V2OrganizationSourceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamBinding` resources **can be** used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.securitycenter.V2OrganizationSourceIamPolicy\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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamPolicy(\"policy\", new()\n {\n Source = customSource.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/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\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 = securitycenter.NewV2OrganizationSourceIamPolicy(ctx, \"policy\", \u0026securitycenter.V2OrganizationSourceIamPolicyArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamPolicy;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 V2OrganizationSourceIamPolicy(\"policy\", V2OrganizationSourceIamPolicyArgs.builder()\n .source(customSource.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:securitycenter:V2OrganizationSourceIamPolicy\n properties:\n source: ${customSource.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.securitycenter.V2OrganizationSourceIamBinding\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.securitycenter.V2OrganizationSourceIamBinding(\"binding\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamBinding(\"binding\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamBinding(\"binding\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamBinding(ctx, \"binding\", \u0026securitycenter.V2OrganizationSourceIamBindingArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamBinding;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamBinding(\"binding\", V2OrganizationSourceIamBindingArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamBinding\n properties:\n source: ${customSource.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.securitycenter.V2OrganizationSourceIamMember\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.securitycenter.V2OrganizationSourceIamMember(\"member\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamMember(\"member\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamMember(\"member\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamMember(ctx, \"member\", \u0026securitycenter.V2OrganizationSourceIamMemberArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamMember;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamMember(\"member\", V2OrganizationSourceIamMemberArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamMember\n properties:\n source: ${customSource.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* organizations/{{organization}}/sources/{{source}}\n\n* {{organization}}/{{source}}\n\n* {{source}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nSecurity Command Center (SCC)v2 API organizationsource 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:securitycenter/v2OrganizationSourceIamMember:V2OrganizationSourceIamMember editor \"organizations/{{organization}}/sources/{{source}} 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:securitycenter/v2OrganizationSourceIamMember:V2OrganizationSourceIamMember editor \"organizations/{{organization}}/sources/{{source}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationSourceIamMember:V2OrganizationSourceIamMember editor organizations/{{organization}}/sources/{{source}}\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:securitycenter/V2OrganizationSourceIamMemberCondition:V2OrganizationSourceIamMemberCondition"
+ },
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\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"
+ },
+ "organization": {
+ "type": "string"
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.securitycenter.V2OrganizationSourceIamBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n"
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n"
+ }
+ },
+ "required": [
+ "etag",
+ "member",
+ "organization",
+ "role",
+ "source"
+ ],
+ "inputProperties": {
+ "condition": {
+ "$ref": "#/types/gcp:securitycenter/V2OrganizationSourceIamMemberCondition:V2OrganizationSourceIamMemberCondition",
+ "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
+ },
+ "organization": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.securitycenter.V2OrganizationSourceIamBinding` 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
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "member",
+ "organization",
+ "role",
+ "source"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering V2OrganizationSourceIamMember resources.\n",
+ "properties": {
+ "condition": {
+ "$ref": "#/types/gcp:securitycenter/V2OrganizationSourceIamMemberCondition:V2OrganizationSourceIamMemberCondition",
+ "willReplaceOnChanges": true
+ },
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\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",
+ "willReplaceOnChanges": true
+ },
+ "organization": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "role": {
+ "type": "string",
+ "description": "The role that should be applied. Only one\n`gcp.securitycenter.V2OrganizationSourceIamBinding` 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
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:securitycenter/v2OrganizationSourceIamPolicy:V2OrganizationSourceIamPolicy": {
+ "description": "Three different resources help you manage your IAM policy for Security Command Center (SCC)v2 API OrganizationSource. Each of these resources serves a different use case:\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Authoritative. Sets the IAM policy for the organizationsource and replaces any existing policy already attached.\n* `gcp.securitycenter.V2OrganizationSourceIamBinding`: 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 organizationsource are preserved.\n* `gcp.securitycenter.V2OrganizationSourceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organizationsource are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Retrieves the IAM policy for the organizationsource\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamPolicy` **cannot** be used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamBinding` and `gcp.securitycenter.V2OrganizationSourceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamBinding` resources **can be** used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.securitycenter.V2OrganizationSourceIamPolicy\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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamPolicy(\"policy\", new()\n {\n Source = customSource.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/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\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 = securitycenter.NewV2OrganizationSourceIamPolicy(ctx, \"policy\", \u0026securitycenter.V2OrganizationSourceIamPolicyArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamPolicy;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 V2OrganizationSourceIamPolicy(\"policy\", V2OrganizationSourceIamPolicyArgs.builder()\n .source(customSource.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:securitycenter:V2OrganizationSourceIamPolicy\n properties:\n source: ${customSource.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.securitycenter.V2OrganizationSourceIamBinding\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.securitycenter.V2OrganizationSourceIamBinding(\"binding\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamBinding(\"binding\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamBinding(\"binding\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamBinding(ctx, \"binding\", \u0026securitycenter.V2OrganizationSourceIamBindingArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamBinding;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamBinding(\"binding\", V2OrganizationSourceIamBindingArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamBinding\n properties:\n source: ${customSource.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.securitycenter.V2OrganizationSourceIamMember\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.securitycenter.V2OrganizationSourceIamMember(\"member\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamMember(\"member\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamMember(\"member\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamMember(ctx, \"member\", \u0026securitycenter.V2OrganizationSourceIamMemberArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamMember;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamMember(\"member\", V2OrganizationSourceIamMemberArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamMember\n properties:\n source: ${customSource.name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\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\n# IAM policy for Security Command Center (SCC)v2 API OrganizationSource\nThree different resources help you manage your IAM policy for Security Command Center (SCC)v2 API OrganizationSource. Each of these resources serves a different use case:\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Authoritative. Sets the IAM policy for the organizationsource and replaces any existing policy already attached.\n* `gcp.securitycenter.V2OrganizationSourceIamBinding`: 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 organizationsource are preserved.\n* `gcp.securitycenter.V2OrganizationSourceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organizationsource are preserved.\n\nA data source can be used to retrieve policy data in advent you do not need creation\n\n* `gcp.securitycenter.V2OrganizationSourceIamPolicy`: Retrieves the IAM policy for the organizationsource\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamPolicy` **cannot** be used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamBinding` and `gcp.securitycenter.V2OrganizationSourceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.securitycenter.V2OrganizationSourceIamBinding` resources **can be** used in conjunction with `gcp.securitycenter.V2OrganizationSourceIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## gcp.securitycenter.V2OrganizationSourceIamPolicy\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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamPolicy(\"policy\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamPolicy(\"policy\", new()\n {\n Source = customSource.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/v7/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\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 = securitycenter.NewV2OrganizationSourceIamPolicy(ctx, \"policy\", \u0026securitycenter.V2OrganizationSourceIamPolicyArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamPolicy;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 V2OrganizationSourceIamPolicy(\"policy\", V2OrganizationSourceIamPolicyArgs.builder()\n .source(customSource.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:securitycenter:V2OrganizationSourceIamPolicy\n properties:\n source: ${customSource.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.securitycenter.V2OrganizationSourceIamBinding\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.securitycenter.V2OrganizationSourceIamBinding(\"binding\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamBinding(\"binding\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamBinding(\"binding\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamBinding(ctx, \"binding\", \u0026securitycenter.V2OrganizationSourceIamBindingArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamBinding;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamBinding(\"binding\", V2OrganizationSourceIamBindingArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamBinding\n properties:\n source: ${customSource.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## gcp.securitycenter.V2OrganizationSourceIamMember\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.securitycenter.V2OrganizationSourceIamMember(\"member\", {\n source: customSource.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.securitycenter.V2OrganizationSourceIamMember(\"member\",\n source=custom_source[\"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.SecurityCenter.V2OrganizationSourceIamMember(\"member\", new()\n {\n Source = customSource.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/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2OrganizationSourceIamMember(ctx, \"member\", \u0026securitycenter.V2OrganizationSourceIamMemberArgs{\n\t\t\tSource: pulumi.Any(customSource.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.securitycenter.V2OrganizationSourceIamMember;\nimport com.pulumi.gcp.securitycenter.V2OrganizationSourceIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2OrganizationSourceIamMember(\"member\", V2OrganizationSourceIamMemberArgs.builder()\n .source(customSource.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:securitycenter:V2OrganizationSourceIamMember\n properties:\n source: ${customSource.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* organizations/{{organization}}/sources/{{source}}\n\n* {{organization}}/{{source}}\n\n* {{source}}\n\nAny variables not passed in the import command will be taken from the provider configuration.\n\nSecurity Command Center (SCC)v2 API organizationsource 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:securitycenter/v2OrganizationSourceIamPolicy:V2OrganizationSourceIamPolicy editor \"organizations/{{organization}}/sources/{{source}} 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:securitycenter/v2OrganizationSourceIamPolicy:V2OrganizationSourceIamPolicy editor \"organizations/{{organization}}/sources/{{source}} roles/viewer\"\n```\n\nIAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationSourceIamPolicy:V2OrganizationSourceIamPolicy editor organizations/{{organization}}/sources/{{source}}\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"
+ },
+ "organization": {
+ "type": "string"
+ },
+ "policyData": {
+ "type": "string",
+ "description": "The policy data generated by\na `gcp.organizations.getIAMPolicy` data source.\n"
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n"
+ }
+ },
+ "required": [
+ "etag",
+ "organization",
+ "policyData",
+ "source"
+ ],
+ "inputProperties": {
+ "organization": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "policyData": {
+ "type": "string",
+ "description": "The policy data generated by\na `gcp.organizations.getIAMPolicy` data source.\n"
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "requiredInputs": [
+ "organization",
+ "policyData",
+ "source"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering V2OrganizationSourceIamPolicy resources.\n",
+ "properties": {
+ "etag": {
+ "type": "string",
+ "description": "(Computed) The etag of the IAM policy.\n"
+ },
+ "organization": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "policyData": {
+ "type": "string",
+ "description": "The policy data generated by\na `gcp.organizations.getIAMPolicy` data source.\n"
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:securitycenter/v2ProjectMuteConfig:V2ProjectMuteConfig": {
+ "description": "Mute Findings is a volume management feature in Security Command Center\nthat lets you manually or programmatically hide irrelevant findings,\nand create filters to automatically silence existing and future\nfindings based on criteria you specify.\n\n\nTo get more information about ProjectMuteConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v2/projects.muteConfigs)\n\n## Example Usage\n\n### Scc V2 Project Mute Config 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.securitycenter.V2ProjectMuteConfig(\"default\", {\n muteConfigId: \"my-config\",\n project: \"\",\n location: \"global\",\n description: \"My custom Cloud Security Command Center Finding Project mute Configuration\",\n filter: \"severity = \\\"HIGH\\\"\",\n type: \"STATIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.securitycenter.V2ProjectMuteConfig(\"default\",\n mute_config_id=\"my-config\",\n project=\"\",\n location=\"global\",\n description=\"My custom Cloud Security Command Center Finding Project mute Configuration\",\n filter=\"severity = \\\"HIGH\\\"\",\n type=\"STATIC\")\n```\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.SecurityCenter.V2ProjectMuteConfig(\"default\", new()\n {\n MuteConfigId = \"my-config\",\n Project = \"\",\n Location = \"global\",\n Description = \"My custom Cloud Security Command Center Finding Project mute Configuration\",\n Filter = \"severity = \\\"HIGH\\\"\",\n Type = \"STATIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.NewV2ProjectMuteConfig(ctx, \"default\", \u0026securitycenter.V2ProjectMuteConfigArgs{\n\t\t\tMuteConfigId: pulumi.String(\"my-config\"),\n\t\t\tProject: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Project mute Configuration\"),\n\t\t\tFilter: pulumi.String(\"severity = \\\"HIGH\\\"\"),\n\t\t\tType: pulumi.String(\"STATIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.securitycenter.V2ProjectMuteConfig;\nimport com.pulumi.gcp.securitycenter.V2ProjectMuteConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 V2ProjectMuteConfig(\"default\", V2ProjectMuteConfigArgs.builder()\n .muteConfigId(\"my-config\")\n .project(\"\")\n .location(\"global\")\n .description(\"My custom Cloud Security Command Center Finding Project mute Configuration\")\n .filter(\"severity = \\\"HIGH\\\"\")\n .type(\"STATIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:securitycenter:V2ProjectMuteConfig\n properties:\n muteConfigId: my-config\n project:\n location: global\n description: My custom Cloud Security Command Center Finding Project mute Configuration\n filter: severity = \"HIGH\"\n type: STATIC\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nProjectMuteConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/muteConfigs/{{mute_config_id}}`\n\n* `{{project}}/{{location}}/{{mute_config_id}}`\n\n* `{{location}}/{{mute_config_id}}`\n\nWhen using the `pulumi import` command, ProjectMuteConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/v2ProjectMuteConfig:V2ProjectMuteConfig default projects/{{project}}/locations/{{location}}/muteConfigs/{{mute_config_id}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/v2ProjectMuteConfig:V2ProjectMuteConfig default {{project}}/{{location}}/{{mute_config_id}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/v2ProjectMuteConfig:V2ProjectMuteConfig default {{location}}/{{mute_config_id}}\n```\n\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "The time at which the mute config was created. This field is set by\nthe server and will be ignored if provided on config creation.\n"
+ },
+ "description": {
+ "type": "string",
+ "description": "A description of the mute config.\n"
+ },
+ "filter": {
+ "type": "string",
+ "description": "An expression that defines the filter to apply across create/update\nevents of findings. While creating a filter string, be mindful of\nthe scope in which the mute configuration is being created. E.g.,\nIf a filter contains project = X but is created under the\nproject = Y scope, it might not match any findings.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "location Id is provided by project. If not provided, Use global as default.\n"
+ },
+ "mostRecentEditor": {
+ "type": "string",
+ "description": "Email address of the user who last edited the mute config. This\nfield is set by the server and will be ignored if provided on\nconfig creation or update.\n"
+ },
+ "muteConfigId": {
+ "type": "string",
+ "description": "Unique identifier provided by the client within the parent scope.\n\n\n- - -\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "Name of the mute config. Its format is\nprojects/{project}/locations/global/muteConfigs/{configId},\nfolders/{folder}/locations/global/muteConfigs/{configId},\nor organizations/{organization}/locations/global/muteConfigs/{configId}\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": {
+ "type": "string",
+ "description": "The type of the mute config.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. The most recent time at which the mute config was\nupdated. This field is set by the server and will be ignored if\nprovided on config creation or update.\n"
+ }
+ },
+ "required": [
+ "createTime",
+ "filter",
+ "mostRecentEditor",
+ "muteConfigId",
+ "name",
+ "project",
+ "type",
+ "updateTime"
+ ],
+ "inputProperties": {
+ "description": {
+ "type": "string",
+ "description": "A description of the mute config.\n"
+ },
+ "filter": {
+ "type": "string",
+ "description": "An expression that defines the filter to apply across create/update\nevents of findings. While creating a filter string, be mindful of\nthe scope in which the mute configuration is being created. E.g.,\nIf a filter contains project = X but is created under the\nproject = Y scope, it might not match any findings.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "location Id is provided by project. If not provided, Use global as default.\n",
+ "willReplaceOnChanges": true
+ },
+ "muteConfigId": {
+ "type": "string",
+ "description": "Unique identifier provided by the client within the parent scope.\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
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of the mute config.\n"
+ }
+ },
+ "requiredInputs": [
+ "filter",
+ "muteConfigId",
+ "type"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering V2ProjectMuteConfig resources.\n",
+ "properties": {
+ "createTime": {
+ "type": "string",
+ "description": "The time at which the mute config was created. This field is set by\nthe server and will be ignored if provided on config creation.\n"
+ },
+ "description": {
+ "type": "string",
+ "description": "A description of the mute config.\n"
+ },
+ "filter": {
+ "type": "string",
+ "description": "An expression that defines the filter to apply across create/update\nevents of findings. While creating a filter string, be mindful of\nthe scope in which the mute configuration is being created. E.g.,\nIf a filter contains project = X but is created under the\nproject = Y scope, it might not match any findings.\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "location Id is provided by project. If not provided, Use global as default.\n",
+ "willReplaceOnChanges": true
+ },
+ "mostRecentEditor": {
+ "type": "string",
+ "description": "Email address of the user who last edited the mute config. This\nfield is set by the server and will be ignored if provided on\nconfig creation or update.\n"
+ },
+ "muteConfigId": {
+ "type": "string",
+ "description": "Unique identifier provided by the client within the parent scope.\n\n\n- - -\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "Name of the mute config. Its format is\nprojects/{project}/locations/global/muteConfigs/{configId},\nfolders/{folder}/locations/global/muteConfigs/{configId},\nor organizations/{organization}/locations/global/muteConfigs/{configId}\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
+ },
+ "type": {
+ "type": "string",
+ "description": "The type of the mute config.\n"
+ },
+ "updateTime": {
+ "type": "string",
+ "description": "Output only. The most recent time at which the mute config was\nupdated. This field is set by the server and will be ignored if\nprovided on config creation or update.\n"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "gcp:securitycenter/v2ProjectNotificationConfig:V2ProjectNotificationConfig": {
+ "description": "A Cloud Security Command Center (Cloud SCC) notification configs. A\nnotification config is a Cloud SCC resource that contains the\nconfiguration to send notifications for create/update events of\nfindings, assets and etc.\n\u003e **Note:** In order to use Cloud SCC resources, your organization must be enrolled\nin [SCC Standard/Premium](https://cloud.google.com/security-command-center/docs/quickstart-security-command-center).\nWithout doing so, you may run into errors during resource creation.\n\n\nTo get more information about ProjectNotificationConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v2/projects.locations.notificationConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/security-command-center/docs)\n\n## Example Usage\n\n### Scc V2 Project Notification Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sccV2ProjectNotification = new gcp.pubsub.Topic(\"scc_v2_project_notification\", {name: \"my-topic\"});\nconst customNotificationConfig = new gcp.securitycenter.V2ProjectNotificationConfig(\"custom_notification_config\", {\n configId: \"my-config\",\n project: \"my-project-name\",\n location: \"global\",\n description: \"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsubTopic: sccV2ProjectNotification.id,\n streamingConfig: {\n filter: \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscc_v2_project_notification = gcp.pubsub.Topic(\"scc_v2_project_notification\", name=\"my-topic\")\ncustom_notification_config = gcp.securitycenter.V2ProjectNotificationConfig(\"custom_notification_config\",\n config_id=\"my-config\",\n project=\"my-project-name\",\n location=\"global\",\n description=\"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsub_topic=scc_v2_project_notification.id,\n streaming_config={\n \"filter\": \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sccV2ProjectNotification = new Gcp.PubSub.Topic(\"scc_v2_project_notification\", new()\n {\n Name = \"my-topic\",\n });\n\n var customNotificationConfig = new Gcp.SecurityCenter.V2ProjectNotificationConfig(\"custom_notification_config\", new()\n {\n ConfigId = \"my-config\",\n Project = \"my-project-name\",\n Location = \"global\",\n Description = \"My custom Cloud Security Command Center Finding Notification Configuration\",\n PubsubTopic = sccV2ProjectNotification.Id,\n StreamingConfig = new Gcp.SecurityCenter.Inputs.V2ProjectNotificationConfigStreamingConfigArgs\n {\n Filter = \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsccV2ProjectNotification, err := pubsub.NewTopic(ctx, \"scc_v2_project_notification\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"my-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securitycenter.NewV2ProjectNotificationConfig(ctx, \"custom_notification_config\", \u0026securitycenter.V2ProjectNotificationConfigArgs{\n\t\t\tConfigId: pulumi.String(\"my-config\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Notification Configuration\"),\n\t\t\tPubsubTopic: sccV2ProjectNotification.ID(),\n\t\t\tStreamingConfig: \u0026securitycenter.V2ProjectNotificationConfigStreamingConfigArgs{\n\t\t\t\tFilter: pulumi.String(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.securitycenter.V2ProjectNotificationConfig;\nimport com.pulumi.gcp.securitycenter.V2ProjectNotificationConfigArgs;\nimport com.pulumi.gcp.securitycenter.inputs.V2ProjectNotificationConfigStreamingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sccV2ProjectNotification = new Topic(\"sccV2ProjectNotification\", TopicArgs.builder()\n .name(\"my-topic\")\n .build());\n\n var customNotificationConfig = new V2ProjectNotificationConfig(\"customNotificationConfig\", V2ProjectNotificationConfigArgs.builder()\n .configId(\"my-config\")\n .project(\"my-project-name\")\n .location(\"global\")\n .description(\"My custom Cloud Security Command Center Finding Notification Configuration\")\n .pubsubTopic(sccV2ProjectNotification.id())\n .streamingConfig(V2ProjectNotificationConfigStreamingConfigArgs.builder()\n .filter(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sccV2ProjectNotification:\n type: gcp:pubsub:Topic\n name: scc_v2_project_notification\n properties:\n name: my-topic\n customNotificationConfig:\n type: gcp:securitycenter:V2ProjectNotificationConfig\n name: custom_notification_config\n properties:\n configId: my-config\n project: my-project-name\n location: global\n description: My custom Cloud Security Command Center Finding Notification Configuration\n pubsubTopic: ${sccV2ProjectNotification.id}\n streamingConfig:\n filter: category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nProjectNotificationConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/notificationConfigs/{{config_id}}`\n\n* `{{project}}/{{location}}/{{config_id}}`\n\n* `{{location}}/{{config_id}}`\n\nWhen using the `pulumi import` command, ProjectNotificationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/v2ProjectNotificationConfig:V2ProjectNotificationConfig default projects/{{project}}/locations/{{location}}/notificationConfigs/{{config_id}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/v2ProjectNotificationConfig:V2ProjectNotificationConfig default {{project}}/{{location}}/{{config_id}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/v2ProjectNotificationConfig:V2ProjectNotificationConfig default {{location}}/{{config_id}}\n```\n\n",
+ "properties": {
+ "configId": {
+ "type": "string",
+ "description": "This must be unique within the project.\n"
+ },
+ "description": {
+ "type": "string",
+ "description": "The description of the notification config (max of 1024 characters).\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Location ID of the parent organization. Only global is supported at the moment.\n"
+ },
+ "name": {
+ "type": "string",
+ "description": "The resource name of this notification config, in the format\n`projects/{{projectId}}/locations/{{location}}/notificationConfigs/{{config_id}}`.\n"
+ },
+ "project": {
+ "type": "string"
+ },
+ "pubsubTopic": {
+ "type": "string",
+ "description": "The Pub/Sub topic to send notifications to. Its format is \"projects/[project_id]/topics/[topic]\".\n"
+ },
+ "serviceAccount": {
+ "type": "string",
+ "description": "The service account that needs \"pubsub.topics.publish\" permission to\npublish to the Pub/Sub topic.\n"
+ },
+ "streamingConfig": {
+ "$ref": "#/types/gcp:securitycenter/V2ProjectNotificationConfigStreamingConfig:V2ProjectNotificationConfigStreamingConfig",
+ "description": "The config for triggering streaming-based notifications.\nStructure is documented below.\n"
+ }
+ },
+ "required": [
+ "configId",
+ "name",
+ "project",
+ "serviceAccount",
+ "streamingConfig"
+ ],
+ "inputProperties": {
+ "configId": {
+ "type": "string",
+ "description": "This must be unique within the project.\n",
+ "willReplaceOnChanges": true
+ },
+ "description": {
+ "type": "string",
+ "description": "The description of the notification config (max of 1024 characters).\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Location ID of the parent organization. Only global is supported at the moment.\n",
+ "willReplaceOnChanges": true
+ },
+ "project": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "pubsubTopic": {
+ "type": "string",
+ "description": "The Pub/Sub topic to send notifications to. Its format is \"projects/[project_id]/topics/[topic]\".\n"
+ },
+ "streamingConfig": {
+ "$ref": "#/types/gcp:securitycenter/V2ProjectNotificationConfigStreamingConfig:V2ProjectNotificationConfigStreamingConfig",
+ "description": "The config for triggering streaming-based notifications.\nStructure is documented below.\n"
+ }
+ },
+ "requiredInputs": [
+ "configId",
+ "streamingConfig"
+ ],
+ "stateInputs": {
+ "description": "Input properties used for looking up and filtering V2ProjectNotificationConfig resources.\n",
+ "properties": {
+ "configId": {
+ "type": "string",
+ "description": "This must be unique within the project.\n",
+ "willReplaceOnChanges": true
+ },
+ "description": {
+ "type": "string",
+ "description": "The description of the notification config (max of 1024 characters).\n"
+ },
+ "location": {
+ "type": "string",
+ "description": "Location ID of the parent organization. Only global is supported at the moment.\n",
+ "willReplaceOnChanges": true
+ },
+ "name": {
+ "type": "string",
+ "description": "The resource name of this notification config, in the format\n`projects/{{projectId}}/locations/{{location}}/notificationConfigs/{{config_id}}`.\n"
+ },
+ "project": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "pubsubTopic": {
+ "type": "string",
+ "description": "The Pub/Sub topic to send notifications to. Its format is \"projects/[project_id]/topics/[topic]\".\n"
+ },
+ "serviceAccount": {
+ "type": "string",
+ "description": "The service account that needs \"pubsub.topics.publish\" permission to\npublish to the Pub/Sub topic.\n"
+ },
+ "streamingConfig": {
+ "$ref": "#/types/gcp:securitycenter/V2ProjectNotificationConfigStreamingConfig:V2ProjectNotificationConfigStreamingConfig",
+ "description": "The config for triggering streaming-based notifications.\nStructure is documented below.\n"
+ }
+ },
+ "type": "object"
+ }
+ },
"gcp:securityposture/posture:Posture": {
"description": "A Posture represents a collection of policy set including its name, state, description\nand policy sets. A policy set includes set of policies along with their definition.\nA posture can be created at the organization level.\nEvery update to a deployed posture creates a new posture revision with an updated revision_id.\n\n\nTo get more information about Posture, see:\n\n* How-to Guides\n * [Create and deploy a posture](https://cloud.google.com/security-command-center/docs/how-to-use-security-posture)\n\n## Example Usage\n\n### Securityposture Posture Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst posture1 = new gcp.securityposture.Posture(\"posture1\", {\n postureId: \"posture_example\",\n parent: \"organizations/123456789\",\n location: \"global\",\n state: \"ACTIVE\",\n description: \"a new posture\",\n policySets: [\n {\n policySetId: \"org_policy_set\",\n description: \"set of org policies\",\n policies: [\n {\n policyId: \"canned_org_policy\",\n constraint: {\n orgPolicyConstraint: {\n cannedConstraintId: \"storage.uniformBucketLevelAccess\",\n policyRules: [{\n enforce: true,\n condition: {\n description: \"condition description\",\n expression: \"resource.matchTag('org_id/tag_key_short_name,'tag_value_short_name')\",\n title: \"a CEL condition\",\n },\n }],\n },\n },\n },\n {\n policyId: \"custom_org_policy\",\n constraint: {\n orgPolicyConstraintCustom: {\n customConstraint: {\n name: \"organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade\",\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 \"UPDATE\",\n ],\n resourceTypes: [\"container.googleapis.com/NodePool\"],\n },\n policyRules: [{\n enforce: true,\n condition: {\n description: \"condition description\",\n expression: \"resource.matchTagId('tagKeys/key_id','tagValues/value_id')\",\n title: \"a CEL condition\",\n },\n }],\n },\n },\n },\n ],\n },\n {\n policySetId: \"sha_policy_set\",\n description: \"set of sha policies\",\n policies: [\n {\n policyId: \"sha_builtin_module\",\n constraint: {\n securityHealthAnalyticsModule: {\n moduleName: \"BIGQUERY_TABLE_CMEK_DISABLED\",\n moduleEnablementState: \"ENABLED\",\n },\n },\n description: \"enable BIGQUERY_TABLE_CMEK_DISABLED\",\n },\n {\n policyId: \"sha_custom_module\",\n constraint: {\n securityHealthAnalyticsCustomModule: {\n displayName: \"custom_SHA_policy\",\n config: {\n predicate: {\n expression: \"resource.rotationPeriod \u003e duration('2592000s')\",\n },\n customOutput: {\n properties: [{\n name: \"duration\",\n valueExpression: {\n expression: \"resource.rotationPeriod\",\n },\n }],\n },\n resourceSelector: {\n resourceTypes: [\"cloudkms.googleapis.com/CryptoKey\"],\n },\n severity: \"LOW\",\n description: \"Custom Module\",\n recommendation: \"Testing custom modules\",\n },\n moduleEnablementState: \"ENABLED\",\n },\n },\n },\n ],\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nposture1 = gcp.securityposture.Posture(\"posture1\",\n posture_id=\"posture_example\",\n parent=\"organizations/123456789\",\n location=\"global\",\n state=\"ACTIVE\",\n description=\"a new posture\",\n policy_sets=[\n {\n \"policy_set_id\": \"org_policy_set\",\n \"description\": \"set of org policies\",\n \"policies\": [\n {\n \"policy_id\": \"canned_org_policy\",\n \"constraint\": {\n \"org_policy_constraint\": {\n \"canned_constraint_id\": \"storage.uniformBucketLevelAccess\",\n \"policy_rules\": [{\n \"enforce\": True,\n \"condition\": {\n \"description\": \"condition description\",\n \"expression\": \"resource.matchTag('org_id/tag_key_short_name,'tag_value_short_name')\",\n \"title\": \"a CEL condition\",\n },\n }],\n },\n },\n },\n {\n \"policy_id\": \"custom_org_policy\",\n \"constraint\": {\n \"org_policy_constraint_custom\": {\n \"custom_constraint\": {\n \"name\": \"organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade\",\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\": [\n \"CREATE\",\n \"UPDATE\",\n ],\n \"resource_types\": [\"container.googleapis.com/NodePool\"],\n },\n \"policy_rules\": [{\n \"enforce\": True,\n \"condition\": {\n \"description\": \"condition description\",\n \"expression\": \"resource.matchTagId('tagKeys/key_id','tagValues/value_id')\",\n \"title\": \"a CEL condition\",\n },\n }],\n },\n },\n },\n ],\n },\n {\n \"policy_set_id\": \"sha_policy_set\",\n \"description\": \"set of sha policies\",\n \"policies\": [\n {\n \"policy_id\": \"sha_builtin_module\",\n \"constraint\": {\n \"security_health_analytics_module\": {\n \"module_name\": \"BIGQUERY_TABLE_CMEK_DISABLED\",\n \"module_enablement_state\": \"ENABLED\",\n },\n },\n \"description\": \"enable BIGQUERY_TABLE_CMEK_DISABLED\",\n },\n {\n \"policy_id\": \"sha_custom_module\",\n \"constraint\": {\n \"security_health_analytics_custom_module\": {\n \"display_name\": \"custom_SHA_policy\",\n \"config\": {\n \"predicate\": {\n \"expression\": \"resource.rotationPeriod \u003e duration('2592000s')\",\n },\n \"custom_output\": {\n \"properties\": [{\n \"name\": \"duration\",\n \"value_expression\": {\n \"expression\": \"resource.rotationPeriod\",\n },\n }],\n },\n \"resource_selector\": {\n \"resource_types\": [\"cloudkms.googleapis.com/CryptoKey\"],\n },\n \"severity\": \"LOW\",\n \"description\": \"Custom Module\",\n \"recommendation\": \"Testing custom modules\",\n },\n \"module_enablement_state\": \"ENABLED\",\n },\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 posture1 = new Gcp.SecurityPosture.Posture(\"posture1\", new()\n {\n PostureId = \"posture_example\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n State = \"ACTIVE\",\n Description = \"a new posture\",\n PolicySets = new[]\n {\n new Gcp.SecurityPosture.Inputs.PosturePolicySetArgs\n {\n PolicySetId = \"org_policy_set\",\n Description = \"set of org policies\",\n Policies = new[]\n {\n new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyArgs\n {\n PolicyId = \"canned_org_policy\",\n Constraint = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintArgs\n {\n OrgPolicyConstraint = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintOrgPolicyConstraintArgs\n {\n CannedConstraintId = \"storage.uniformBucketLevelAccess\",\n PolicyRules = new[]\n {\n new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintOrgPolicyConstraintPolicyRuleArgs\n {\n Enforce = true,\n Condition = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintOrgPolicyConstraintPolicyRuleConditionArgs\n {\n Description = \"condition description\",\n Expression = \"resource.matchTag('org_id/tag_key_short_name,'tag_value_short_name')\",\n Title = \"a CEL condition\",\n },\n },\n },\n },\n },\n },\n new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyArgs\n {\n PolicyId = \"custom_org_policy\",\n Constraint = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintArgs\n {\n OrgPolicyConstraintCustom = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomArgs\n {\n CustomConstraint = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomCustomConstraintArgs\n {\n Name = \"organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade\",\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 \"UPDATE\",\n },\n ResourceTypes = new[]\n {\n \"container.googleapis.com/NodePool\",\n },\n },\n PolicyRules = new[]\n {\n new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomPolicyRuleArgs\n {\n Enforce = true,\n Condition = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomPolicyRuleConditionArgs\n {\n Description = \"condition description\",\n Expression = \"resource.matchTagId('tagKeys/key_id','tagValues/value_id')\",\n Title = \"a CEL condition\",\n },\n },\n },\n },\n },\n },\n },\n },\n new Gcp.SecurityPosture.Inputs.PosturePolicySetArgs\n {\n PolicySetId = \"sha_policy_set\",\n Description = \"set of sha policies\",\n Policies = new[]\n {\n new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyArgs\n {\n PolicyId = \"sha_builtin_module\",\n Constraint = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintArgs\n {\n SecurityHealthAnalyticsModule = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsModuleArgs\n {\n ModuleName = \"BIGQUERY_TABLE_CMEK_DISABLED\",\n ModuleEnablementState = \"ENABLED\",\n },\n },\n Description = \"enable BIGQUERY_TABLE_CMEK_DISABLED\",\n },\n new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyArgs\n {\n PolicyId = \"sha_custom_module\",\n Constraint = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintArgs\n {\n SecurityHealthAnalyticsCustomModule = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleArgs\n {\n DisplayName = \"custom_SHA_policy\",\n Config = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigArgs\n {\n Predicate = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigPredicateArgs\n {\n Expression = \"resource.rotationPeriod \u003e duration('2592000s')\",\n },\n CustomOutput = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputArgs\n {\n Properties = new[]\n {\n new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputPropertyArgs\n {\n Name = \"duration\",\n ValueExpression = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputPropertyValueExpressionArgs\n {\n Expression = \"resource.rotationPeriod\",\n },\n },\n },\n },\n ResourceSelector = new Gcp.SecurityPosture.Inputs.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigResourceSelectorArgs\n {\n ResourceTypes = new[]\n {\n \"cloudkms.googleapis.com/CryptoKey\",\n },\n },\n Severity = \"LOW\",\n Description = \"Custom Module\",\n Recommendation = \"Testing custom modules\",\n },\n ModuleEnablementState = \"ENABLED\",\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securityposture\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securityposture.NewPosture(ctx, \"posture1\", \u0026securityposture.PostureArgs{\n\t\t\tPostureId: pulumi.String(\"posture_example\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tState: pulumi.String(\"ACTIVE\"),\n\t\t\tDescription: pulumi.String(\"a new posture\"),\n\t\t\tPolicySets: securityposture.PosturePolicySetArray{\n\t\t\t\t\u0026securityposture.PosturePolicySetArgs{\n\t\t\t\t\tPolicySetId: pulumi.String(\"org_policy_set\"),\n\t\t\t\t\tDescription: pulumi.String(\"set of org policies\"),\n\t\t\t\t\tPolicies: securityposture.PosturePolicySetPolicyArray{\n\t\t\t\t\t\t\u0026securityposture.PosturePolicySetPolicyArgs{\n\t\t\t\t\t\t\tPolicyId: pulumi.String(\"canned_org_policy\"),\n\t\t\t\t\t\t\tConstraint: \u0026securityposture.PosturePolicySetPolicyConstraintArgs{\n\t\t\t\t\t\t\t\tOrgPolicyConstraint: \u0026securityposture.PosturePolicySetPolicyConstraintOrgPolicyConstraintArgs{\n\t\t\t\t\t\t\t\t\tCannedConstraintId: pulumi.String(\"storage.uniformBucketLevelAccess\"),\n\t\t\t\t\t\t\t\t\tPolicyRules: securityposture.PosturePolicySetPolicyConstraintOrgPolicyConstraintPolicyRuleArray{\n\t\t\t\t\t\t\t\t\t\t\u0026securityposture.PosturePolicySetPolicyConstraintOrgPolicyConstraintPolicyRuleArgs{\n\t\t\t\t\t\t\t\t\t\t\tEnforce: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\t\t\tCondition: \u0026securityposture.PosturePolicySetPolicyConstraintOrgPolicyConstraintPolicyRuleConditionArgs{\n\t\t\t\t\t\t\t\t\t\t\t\tDescription: pulumi.String(\"condition description\"),\n\t\t\t\t\t\t\t\t\t\t\t\tExpression: pulumi.String(\"resource.matchTag('org_id/tag_key_short_name,'tag_value_short_name')\"),\n\t\t\t\t\t\t\t\t\t\t\t\tTitle: pulumi.String(\"a CEL condition\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\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\t\u0026securityposture.PosturePolicySetPolicyArgs{\n\t\t\t\t\t\t\tPolicyId: pulumi.String(\"custom_org_policy\"),\n\t\t\t\t\t\t\tConstraint: \u0026securityposture.PosturePolicySetPolicyConstraintArgs{\n\t\t\t\t\t\t\t\tOrgPolicyConstraintCustom: \u0026securityposture.PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomArgs{\n\t\t\t\t\t\t\t\t\tCustomConstraint: \u0026securityposture.PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomCustomConstraintArgs{\n\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade\"),\n\t\t\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"Disable GKE auto upgrade\"),\n\t\t\t\t\t\t\t\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\t\t\t\t\t\t\t\tActionType: pulumi.String(\"ALLOW\"),\n\t\t\t\t\t\t\t\t\t\tCondition: pulumi.String(\"resource.management.autoUpgrade == false\"),\n\t\t\t\t\t\t\t\t\t\tMethodTypes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"CREATE\"),\n\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"UPDATE\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tResourceTypes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"container.googleapis.com/NodePool\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tPolicyRules: securityposture.PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomPolicyRuleArray{\n\t\t\t\t\t\t\t\t\t\t\u0026securityposture.PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomPolicyRuleArgs{\n\t\t\t\t\t\t\t\t\t\t\tEnforce: pulumi.Bool(true),\n\t\t\t\t\t\t\t\t\t\t\tCondition: \u0026securityposture.PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomPolicyRuleConditionArgs{\n\t\t\t\t\t\t\t\t\t\t\t\tDescription: pulumi.String(\"condition description\"),\n\t\t\t\t\t\t\t\t\t\t\t\tExpression: pulumi.String(\"resource.matchTagId('tagKeys/key_id','tagValues/value_id')\"),\n\t\t\t\t\t\t\t\t\t\t\t\tTitle: pulumi.String(\"a CEL condition\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\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},\n\t\t\t\t},\n\t\t\t\t\u0026securityposture.PosturePolicySetArgs{\n\t\t\t\t\tPolicySetId: pulumi.String(\"sha_policy_set\"),\n\t\t\t\t\tDescription: pulumi.String(\"set of sha policies\"),\n\t\t\t\t\tPolicies: securityposture.PosturePolicySetPolicyArray{\n\t\t\t\t\t\t\u0026securityposture.PosturePolicySetPolicyArgs{\n\t\t\t\t\t\t\tPolicyId: pulumi.String(\"sha_builtin_module\"),\n\t\t\t\t\t\t\tConstraint: \u0026securityposture.PosturePolicySetPolicyConstraintArgs{\n\t\t\t\t\t\t\t\tSecurityHealthAnalyticsModule: \u0026securityposture.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsModuleArgs{\n\t\t\t\t\t\t\t\t\tModuleName: pulumi.String(\"BIGQUERY_TABLE_CMEK_DISABLED\"),\n\t\t\t\t\t\t\t\t\tModuleEnablementState: pulumi.String(\"ENABLED\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tDescription: pulumi.String(\"enable BIGQUERY_TABLE_CMEK_DISABLED\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026securityposture.PosturePolicySetPolicyArgs{\n\t\t\t\t\t\t\tPolicyId: pulumi.String(\"sha_custom_module\"),\n\t\t\t\t\t\t\tConstraint: \u0026securityposture.PosturePolicySetPolicyConstraintArgs{\n\t\t\t\t\t\t\t\tSecurityHealthAnalyticsCustomModule: \u0026securityposture.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleArgs{\n\t\t\t\t\t\t\t\t\tDisplayName: pulumi.String(\"custom_SHA_policy\"),\n\t\t\t\t\t\t\t\t\tConfig: \u0026securityposture.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigArgs{\n\t\t\t\t\t\t\t\t\t\tPredicate: \u0026securityposture.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigPredicateArgs{\n\t\t\t\t\t\t\t\t\t\t\tExpression: pulumi.String(\"resource.rotationPeriod \u003e duration('2592000s')\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tCustomOutput: securityposture.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputArgs{\n\t\t\t\t\t\t\t\t\t\t\tProperties: securityposture.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputPropertyArray{\n\t\t\t\t\t\t\t\t\t\t\t\t\u0026securityposture.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputPropertyArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\tName: pulumi.String(\"duration\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\tValueExpression: \u0026securityposture.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputPropertyValueExpressionArgs{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tExpression: pulumi.String(\"resource.rotationPeriod\"),\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tResourceSelector: \u0026securityposture.PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigResourceSelectorArgs{\n\t\t\t\t\t\t\t\t\t\t\tResourceTypes: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\t\t\t\tpulumi.String(\"cloudkms.googleapis.com/CryptoKey\"),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tSeverity: pulumi.String(\"LOW\"),\n\t\t\t\t\t\t\t\t\t\tDescription: pulumi.String(\"Custom Module\"),\n\t\t\t\t\t\t\t\t\t\tRecommendation: pulumi.String(\"Testing custom modules\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tModuleEnablementState: pulumi.String(\"ENABLED\"),\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},\n\t\t\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.securityposture.Posture;\nimport com.pulumi.gcp.securityposture.PostureArgs;\nimport com.pulumi.gcp.securityposture.inputs.PosturePolicySetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var posture1 = new Posture(\"posture1\", PostureArgs.builder()\n .postureId(\"posture_example\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .state(\"ACTIVE\")\n .description(\"a new posture\")\n .policySets( \n PosturePolicySetArgs.builder()\n .policySetId(\"org_policy_set\")\n .description(\"set of org policies\")\n .policies( \n PosturePolicySetPolicyArgs.builder()\n .policyId(\"canned_org_policy\")\n .constraint(PosturePolicySetPolicyConstraintArgs.builder()\n .orgPolicyConstraint(PosturePolicySetPolicyConstraintOrgPolicyConstraintArgs.builder()\n .cannedConstraintId(\"storage.uniformBucketLevelAccess\")\n .policyRules(PosturePolicySetPolicyConstraintOrgPolicyConstraintPolicyRuleArgs.builder()\n .enforce(true)\n .condition(PosturePolicySetPolicyConstraintOrgPolicyConstraintPolicyRuleConditionArgs.builder()\n .description(\"condition description\")\n .expression(\"resource.matchTag('org_id/tag_key_short_name,'tag_value_short_name')\")\n .title(\"a CEL condition\")\n .build())\n .build())\n .build())\n .build())\n .build(),\n PosturePolicySetPolicyArgs.builder()\n .policyId(\"custom_org_policy\")\n .constraint(PosturePolicySetPolicyConstraintArgs.builder()\n .orgPolicyConstraintCustom(PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomArgs.builder()\n .customConstraint(PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomCustomConstraintArgs.builder()\n .name(\"organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade\")\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 \"UPDATE\")\n .resourceTypes(\"container.googleapis.com/NodePool\")\n .build())\n .policyRules(PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomPolicyRuleArgs.builder()\n .enforce(true)\n .condition(PosturePolicySetPolicyConstraintOrgPolicyConstraintCustomPolicyRuleConditionArgs.builder()\n .description(\"condition description\")\n .expression(\"resource.matchTagId('tagKeys/key_id','tagValues/value_id')\")\n .title(\"a CEL condition\")\n .build())\n .build())\n .build())\n .build())\n .build())\n .build(),\n PosturePolicySetArgs.builder()\n .policySetId(\"sha_policy_set\")\n .description(\"set of sha policies\")\n .policies( \n PosturePolicySetPolicyArgs.builder()\n .policyId(\"sha_builtin_module\")\n .constraint(PosturePolicySetPolicyConstraintArgs.builder()\n .securityHealthAnalyticsModule(PosturePolicySetPolicyConstraintSecurityHealthAnalyticsModuleArgs.builder()\n .moduleName(\"BIGQUERY_TABLE_CMEK_DISABLED\")\n .moduleEnablementState(\"ENABLED\")\n .build())\n .build())\n .description(\"enable BIGQUERY_TABLE_CMEK_DISABLED\")\n .build(),\n PosturePolicySetPolicyArgs.builder()\n .policyId(\"sha_custom_module\")\n .constraint(PosturePolicySetPolicyConstraintArgs.builder()\n .securityHealthAnalyticsCustomModule(PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleArgs.builder()\n .displayName(\"custom_SHA_policy\")\n .config(PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigArgs.builder()\n .predicate(PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigPredicateArgs.builder()\n .expression(\"resource.rotationPeriod \u003e duration('2592000s')\")\n .build())\n .customOutput(PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputArgs.builder()\n .properties(PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputPropertyArgs.builder()\n .name(\"duration\")\n .valueExpression(PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigCustomOutputPropertyValueExpressionArgs.builder()\n .expression(\"resource.rotationPeriod\")\n .build())\n .build())\n .build())\n .resourceSelector(PosturePolicySetPolicyConstraintSecurityHealthAnalyticsCustomModuleConfigResourceSelectorArgs.builder()\n .resourceTypes(\"cloudkms.googleapis.com/CryptoKey\")\n .build())\n .severity(\"LOW\")\n .description(\"Custom Module\")\n .recommendation(\"Testing custom modules\")\n .build())\n .moduleEnablementState(\"ENABLED\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n posture1:\n type: gcp:securityposture:Posture\n properties:\n postureId: posture_example\n parent: organizations/123456789\n location: global\n state: ACTIVE\n description: a new posture\n policySets:\n - policySetId: org_policy_set\n description: set of org policies\n policies:\n - policyId: canned_org_policy\n constraint:\n orgPolicyConstraint:\n cannedConstraintId: storage.uniformBucketLevelAccess\n policyRules:\n - enforce: true\n condition:\n description: condition description\n expression: resource.matchTag('org_id/tag_key_short_name,'tag_value_short_name')\n title: a CEL condition\n - policyId: custom_org_policy\n constraint:\n orgPolicyConstraintCustom:\n customConstraint:\n name: organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade\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 - UPDATE\n resourceTypes:\n - container.googleapis.com/NodePool\n policyRules:\n - enforce: true\n condition:\n description: condition description\n expression: resource.matchTagId('tagKeys/key_id','tagValues/value_id')\n title: a CEL condition\n - policySetId: sha_policy_set\n description: set of sha policies\n policies:\n - policyId: sha_builtin_module\n constraint:\n securityHealthAnalyticsModule:\n moduleName: BIGQUERY_TABLE_CMEK_DISABLED\n moduleEnablementState: ENABLED\n description: enable BIGQUERY_TABLE_CMEK_DISABLED\n - policyId: sha_custom_module\n constraint:\n securityHealthAnalyticsCustomModule:\n displayName: custom_SHA_policy\n config:\n predicate:\n expression: resource.rotationPeriod \u003e duration('2592000s')\n customOutput:\n properties:\n - name: duration\n valueExpression:\n expression: resource.rotationPeriod\n resourceSelector:\n resourceTypes:\n - cloudkms.googleapis.com/CryptoKey\n severity: LOW\n description: Custom Module\n recommendation: Testing custom modules\n moduleEnablementState: ENABLED\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPosture can be imported using any of these accepted formats:\n\n* `{{parent}}/locations/{{location}}/postures/{{posture_id}}`\n\nWhen using the `pulumi import` command, Posture can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securityposture/posture:Posture default {{parent}}/locations/{{location}}/postures/{{posture_id}}\n```\n\n",
"properties": {
@@ -239539,7 +240725,7 @@
},
"name": {
"type": "string",
- "description": "A unique identifier for the instance, which cannot be changed after\nthe instance is created. The name must be between 6 and 30 characters\nin length.\n\nIf not provided, a random string starting with `tf-` will be selected.\n"
+ "description": "A unique identifier for the instance, which cannot be changed after\nthe instance is created. The name must be between 6 and 30 characters\nin length.\nIf not provided, a random string starting with `tf-` will be selected.\n"
},
"numNodes": {
"type": "integer"
@@ -239602,7 +240788,7 @@
},
"name": {
"type": "string",
- "description": "A unique identifier for the instance, which cannot be changed after\nthe instance is created. The name must be between 6 and 30 characters\nin length.\n\nIf not provided, a random string starting with `tf-` will be selected.\n",
+ "description": "A unique identifier for the instance, which cannot be changed after\nthe instance is created. The name must be between 6 and 30 characters\nin length.\nIf not provided, a random string starting with `tf-` will be selected.\n",
"willReplaceOnChanges": true
},
"numNodes": {
@@ -239658,7 +240844,7 @@
},
"name": {
"type": "string",
- "description": "A unique identifier for the instance, which cannot be changed after\nthe instance is created. The name must be between 6 and 30 characters\nin length.\n\nIf not provided, a random string starting with `tf-` will be selected.\n",
+ "description": "A unique identifier for the instance, which cannot be changed after\nthe instance is created. The name must be between 6 and 30 characters\nin length.\nIf not provided, a random string starting with `tf-` will be selected.\n",
"willReplaceOnChanges": true
},
"numNodes": {
@@ -241864,6 +243050,10 @@
"type": "boolean",
"description": "Whether an object is under [event-based hold](https://cloud.google.com/storage/docs/object-holds#hold-types). Event-based hold is a way to retain objects until an event occurs, which is signified by the hold's release (i.e. this value is set to false). After being released (set to false), such objects will be subject to bucket-level retention (if any).\n"
},
+ "generation": {
+ "type": "integer",
+ "description": "(Computed) The content generation of this object. Used for object [versioning](https://cloud.google.com/storage/docs/object-versioning) and [soft delete](https://cloud.google.com/storage/docs/soft-delete).\n"
+ },
"kmsKeyName": {
"type": "string",
"description": "The resource name of the Cloud KMS key that will be used to [encrypt](https://cloud.google.com/storage/docs/encryption/using-customer-managed-keys) the object.\n"
@@ -241917,6 +243107,7 @@
"content",
"contentType",
"crc32c",
+ "generation",
"kmsKeyName",
"md5hash",
"mediaLink",
@@ -242067,6 +243258,10 @@
"type": "boolean",
"description": "Whether an object is under [event-based hold](https://cloud.google.com/storage/docs/object-holds#hold-types). Event-based hold is a way to retain objects until an event occurs, which is signified by the hold's release (i.e. this value is set to false). After being released (set to false), such objects will be subject to bucket-level retention (if any).\n"
},
+ "generation": {
+ "type": "integer",
+ "description": "(Computed) The content generation of this object. Used for object [versioning](https://cloud.google.com/storage/docs/object-versioning) and [soft delete](https://cloud.google.com/storage/docs/soft-delete).\n"
+ },
"kmsKeyName": {
"type": "string",
"description": "The resource name of the Cloud KMS key that will be used to [encrypt](https://cloud.google.com/storage/docs/encryption/using-customer-managed-keys) the object.\n",
@@ -242503,7 +243698,7 @@
}
},
"gcp:storage/managedFolder:ManagedFolder": {
- "description": "A Google Cloud Storage Managed Folder.\n\nYou can apply Identity and Access Management (IAM) policies to\nmanaged folders to grant principals access only to the objects\nwithin the managed folder, which lets you more finely control access\nfor specific data sets and tables within a bucket. You can nest\nmanaged folders up to 15 levels deep, including the parent managed\nfolder.\n\nManaged folders can only be created in buckets that have uniform\nbucket-level access enabled.\n\n\nTo get more information about ManagedFolder, see:\n\n* [API documentation](https://cloud.google.com/storage/docs/json_api/v1/managedFolder)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/storage/docs/managed-folders)\n\n## Example Usage\n\n### Storage Managed Folder Basic\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: \"my-bucket\",\n location: \"EU\",\n uniformBucketLevelAccess: true,\n});\nconst folder = new gcp.storage.ManagedFolder(\"folder\", {\n bucket: bucket.name,\n name: \"managed/folder/name/\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\",\n name=\"my-bucket\",\n location=\"EU\",\n uniform_bucket_level_access=True)\nfolder = gcp.storage.ManagedFolder(\"folder\",\n bucket=bucket.name,\n name=\"managed/folder/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 bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Name = \"my-bucket\",\n Location = \"EU\",\n UniformBucketLevelAccess = true,\n });\n\n var folder = new Gcp.Storage.ManagedFolder(\"folder\", new()\n {\n Bucket = bucket.Name,\n Name = \"managed/folder/name/\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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(\"my-bucket\"),\n\t\t\tLocation: pulumi.String(\"EU\"),\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\t_, err = storage.NewManagedFolder(ctx, \"folder\", \u0026storage.ManagedFolderArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tName: pulumi.String(\"managed/folder/name/\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.ManagedFolder;\nimport com.pulumi.gcp.storage.ManagedFolderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(\"my-bucket\")\n .location(\"EU\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var folder = new ManagedFolder(\"folder\", ManagedFolderArgs.builder()\n .bucket(bucket.name())\n .name(\"managed/folder/name/\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n bucket:\n type: gcp:storage:Bucket\n properties:\n name: my-bucket\n location: EU\n uniformBucketLevelAccess: true\n folder:\n type: gcp:storage:ManagedFolder\n properties:\n bucket: ${bucket.name}\n name: managed/folder/name/\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nManagedFolder can be imported using any of these accepted formats:\n\n* `{{bucket}}/managedFolders/{{name}}`\n\n* `{{bucket}}/{{name}}`\n\nWhen using the `pulumi import` command, ManagedFolder can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:storage/managedFolder:ManagedFolder default {{bucket}}/managedFolders/{{name}}\n```\n\n```sh\n$ pulumi import gcp:storage/managedFolder:ManagedFolder default {{bucket}}/{{name}}\n```\n\n",
+ "description": "A Google Cloud Storage Managed Folder.\n\nYou can apply Identity and Access Management (IAM) policies to\nmanaged folders to grant principals access only to the objects\nwithin the managed folder, which lets you more finely control access\nfor specific data sets and tables within a bucket. You can nest\nmanaged folders up to 15 levels deep, including the parent managed\nfolder.\n\nManaged folders can only be created in buckets that have uniform\nbucket-level access enabled.\n\n\nTo get more information about ManagedFolder, see:\n\n* [API documentation](https://cloud.google.com/storage/docs/json_api/v1/managedFolder)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/storage/docs/managed-folders)\n\n## Example Usage\n\n### Storage Managed Folder Basic\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: \"my-bucket\",\n location: \"EU\",\n uniformBucketLevelAccess: true,\n});\nconst folder = new gcp.storage.ManagedFolder(\"folder\", {\n bucket: bucket.name,\n name: \"managed/folder/name/\",\n forceDestroy: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\",\n name=\"my-bucket\",\n location=\"EU\",\n uniform_bucket_level_access=True)\nfolder = gcp.storage.ManagedFolder(\"folder\",\n bucket=bucket.name,\n name=\"managed/folder/name/\",\n force_destroy=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 bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Name = \"my-bucket\",\n Location = \"EU\",\n UniformBucketLevelAccess = true,\n });\n\n var folder = new Gcp.Storage.ManagedFolder(\"folder\", new()\n {\n Bucket = bucket.Name,\n Name = \"managed/folder/name/\",\n ForceDestroy = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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(\"my-bucket\"),\n\t\t\tLocation: pulumi.String(\"EU\"),\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\t_, err = storage.NewManagedFolder(ctx, \"folder\", \u0026storage.ManagedFolderArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tName: pulumi.String(\"managed/folder/name/\"),\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\treturn nil\n\t})\n}\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.ManagedFolder;\nimport com.pulumi.gcp.storage.ManagedFolderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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(\"my-bucket\")\n .location(\"EU\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var folder = new ManagedFolder(\"folder\", ManagedFolderArgs.builder()\n .bucket(bucket.name())\n .name(\"managed/folder/name/\")\n .forceDestroy(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n bucket:\n type: gcp:storage:Bucket\n properties:\n name: my-bucket\n location: EU\n uniformBucketLevelAccess: true\n folder:\n type: gcp:storage:ManagedFolder\n properties:\n bucket: ${bucket.name}\n name: managed/folder/name/\n forceDestroy: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nManagedFolder can be imported using any of these accepted formats:\n\n* `{{bucket}}/managedFolders/{{name}}`\n\n* `{{bucket}}/{{name}}`\n\nWhen using the `pulumi import` command, ManagedFolder can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:storage/managedFolder:ManagedFolder default {{bucket}}/managedFolders/{{name}}\n```\n\n```sh\n$ pulumi import gcp:storage/managedFolder:ManagedFolder default {{bucket}}/{{name}}\n```\n\n",
"properties": {
"bucket": {
"type": "string",
@@ -242513,6 +243708,10 @@
"type": "string",
"description": "The timestamp at which this managed folder was created.\n"
},
+ "forceDestroy": {
+ "type": "boolean",
+ "description": "Allows the deletion of a managed folder even if contains\nobjects. If a non-empty managed folder is deleted, any objects\nwithin the folder will remain in a simulated folder with the\nsame name.\n"
+ },
"metageneration": {
"type": "string",
"description": "The metadata generation of the managed folder.\n"
@@ -242544,6 +243743,10 @@
"description": "The name of the bucket that contains the managed folder.\n",
"willReplaceOnChanges": true
},
+ "forceDestroy": {
+ "type": "boolean",
+ "description": "Allows the deletion of a managed folder even if contains\nobjects. If a non-empty managed folder is deleted, any objects\nwithin the folder will remain in a simulated folder with the\nsame name.\n"
+ },
"name": {
"type": "string",
"description": "The name of the managed folder expressed as a path. Must include\ntrailing '/'. For example, `example_dir/example_dir2/`.\n\n\n- - -\n",
@@ -242565,6 +243768,10 @@
"type": "string",
"description": "The timestamp at which this managed folder was created.\n"
},
+ "forceDestroy": {
+ "type": "boolean",
+ "description": "Allows the deletion of a managed folder even if contains\nobjects. If a non-empty managed folder is deleted, any objects\nwithin the folder will remain in a simulated folder with the\nsame name.\n"
+ },
"metageneration": {
"type": "string",
"description": "The metadata generation of the managed folder.\n"
@@ -249097,7 +250304,7 @@
}
},
"gcp:vmwareengine/networkPolicy:NetworkPolicy": {
- "description": "Represents a network policy resource. Network policies are regional resources.\n\n\nTo get more information about NetworkPolicy, see:\n\n* [API documentation](https://cloud.google.com/vmware-engine/docs/reference/rest/v1/projects.locations.networkPolicies)\n\n## Example Usage\n\n### Vmware Engine Network Policy 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_policy_nw = new gcp.vmwareengine.Network(\"network-policy-nw\", {\n name: \"standard-nw\",\n location: \"global\",\n type: \"STANDARD\",\n description: \"VMwareEngine standard network sample\",\n});\nconst vmw_engine_network_policy = new gcp.vmwareengine.NetworkPolicy(\"vmw-engine-network-policy\", {\n location: \"us-west1\",\n name: \"sample-network-policy\",\n edgeServicesCidr: \"192.168.30.0/26\",\n vmwareEngineNetwork: network_policy_nw.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_policy_nw = gcp.vmwareengine.Network(\"network-policy-nw\",\n name=\"standard-nw\",\n location=\"global\",\n type=\"STANDARD\",\n description=\"VMwareEngine standard network sample\")\nvmw_engine_network_policy = gcp.vmwareengine.NetworkPolicy(\"vmw-engine-network-policy\",\n location=\"us-west1\",\n name=\"sample-network-policy\",\n edge_services_cidr=\"192.168.30.0/26\",\n vmware_engine_network=network_policy_nw.id)\n```\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_policy_nw = new Gcp.VMwareEngine.Network(\"network-policy-nw\", new()\n {\n Name = \"standard-nw\",\n Location = \"global\",\n Type = \"STANDARD\",\n Description = \"VMwareEngine standard network sample\",\n });\n\n var vmw_engine_network_policy = new Gcp.VMwareEngine.NetworkPolicy(\"vmw-engine-network-policy\", new()\n {\n Location = \"us-west1\",\n Name = \"sample-network-policy\",\n EdgeServicesCidr = \"192.168.30.0/26\",\n VmwareEngineNetwork = network_policy_nw.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/vmwareengine\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vmwareengine.NewNetwork(ctx, \"network-policy-nw\", \u0026vmwareengine.NetworkArgs{\n\t\t\tName: pulumi.String(\"standard-nw\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tType: pulumi.String(\"STANDARD\"),\n\t\t\tDescription: pulumi.String(\"VMwareEngine standard network sample\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vmwareengine.NewNetworkPolicy(ctx, \"vmw-engine-network-policy\", \u0026vmwareengine.NetworkPolicyArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tName: pulumi.String(\"sample-network-policy\"),\n\t\t\tEdgeServicesCidr: pulumi.String(\"192.168.30.0/26\"),\n\t\t\tVmwareEngineNetwork: network_policy_nw.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vmwareengine.Network;\nimport com.pulumi.gcp.vmwareengine.NetworkArgs;\nimport com.pulumi.gcp.vmwareengine.NetworkPolicy;\nimport com.pulumi.gcp.vmwareengine.NetworkPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_policy_nw = new Network(\"network-policy-nw\", NetworkArgs.builder()\n .name(\"standard-nw\")\n .location(\"global\")\n .type(\"STANDARD\")\n .description(\"VMwareEngine standard network sample\")\n .build());\n\n var vmw_engine_network_policy = new NetworkPolicy(\"vmw-engine-network-policy\", NetworkPolicyArgs.builder()\n .location(\"us-west1\")\n .name(\"sample-network-policy\")\n .edgeServicesCidr(\"192.168.30.0/26\")\n .vmwareEngineNetwork(network_policy_nw.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network-policy-nw:\n type: gcp:vmwareengine:Network\n properties:\n name: standard-nw\n location: global\n type: STANDARD\n description: VMwareEngine standard network sample\n vmw-engine-network-policy:\n type: gcp:vmwareengine:NetworkPolicy\n properties:\n location: us-west1\n name: sample-network-policy\n edgeServicesCidr: 192.168.30.0/26\n vmwareEngineNetwork: ${[\"network-policy-nw\"].id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vmware Engine Network Policy Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_policy_nw = new gcp.vmwareengine.Network(\"network-policy-nw\", {\n name: \"standard-full-nw\",\n location: \"global\",\n type: \"STANDARD\",\n description: \"VMwareEngine standard network sample\",\n});\nconst vmw_engine_network_policy = new gcp.vmwareengine.NetworkPolicy(\"vmw-engine-network-policy\", {\n location: \"us-west1\",\n name: \"sample-network-policy-full\",\n edgeServicesCidr: \"192.168.30.0/26\",\n vmwareEngineNetwork: network_policy_nw.id,\n description: \"Sample Network Policy\",\n internetAccess: {\n enabled: true,\n },\n externalIp: {\n enabled: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_policy_nw = gcp.vmwareengine.Network(\"network-policy-nw\",\n name=\"standard-full-nw\",\n location=\"global\",\n type=\"STANDARD\",\n description=\"VMwareEngine standard network sample\")\nvmw_engine_network_policy = gcp.vmwareengine.NetworkPolicy(\"vmw-engine-network-policy\",\n location=\"us-west1\",\n name=\"sample-network-policy-full\",\n edge_services_cidr=\"192.168.30.0/26\",\n vmware_engine_network=network_policy_nw.id,\n description=\"Sample Network Policy\",\n internet_access={\n \"enabled\": True,\n },\n external_ip={\n \"enabled\": 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 network_policy_nw = new Gcp.VMwareEngine.Network(\"network-policy-nw\", new()\n {\n Name = \"standard-full-nw\",\n Location = \"global\",\n Type = \"STANDARD\",\n Description = \"VMwareEngine standard network sample\",\n });\n\n var vmw_engine_network_policy = new Gcp.VMwareEngine.NetworkPolicy(\"vmw-engine-network-policy\", new()\n {\n Location = \"us-west1\",\n Name = \"sample-network-policy-full\",\n EdgeServicesCidr = \"192.168.30.0/26\",\n VmwareEngineNetwork = network_policy_nw.Id,\n Description = \"Sample Network Policy\",\n InternetAccess = new Gcp.VMwareEngine.Inputs.NetworkPolicyInternetAccessArgs\n {\n Enabled = true,\n },\n ExternalIp = new Gcp.VMwareEngine.Inputs.NetworkPolicyExternalIpArgs\n {\n Enabled = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/vmwareengine\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vmwareengine.NewNetwork(ctx, \"network-policy-nw\", \u0026vmwareengine.NetworkArgs{\n\t\t\tName: pulumi.String(\"standard-full-nw\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tType: pulumi.String(\"STANDARD\"),\n\t\t\tDescription: pulumi.String(\"VMwareEngine standard network sample\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vmwareengine.NewNetworkPolicy(ctx, \"vmw-engine-network-policy\", \u0026vmwareengine.NetworkPolicyArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tName: pulumi.String(\"sample-network-policy-full\"),\n\t\t\tEdgeServicesCidr: pulumi.String(\"192.168.30.0/26\"),\n\t\t\tVmwareEngineNetwork: network_policy_nw.ID(),\n\t\t\tDescription: pulumi.String(\"Sample Network Policy\"),\n\t\t\tInternetAccess: \u0026vmwareengine.NetworkPolicyInternetAccessArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t\tExternalIp: \u0026vmwareengine.NetworkPolicyExternalIpArgs{\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\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vmwareengine.Network;\nimport com.pulumi.gcp.vmwareengine.NetworkArgs;\nimport com.pulumi.gcp.vmwareengine.NetworkPolicy;\nimport com.pulumi.gcp.vmwareengine.NetworkPolicyArgs;\nimport com.pulumi.gcp.vmwareengine.inputs.NetworkPolicyInternetAccessArgs;\nimport com.pulumi.gcp.vmwareengine.inputs.NetworkPolicyExternalIpArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_policy_nw = new Network(\"network-policy-nw\", NetworkArgs.builder()\n .name(\"standard-full-nw\")\n .location(\"global\")\n .type(\"STANDARD\")\n .description(\"VMwareEngine standard network sample\")\n .build());\n\n var vmw_engine_network_policy = new NetworkPolicy(\"vmw-engine-network-policy\", NetworkPolicyArgs.builder()\n .location(\"us-west1\")\n .name(\"sample-network-policy-full\")\n .edgeServicesCidr(\"192.168.30.0/26\")\n .vmwareEngineNetwork(network_policy_nw.id())\n .description(\"Sample Network Policy\")\n .internetAccess(NetworkPolicyInternetAccessArgs.builder()\n .enabled(true)\n .build())\n .externalIp(NetworkPolicyExternalIpArgs.builder()\n .enabled(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network-policy-nw:\n type: gcp:vmwareengine:Network\n properties:\n name: standard-full-nw\n location: global\n type: STANDARD\n description: VMwareEngine standard network sample\n vmw-engine-network-policy:\n type: gcp:vmwareengine:NetworkPolicy\n properties:\n location: us-west1\n name: sample-network-policy-full\n edgeServicesCidr: 192.168.30.0/26\n vmwareEngineNetwork: ${[\"network-policy-nw\"].id}\n description: Sample Network Policy\n internetAccess:\n enabled: true\n externalIp:\n enabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNetworkPolicy can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/networkPolicies/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, NetworkPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vmwareengine/networkPolicy:NetworkPolicy default projects/{{project}}/locations/{{location}}/networkPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vmwareengine/networkPolicy:NetworkPolicy default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vmwareengine/networkPolicy:NetworkPolicy default {{location}}/{{name}}\n```\n\n",
+ "description": "Represents a network policy resource. Network policies are regional resources.\n\n\nTo get more information about NetworkPolicy, see:\n\n* [API documentation](https://cloud.google.com/vmware-engine/docs/reference/rest/v1/projects.locations.networkPolicies)\n\n## Example Usage\n\n### Vmware Engine Network Policy 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_policy_nw = new gcp.vmwareengine.Network(\"network-policy-nw\", {\n name: \"sample-network\",\n location: \"global\",\n type: \"STANDARD\",\n description: \"VMwareEngine standard network sample\",\n});\nconst vmw_engine_network_policy = new gcp.vmwareengine.NetworkPolicy(\"vmw-engine-network-policy\", {\n location: \"us-west1\",\n name: \"sample-network-policy\",\n edgeServicesCidr: \"192.168.30.0/26\",\n vmwareEngineNetwork: network_policy_nw.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_policy_nw = gcp.vmwareengine.Network(\"network-policy-nw\",\n name=\"sample-network\",\n location=\"global\",\n type=\"STANDARD\",\n description=\"VMwareEngine standard network sample\")\nvmw_engine_network_policy = gcp.vmwareengine.NetworkPolicy(\"vmw-engine-network-policy\",\n location=\"us-west1\",\n name=\"sample-network-policy\",\n edge_services_cidr=\"192.168.30.0/26\",\n vmware_engine_network=network_policy_nw.id)\n```\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_policy_nw = new Gcp.VMwareEngine.Network(\"network-policy-nw\", new()\n {\n Name = \"sample-network\",\n Location = \"global\",\n Type = \"STANDARD\",\n Description = \"VMwareEngine standard network sample\",\n });\n\n var vmw_engine_network_policy = new Gcp.VMwareEngine.NetworkPolicy(\"vmw-engine-network-policy\", new()\n {\n Location = \"us-west1\",\n Name = \"sample-network-policy\",\n EdgeServicesCidr = \"192.168.30.0/26\",\n VmwareEngineNetwork = network_policy_nw.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/vmwareengine\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vmwareengine.NewNetwork(ctx, \"network-policy-nw\", \u0026vmwareengine.NetworkArgs{\n\t\t\tName: pulumi.String(\"sample-network\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tType: pulumi.String(\"STANDARD\"),\n\t\t\tDescription: pulumi.String(\"VMwareEngine standard network sample\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vmwareengine.NewNetworkPolicy(ctx, \"vmw-engine-network-policy\", \u0026vmwareengine.NetworkPolicyArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tName: pulumi.String(\"sample-network-policy\"),\n\t\t\tEdgeServicesCidr: pulumi.String(\"192.168.30.0/26\"),\n\t\t\tVmwareEngineNetwork: network_policy_nw.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vmwareengine.Network;\nimport com.pulumi.gcp.vmwareengine.NetworkArgs;\nimport com.pulumi.gcp.vmwareengine.NetworkPolicy;\nimport com.pulumi.gcp.vmwareengine.NetworkPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_policy_nw = new Network(\"network-policy-nw\", NetworkArgs.builder()\n .name(\"sample-network\")\n .location(\"global\")\n .type(\"STANDARD\")\n .description(\"VMwareEngine standard network sample\")\n .build());\n\n var vmw_engine_network_policy = new NetworkPolicy(\"vmw-engine-network-policy\", NetworkPolicyArgs.builder()\n .location(\"us-west1\")\n .name(\"sample-network-policy\")\n .edgeServicesCidr(\"192.168.30.0/26\")\n .vmwareEngineNetwork(network_policy_nw.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network-policy-nw:\n type: gcp:vmwareengine:Network\n properties:\n name: sample-network\n location: global\n type: STANDARD\n description: VMwareEngine standard network sample\n vmw-engine-network-policy:\n type: gcp:vmwareengine:NetworkPolicy\n properties:\n location: us-west1\n name: sample-network-policy\n edgeServicesCidr: 192.168.30.0/26\n vmwareEngineNetwork: ${[\"network-policy-nw\"].id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vmware Engine Network Policy Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_policy_nw = new gcp.vmwareengine.Network(\"network-policy-nw\", {\n name: \"sample-network\",\n location: \"global\",\n type: \"STANDARD\",\n description: \"VMwareEngine standard network sample\",\n});\nconst vmw_engine_network_policy = new gcp.vmwareengine.NetworkPolicy(\"vmw-engine-network-policy\", {\n location: \"us-west1\",\n name: \"sample-network-policy\",\n edgeServicesCidr: \"192.168.30.0/26\",\n vmwareEngineNetwork: network_policy_nw.id,\n description: \"Sample Network Policy\",\n internetAccess: {\n enabled: true,\n },\n externalIp: {\n enabled: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_policy_nw = gcp.vmwareengine.Network(\"network-policy-nw\",\n name=\"sample-network\",\n location=\"global\",\n type=\"STANDARD\",\n description=\"VMwareEngine standard network sample\")\nvmw_engine_network_policy = gcp.vmwareengine.NetworkPolicy(\"vmw-engine-network-policy\",\n location=\"us-west1\",\n name=\"sample-network-policy\",\n edge_services_cidr=\"192.168.30.0/26\",\n vmware_engine_network=network_policy_nw.id,\n description=\"Sample Network Policy\",\n internet_access={\n \"enabled\": True,\n },\n external_ip={\n \"enabled\": 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 network_policy_nw = new Gcp.VMwareEngine.Network(\"network-policy-nw\", new()\n {\n Name = \"sample-network\",\n Location = \"global\",\n Type = \"STANDARD\",\n Description = \"VMwareEngine standard network sample\",\n });\n\n var vmw_engine_network_policy = new Gcp.VMwareEngine.NetworkPolicy(\"vmw-engine-network-policy\", new()\n {\n Location = \"us-west1\",\n Name = \"sample-network-policy\",\n EdgeServicesCidr = \"192.168.30.0/26\",\n VmwareEngineNetwork = network_policy_nw.Id,\n Description = \"Sample Network Policy\",\n InternetAccess = new Gcp.VMwareEngine.Inputs.NetworkPolicyInternetAccessArgs\n {\n Enabled = true,\n },\n ExternalIp = new Gcp.VMwareEngine.Inputs.NetworkPolicyExternalIpArgs\n {\n Enabled = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/vmwareengine\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vmwareengine.NewNetwork(ctx, \"network-policy-nw\", \u0026vmwareengine.NetworkArgs{\n\t\t\tName: pulumi.String(\"sample-network\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tType: pulumi.String(\"STANDARD\"),\n\t\t\tDescription: pulumi.String(\"VMwareEngine standard network sample\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vmwareengine.NewNetworkPolicy(ctx, \"vmw-engine-network-policy\", \u0026vmwareengine.NetworkPolicyArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tName: pulumi.String(\"sample-network-policy\"),\n\t\t\tEdgeServicesCidr: pulumi.String(\"192.168.30.0/26\"),\n\t\t\tVmwareEngineNetwork: network_policy_nw.ID(),\n\t\t\tDescription: pulumi.String(\"Sample Network Policy\"),\n\t\t\tInternetAccess: \u0026vmwareengine.NetworkPolicyInternetAccessArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t\tExternalIp: \u0026vmwareengine.NetworkPolicyExternalIpArgs{\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\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vmwareengine.Network;\nimport com.pulumi.gcp.vmwareengine.NetworkArgs;\nimport com.pulumi.gcp.vmwareengine.NetworkPolicy;\nimport com.pulumi.gcp.vmwareengine.NetworkPolicyArgs;\nimport com.pulumi.gcp.vmwareengine.inputs.NetworkPolicyInternetAccessArgs;\nimport com.pulumi.gcp.vmwareengine.inputs.NetworkPolicyExternalIpArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_policy_nw = new Network(\"network-policy-nw\", NetworkArgs.builder()\n .name(\"sample-network\")\n .location(\"global\")\n .type(\"STANDARD\")\n .description(\"VMwareEngine standard network sample\")\n .build());\n\n var vmw_engine_network_policy = new NetworkPolicy(\"vmw-engine-network-policy\", NetworkPolicyArgs.builder()\n .location(\"us-west1\")\n .name(\"sample-network-policy\")\n .edgeServicesCidr(\"192.168.30.0/26\")\n .vmwareEngineNetwork(network_policy_nw.id())\n .description(\"Sample Network Policy\")\n .internetAccess(NetworkPolicyInternetAccessArgs.builder()\n .enabled(true)\n .build())\n .externalIp(NetworkPolicyExternalIpArgs.builder()\n .enabled(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network-policy-nw:\n type: gcp:vmwareengine:Network\n properties:\n name: sample-network\n location: global\n type: STANDARD\n description: VMwareEngine standard network sample\n vmw-engine-network-policy:\n type: gcp:vmwareengine:NetworkPolicy\n properties:\n location: us-west1\n name: sample-network-policy\n edgeServicesCidr: 192.168.30.0/26\n vmwareEngineNetwork: ${[\"network-policy-nw\"].id}\n description: Sample Network Policy\n internetAccess:\n enabled: true\n externalIp:\n enabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNetworkPolicy can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/networkPolicies/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, NetworkPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vmwareengine/networkPolicy:NetworkPolicy default projects/{{project}}/locations/{{location}}/networkPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vmwareengine/networkPolicy:NetworkPolicy default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vmwareengine/networkPolicy:NetworkPolicy default {{location}}/{{name}}\n```\n\n",
"properties": {
"createTime": {
"type": "string",
@@ -268152,6 +269359,7 @@
}
},
"gcp:logging/getLogViewIamPolicy:getLogViewIamPolicy": {
+ "description": "Retrieves the current IAM policy data for logview\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.logging.getLogViewIamPolicy({\n parent: loggingLogView.parent,\n location: loggingLogView.location,\n bucket: loggingLogView.bucket,\n name: loggingLogView.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npolicy = gcp.logging.get_log_view_iam_policy(parent=logging_log_view[\"parent\"],\n location=logging_log_view[\"location\"],\n bucket=logging_log_view[\"bucket\"],\n name=logging_log_view[\"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.Logging.GetLogViewIamPolicy.Invoke(new()\n {\n Parent = loggingLogView.Parent,\n Location = loggingLogView.Location,\n Bucket = loggingLogView.Bucket,\n Name = loggingLogView.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.LookupLogViewIamPolicy(ctx, \u0026logging.LookupLogViewIamPolicyArgs{\n\t\t\tParent: loggingLogView.Parent,\n\t\t\tLocation: pulumi.StringRef(loggingLogView.Location),\n\t\t\tBucket: loggingLogView.Bucket,\n\t\t\tName: loggingLogView.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.logging.LoggingFunctions;\nimport com.pulumi.gcp.logging.inputs.GetLogViewIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 = LoggingFunctions.getLogViewIamPolicy(GetLogViewIamPolicyArgs.builder()\n .parent(loggingLogView.parent())\n .location(loggingLogView.location())\n .bucket(loggingLogView.bucket())\n .name(loggingLogView.name())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n policy:\n fn::invoke:\n Function: gcp:logging:getLogViewIamPolicy\n Arguments:\n parent: ${loggingLogView.parent}\n location: ${loggingLogView.location}\n bucket: ${loggingLogView.bucket}\n name: ${loggingLogView.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
"inputs": {
"description": "A collection of arguments for invoking getLogViewIamPolicy.\n",
"properties": {
@@ -269632,6 +270840,9 @@
"billingAccount": {
"type": "string"
},
+ "deletionPolicy": {
+ "type": "string"
+ },
"effectiveLabels": {
"additionalProperties": {
"type": "string"
@@ -269679,6 +270890,7 @@
"required": [
"autoCreateNetwork",
"billingAccount",
+ "deletionPolicy",
"effectiveLabels",
"folderId",
"labels",
@@ -271188,6 +272400,59 @@
"type": "object"
}
},
+ "gcp:securitycenter/getV2OrganizationSourceIamPolicy:getV2OrganizationSourceIamPolicy": {
+ "description": "Retrieves the current IAM policy data for organizationsource\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.securitycenter.getV2OrganizationSourceIamPolicy({\n source: customSource.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npolicy = gcp.securitycenter.get_v2_organization_source_iam_policy(source=custom_source[\"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.SecurityCenter.GetV2OrganizationSourceIamPolicy.Invoke(new()\n {\n Source = customSource.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := securitycenter.LookupV2OrganizationSourceIamPolicy(ctx, \u0026securitycenter.LookupV2OrganizationSourceIamPolicyArgs{\n\t\t\tSource: customSource.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.securitycenter.SecuritycenterFunctions;\nimport com.pulumi.gcp.securitycenter.inputs.GetV2OrganizationSourceIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 = SecuritycenterFunctions.getV2OrganizationSourceIamPolicy(GetV2OrganizationSourceIamPolicyArgs.builder()\n .source(customSource.name())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n policy:\n fn::invoke:\n Function: gcp:securitycenter:getV2OrganizationSourceIamPolicy\n Arguments:\n source: ${customSource.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
+ "inputs": {
+ "description": "A collection of arguments for invoking getV2OrganizationSourceIamPolicy.\n",
+ "properties": {
+ "organization": {
+ "type": "string",
+ "willReplaceOnChanges": true
+ },
+ "source": {
+ "type": "string",
+ "description": "Used to find the parent resource to bind the IAM policy to\n",
+ "willReplaceOnChanges": true
+ }
+ },
+ "type": "object",
+ "required": [
+ "organization",
+ "source"
+ ]
+ },
+ "outputs": {
+ "description": "A collection of values returned by getV2OrganizationSourceIamPolicy.\n",
+ "properties": {
+ "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"
+ },
+ "organization": {
+ "type": "string"
+ },
+ "policyData": {
+ "description": "(Required only by `gcp.securitycenter.V2OrganizationSourceIamPolicy`) The policy data generated by\na `gcp.organizations.getIAMPolicy` data source.\n",
+ "type": "string"
+ },
+ "source": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "etag",
+ "organization",
+ "policyData",
+ "source",
+ "id"
+ ],
+ "type": "object"
+ }
+ },
"gcp:serviceaccount/getAccount:getAccount": {
"description": "Get the service account from a project. For more information see\nthe official [API](https://cloud.google.com/compute/docs/access/service-accounts) documentation.\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 objectViewer = gcp.serviceaccount.getAccount({\n accountId: \"object-viewer\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nobject_viewer = gcp.serviceaccount.get_account(account_id=\"object-viewer\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var objectViewer = Gcp.ServiceAccount.GetAccount.Invoke(new()\n {\n AccountId = \"object-viewer\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v7/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.LookupAccount(ctx, \u0026serviceaccount.LookupAccountArgs{\n\t\t\tAccountId: \"object-viewer\",\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.serviceaccount.ServiceaccountFunctions;\nimport com.pulumi.gcp.serviceaccount.inputs.GetAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 objectViewer = ServiceaccountFunctions.getAccount(GetAccountArgs.builder()\n .accountId(\"object-viewer\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n objectViewer:\n fn::invoke:\n Function: gcp:serviceaccount:getAccount\n Arguments:\n accountId: object-viewer\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\n### Save Key In Kubernetes Secret\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as kubernetes from \"@pulumi/kubernetes\";\nimport * as std from \"@pulumi/std\";\n\nconst myaccount = gcp.serviceaccount.getAccount({\n accountId: \"myaccount-id\",\n});\nconst mykey = new gcp.serviceaccount.Key(\"mykey\", {serviceAccountId: myaccount.then(myaccount =\u003e myaccount.name)});\nconst google_application_credentials = new kubernetes.core.v1.Secret(\"google-application-credentials\", {\n metadata: {\n name: \"google-application-credentials\",\n },\n data: {\n json: std.base64decodeOutput({\n input: mykey.privateKey,\n }).apply(invoke =\u003e invoke.result),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_kubernetes as kubernetes\nimport pulumi_std as std\n\nmyaccount = gcp.serviceaccount.get_account(account_id=\"myaccount-id\")\nmykey = gcp.serviceaccount.Key(\"mykey\", service_account_id=myaccount.name)\ngoogle_application_credentials = kubernetes.core.v1.Secret(\"google-application-credentials\",\n metadata={\n \"name\": \"google-application-credentials\",\n },\n data={\n \"json\": std.base64decode_output(input=mykey.private_key).apply(lambda invoke: invoke.result),\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Kubernetes = Pulumi.Kubernetes;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myaccount = Gcp.ServiceAccount.GetAccount.Invoke(new()\n {\n AccountId = \"myaccount-id\",\n });\n\n var mykey = new Gcp.ServiceAccount.Key(\"mykey\", new()\n {\n ServiceAccountId = myaccount.Apply(getAccountResult =\u003e getAccountResult.Name),\n });\n\n var google_application_credentials = new Kubernetes.Core.V1.Secret(\"google-application-credentials\", new()\n {\n Metadata = new Kubernetes.Types.Inputs.Meta.V1.ObjectMetaArgs\n {\n Name = \"google-application-credentials\",\n },\n Data = \n {\n { \"json\", Std.Base64decode.Invoke(new()\n {\n Input = mykey.PrivateKey,\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/v7/go/gcp/serviceaccount\"\n\tcorev1 \"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/core/v1\"\n\tmetav1 \"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/meta/v1\"\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\tmyaccount, err := serviceaccount.LookupAccount(ctx, \u0026serviceaccount.LookupAccountArgs{\n\t\t\tAccountId: \"myaccount-id\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmykey, err := serviceaccount.NewKey(ctx, \"mykey\", \u0026serviceaccount.KeyArgs{\n\t\t\tServiceAccountId: pulumi.String(myaccount.Name),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = corev1.NewSecret(ctx, \"google-application-credentials\", \u0026corev1.SecretArgs{\n\t\t\tMetadata: \u0026metav1.ObjectMetaArgs{\n\t\t\t\tName: pulumi.String(\"google-application-credentials\"),\n\t\t\t},\n\t\t\tData: pulumi.StringMap{\n\t\t\t\t\"json\": pulumi.String(std.Base64decodeOutput(ctx, std.Base64decodeOutputArgs{\n\t\t\t\t\tInput: mykey.PrivateKey,\n\t\t\t\t}, nil).ApplyT(func(invoke std.Base64decodeResult) (*string, error) {\n\t\t\t\t\treturn invoke.Result, nil\n\t\t\t\t}).(pulumi.StringPtrOutput)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GetAccountArgs;\nimport com.pulumi.gcp.serviceaccount.Key;\nimport com.pulumi.gcp.serviceaccount.KeyArgs;\nimport com.pulumi.kubernetes.core_v1.Secret;\nimport com.pulumi.kubernetes.core_v1.SecretArgs;\nimport com.pulumi.kubernetes.meta_v1.inputs.ObjectMetaArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 myaccount = ServiceaccountFunctions.getAccount(GetAccountArgs.builder()\n .accountId(\"myaccount-id\")\n .build());\n\n var mykey = new Key(\"mykey\", KeyArgs.builder()\n .serviceAccountId(myaccount.applyValue(getAccountResult -\u003e getAccountResult.name()))\n .build());\n\n var google_application_credentials = new Secret(\"google-application-credentials\", SecretArgs.builder()\n .metadata(ObjectMetaArgs.builder()\n .name(\"google-application-credentials\")\n .build())\n .data(Map.of(\"json\", StdFunctions.base64decode().applyValue(invoke -\u003e invoke.result())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mykey:\n type: gcp:serviceaccount:Key\n properties:\n serviceAccountId: ${myaccount.name}\n google-application-credentials:\n type: kubernetes:core/v1:Secret\n properties:\n metadata:\n name: google-application-credentials\n data:\n json:\n fn::invoke:\n Function: std:base64decode\n Arguments:\n input: ${mykey.privateKey}\n Return: result\nvariables:\n myaccount:\n fn::invoke:\n Function: gcp:serviceaccount:getAccount\n Arguments:\n accountId: myaccount-id\n```\n\u003c!--End PulumiCodeChooser --\u003e\n",
"inputs": {
@@ -272928,6 +274193,10 @@
"description": "(Computed) Whether an object is under [event-based hold](https://cloud.google.com/storage/docs/object-holds#hold-types). Event-based hold is a way to retain objects until an event occurs, which is signified by the hold's release (i.e. this value is set to false). After being released (set to false), such objects will be subject to bucket-level retention (if any).\n",
"type": "boolean"
},
+ "generation": {
+ "description": "(Computed) The content generation of this object. Used for object [versioning](https://cloud.google.com/storage/docs/object-versioning) and [soft delete](https://cloud.google.com/storage/docs/soft-delete).\n",
+ "type": "integer"
+ },
"id": {
"description": "The provider-assigned unique ID for this managed resource.\n",
"type": "string"
@@ -272988,6 +274257,7 @@
"customerEncryptions",
"detectMd5hash",
"eventBasedHold",
+ "generation",
"kmsKeyName",
"md5hash",
"mediaLink",
@@ -273067,6 +274337,9 @@
"eventBasedHold": {
"type": "boolean"
},
+ "generation": {
+ "type": "integer"
+ },
"id": {
"description": "The provider-assigned unique ID for this managed resource.\n",
"type": "string"
@@ -273122,6 +274395,7 @@
"customerEncryptions",
"detectMd5hash",
"eventBasedHold",
+ "generation",
"kmsKeyName",
"md5hash",
"mediaLink",
diff --git a/provider/go.mod b/provider/go.mod
index a27014b036..02b7c1b8c6 100644
--- a/provider/go.mod
+++ b/provider/go.mod
@@ -42,7 +42,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.68.0 // indirect
+ github.com/GoogleCloudPlatform/declarative-resource-client-library v1.70.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
diff --git a/provider/go.sum b/provider/go.sum
index 1448d9a4a8..e6c16661aa 100644
--- a/provider/go.sum
+++ b/provider/go.sum
@@ -1177,8 +1177,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.68.0 h1:LIPIYi4hy7ttUSrziY/TYwMDuEvvV593n80kRmz6nZ4=
-github.com/GoogleCloudPlatform/declarative-resource-client-library v1.68.0/go.mod h1:pL2Qt5HT+x6xrTd806oMiM3awW6kNIXB/iiuClz6m6k=
+github.com/GoogleCloudPlatform/declarative-resource-client-library v1.70.0 h1:dqqxHZYK0tlzViFqAbKzMIkfboQVWYN1CTEM2sjBtmQ=
+github.com/GoogleCloudPlatform/declarative-resource-client-library v1.70.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=
diff --git a/provider/provider_yaml_test.go b/provider/provider_yaml_test.go
index 2994f5cfdb..2ab099f335 100644
--- a/provider/provider_yaml_test.go
+++ b/provider/provider_yaml_test.go
@@ -468,12 +468,14 @@ func TestOrganizationsProjectAutoNaming(t *testing.T) {
"inputs": {
"__defaults": [
"autoCreateNetwork",
+ "deletionPolicy",
"name",
"projectId"
],
"autoCreateNetwork": true,
"name": "my-proj",
- "projectId": "my-proj-760b06d"
+ "projectId": "my-proj-760b06d",
+ "deletionPolicy": "DELETE"
}
},
"metadata": {
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromArgs.cs
new file mode 100644
index 0000000000..049d1b41d5
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromArgs.cs
@@ -0,0 +1,63 @@
+// *** 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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressFromArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("identities")]
+ private InputList
? _identities;
+
+ ///
+ /// A list of identities that are allowed access through this `EgressPolicy`.
+ /// Should be in the format of email address. The email address should
+ /// represent individual user or service account only.
+ ///
+ public InputList Identities
+ {
+ get => _identities ?? (_identities = new InputList());
+ set => _identities = value;
+ }
+
+ ///
+ /// Specifies the type of identities that are allowed access to outside the
+ /// perimeter. If left unspecified, then members of `identities` field will
+ /// be allowed access.
+ /// Possible values are: `ANY_IDENTITY`, `ANY_USER_ACCOUNT`, `ANY_SERVICE_ACCOUNT`.
+ ///
+ [Input("identityType")]
+ public Input? IdentityType { get; set; }
+
+ ///
+ /// Whether to enforce traffic restrictions based on `sources` field. If the `sources` field is non-empty, then this field must be set to `SOURCE_RESTRICTION_ENABLED`.
+ /// Possible values are: `SOURCE_RESTRICTION_ENABLED`, `SOURCE_RESTRICTION_DISABLED`.
+ ///
+ [Input("sourceRestriction")]
+ public Input? SourceRestriction { get; set; }
+
+ [Input("sources")]
+ private InputList? _sources;
+
+ ///
+ /// Sources that this EgressPolicy authorizes access from.
+ /// Structure is documented below.
+ ///
+ public InputList Sources
+ {
+ get => _sources ?? (_sources = new InputList());
+ set => _sources = value;
+ }
+
+ public ServicePerimeterDryRunEgressPolicyEgressFromArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressFromArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressFromArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromGetArgs.cs
new file mode 100644
index 0000000000..cca996cb52
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromGetArgs.cs
@@ -0,0 +1,63 @@
+// *** 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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressFromGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("identities")]
+ private InputList? _identities;
+
+ ///
+ /// A list of identities that are allowed access through this `EgressPolicy`.
+ /// Should be in the format of email address. The email address should
+ /// represent individual user or service account only.
+ ///
+ public InputList Identities
+ {
+ get => _identities ?? (_identities = new InputList());
+ set => _identities = value;
+ }
+
+ ///
+ /// Specifies the type of identities that are allowed access to outside the
+ /// perimeter. If left unspecified, then members of `identities` field will
+ /// be allowed access.
+ /// Possible values are: `ANY_IDENTITY`, `ANY_USER_ACCOUNT`, `ANY_SERVICE_ACCOUNT`.
+ ///
+ [Input("identityType")]
+ public Input? IdentityType { get; set; }
+
+ ///
+ /// Whether to enforce traffic restrictions based on `sources` field. If the `sources` field is non-empty, then this field must be set to `SOURCE_RESTRICTION_ENABLED`.
+ /// Possible values are: `SOURCE_RESTRICTION_ENABLED`, `SOURCE_RESTRICTION_DISABLED`.
+ ///
+ [Input("sourceRestriction")]
+ public Input? SourceRestriction { get; set; }
+
+ [Input("sources")]
+ private InputList? _sources;
+
+ ///
+ /// Sources that this EgressPolicy authorizes access from.
+ /// Structure is documented below.
+ ///
+ public InputList Sources
+ {
+ get => _sources ?? (_sources = new InputList());
+ set => _sources = value;
+ }
+
+ public ServicePerimeterDryRunEgressPolicyEgressFromGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressFromGetArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressFromGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromSourceArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromSourceArgs.cs
new file mode 100644
index 0000000000..69f2d25e2b
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromSourceArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressFromSourceArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// An AccessLevel resource name that allows resources outside the ServicePerimeter to be accessed from the inside.
+ ///
+ [Input("accessLevel")]
+ public Input? AccessLevel { get; set; }
+
+ public ServicePerimeterDryRunEgressPolicyEgressFromSourceArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressFromSourceArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressFromSourceArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromSourceGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromSourceGetArgs.cs
new file mode 100644
index 0000000000..c325bc5dab
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressFromSourceGetArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressFromSourceGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// An AccessLevel resource name that allows resources outside the ServicePerimeter to be accessed from the inside.
+ ///
+ [Input("accessLevel")]
+ public Input? AccessLevel { get; set; }
+
+ public ServicePerimeterDryRunEgressPolicyEgressFromSourceGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressFromSourceGetArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressFromSourceGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToArgs.cs
new file mode 100644
index 0000000000..be464455ea
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToArgs.cs
@@ -0,0 +1,64 @@
+// *** 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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressToArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("externalResources")]
+ private InputList? _externalResources;
+
+ ///
+ /// A list of external resources that are allowed to be accessed. A request
+ /// matches if it contains an external resource in this list (Example:
+ /// s3://bucket/path). Currently '*' is not allowed.
+ ///
+ public InputList ExternalResources
+ {
+ get => _externalResources ?? (_externalResources = new InputList());
+ set => _externalResources = value;
+ }
+
+ [Input("operations")]
+ private InputList? _operations;
+
+ ///
+ /// A list of `ApiOperations` that this egress rule applies to. A request matches
+ /// if it contains an operation/service in this list.
+ /// Structure is documented below.
+ ///
+ public InputList Operations
+ {
+ get => _operations ?? (_operations = new InputList());
+ set => _operations = value;
+ }
+
+ [Input("resources")]
+ private InputList? _resources;
+
+ ///
+ /// A list of resources, currently only projects in the form
+ /// `projects/<projectnumber>`, that match this to stanza. A request matches
+ /// if it contains a resource in this list. If * is specified for resources,
+ /// then this `EgressTo` rule will authorize access to all resources outside
+ /// the perimeter.
+ ///
+ public InputList Resources
+ {
+ get => _resources ?? (_resources = new InputList());
+ set => _resources = value;
+ }
+
+ public ServicePerimeterDryRunEgressPolicyEgressToArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressToArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressToArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToGetArgs.cs
new file mode 100644
index 0000000000..575cf0e016
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToGetArgs.cs
@@ -0,0 +1,64 @@
+// *** 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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressToGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("externalResources")]
+ private InputList? _externalResources;
+
+ ///
+ /// A list of external resources that are allowed to be accessed. A request
+ /// matches if it contains an external resource in this list (Example:
+ /// s3://bucket/path). Currently '*' is not allowed.
+ ///
+ public InputList ExternalResources
+ {
+ get => _externalResources ?? (_externalResources = new InputList());
+ set => _externalResources = value;
+ }
+
+ [Input("operations")]
+ private InputList? _operations;
+
+ ///
+ /// A list of `ApiOperations` that this egress rule applies to. A request matches
+ /// if it contains an operation/service in this list.
+ /// Structure is documented below.
+ ///
+ public InputList Operations
+ {
+ get => _operations ?? (_operations = new InputList());
+ set => _operations = value;
+ }
+
+ [Input("resources")]
+ private InputList? _resources;
+
+ ///
+ /// A list of resources, currently only projects in the form
+ /// `projects/<projectnumber>`, that match this to stanza. A request matches
+ /// if it contains a resource in this list. If * is specified for resources,
+ /// then this `EgressTo` rule will authorize access to all resources outside
+ /// the perimeter.
+ ///
+ public InputList Resources
+ {
+ get => _resources ?? (_resources = new InputList());
+ set => _resources = value;
+ }
+
+ public ServicePerimeterDryRunEgressPolicyEgressToGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressToGetArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressToGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationArgs.cs
new file mode 100644
index 0000000000..e21958fb3a
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressToOperationArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("methodSelectors")]
+ private InputList? _methodSelectors;
+
+ ///
+ /// API methods or permissions to allow. Method or permission must belong
+ /// to the service specified by `serviceName` field. A single MethodSelector
+ /// entry with `*` specified for the `method` field will allow all methods
+ /// AND permissions for the service specified in `serviceName`.
+ /// Structure is documented below.
+ ///
+ public InputList MethodSelectors
+ {
+ get => _methodSelectors ?? (_methodSelectors = new InputList());
+ set => _methodSelectors = value;
+ }
+
+ ///
+ /// The name of the API whose methods or permissions the `IngressPolicy` or
+ /// `EgressPolicy` want to allow. A single `ApiOperation` with serviceName
+ /// field set to `*` will allow all methods AND permissions for all services.
+ ///
+ [Input("serviceName")]
+ public Input? ServiceName { get; set; }
+
+ public ServicePerimeterDryRunEgressPolicyEgressToOperationArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressToOperationArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressToOperationArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationGetArgs.cs
new file mode 100644
index 0000000000..d521d38fba
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationGetArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressToOperationGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("methodSelectors")]
+ private InputList? _methodSelectors;
+
+ ///
+ /// API methods or permissions to allow. Method or permission must belong
+ /// to the service specified by `serviceName` field. A single MethodSelector
+ /// entry with `*` specified for the `method` field will allow all methods
+ /// AND permissions for the service specified in `serviceName`.
+ /// Structure is documented below.
+ ///
+ public InputList MethodSelectors
+ {
+ get => _methodSelectors ?? (_methodSelectors = new InputList());
+ set => _methodSelectors = value;
+ }
+
+ ///
+ /// The name of the API whose methods or permissions the `IngressPolicy` or
+ /// `EgressPolicy` want to allow. A single `ApiOperation` with serviceName
+ /// field set to `*` will allow all methods AND permissions for all services.
+ ///
+ [Input("serviceName")]
+ public Input? ServiceName { get; set; }
+
+ public ServicePerimeterDryRunEgressPolicyEgressToOperationGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressToOperationGetArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressToOperationGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorArgs.cs
new file mode 100644
index 0000000000..3da4109009
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Value for `method` should be a valid method name for the corresponding
+ /// `serviceName` in `ApiOperation`. If `*` used as value for method,
+ /// then ALL methods and permissions are allowed.
+ ///
+ [Input("method")]
+ public Input? Method { get; set; }
+
+ ///
+ /// Value for permission should be a valid Cloud IAM permission for the
+ /// corresponding `serviceName` in `ApiOperation`.
+ ///
+ [Input("permission")]
+ public Input? Permission { get; set; }
+
+ public ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorGetArgs.cs
new file mode 100644
index 0000000000..95fcb16f68
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorGetArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Value for `method` should be a valid method name for the corresponding
+ /// `serviceName` in `ApiOperation`. If `*` used as value for method,
+ /// then ALL methods and permissions are allowed.
+ ///
+ [Input("method")]
+ public Input? Method { get; set; }
+
+ ///
+ /// Value for permission should be a valid Cloud IAM permission for the
+ /// corresponding `serviceName` in `ApiOperation`.
+ ///
+ [Input("permission")]
+ public Input? Permission { get; set; }
+
+ public ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorGetArgs Empty => new ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelectorGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromArgs.cs
new file mode 100644
index 0000000000..c0004f828d
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressFromArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("identities")]
+ private InputList? _identities;
+
+ ///
+ /// A list of identities that are allowed access through this ingress policy.
+ /// Should be in the format of email address. The email address should represent
+ /// individual user or service account only.
+ ///
+ public InputList Identities
+ {
+ get => _identities ?? (_identities = new InputList());
+ set => _identities = value;
+ }
+
+ ///
+ /// Specifies the type of identities that are allowed access from outside the
+ /// perimeter. If left unspecified, then members of `identities` field will be
+ /// allowed access.
+ /// Possible values are: `ANY_IDENTITY`, `ANY_USER_ACCOUNT`, `ANY_SERVICE_ACCOUNT`.
+ ///
+ [Input("identityType")]
+ public Input? IdentityType { get; set; }
+
+ [Input("sources")]
+ private InputList? _sources;
+
+ ///
+ /// Sources that this `IngressPolicy` authorizes access from.
+ /// Structure is documented below.
+ ///
+ public InputList Sources
+ {
+ get => _sources ?? (_sources = new InputList());
+ set => _sources = value;
+ }
+
+ public ServicePerimeterDryRunIngressPolicyIngressFromArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressFromArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressFromArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromGetArgs.cs
new file mode 100644
index 0000000000..8a65d4de2b
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromGetArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressFromGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("identities")]
+ private InputList? _identities;
+
+ ///
+ /// A list of identities that are allowed access through this ingress policy.
+ /// Should be in the format of email address. The email address should represent
+ /// individual user or service account only.
+ ///
+ public InputList Identities
+ {
+ get => _identities ?? (_identities = new InputList());
+ set => _identities = value;
+ }
+
+ ///
+ /// Specifies the type of identities that are allowed access from outside the
+ /// perimeter. If left unspecified, then members of `identities` field will be
+ /// allowed access.
+ /// Possible values are: `ANY_IDENTITY`, `ANY_USER_ACCOUNT`, `ANY_SERVICE_ACCOUNT`.
+ ///
+ [Input("identityType")]
+ public Input? IdentityType { get; set; }
+
+ [Input("sources")]
+ private InputList? _sources;
+
+ ///
+ /// Sources that this `IngressPolicy` authorizes access from.
+ /// Structure is documented below.
+ ///
+ public InputList Sources
+ {
+ get => _sources ?? (_sources = new InputList());
+ set => _sources = value;
+ }
+
+ public ServicePerimeterDryRunIngressPolicyIngressFromGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressFromGetArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressFromGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromSourceArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromSourceArgs.cs
new file mode 100644
index 0000000000..26b0e55673
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromSourceArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressFromSourceArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// An `AccessLevel` resource name that allow resources within the
+ /// `ServicePerimeters` to be accessed from the internet. `AccessLevels` listed
+ /// must be in the same policy as this `ServicePerimeter`. Referencing a nonexistent
+ /// `AccessLevel` will cause an error. If no `AccessLevel` names are listed,
+ /// resources within the perimeter can only be accessed via Google Cloud calls
+ /// with request origins within the perimeter.
+ /// Example `accessPolicies/MY_POLICY/accessLevels/MY_LEVEL.`
+ /// If * is specified, then all IngressSources will be allowed.
+ ///
+ [Input("accessLevel")]
+ public Input? AccessLevel { get; set; }
+
+ ///
+ /// A Google Cloud resource that is allowed to ingress the perimeter.
+ /// Requests from these resources will be allowed to access perimeter data.
+ /// Currently only projects are allowed. Format `projects/{project_number}`
+ /// The project may be in any Google Cloud organization, not just the
+ /// organization that the perimeter is defined in. `*` is not allowed, the case
+ /// of allowing all Google Cloud resources only is not supported.
+ ///
+ [Input("resource")]
+ public Input? Resource { get; set; }
+
+ public ServicePerimeterDryRunIngressPolicyIngressFromSourceArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressFromSourceArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressFromSourceArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromSourceGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromSourceGetArgs.cs
new file mode 100644
index 0000000000..7a23ff1f4b
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressFromSourceGetArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressFromSourceGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// An `AccessLevel` resource name that allow resources within the
+ /// `ServicePerimeters` to be accessed from the internet. `AccessLevels` listed
+ /// must be in the same policy as this `ServicePerimeter`. Referencing a nonexistent
+ /// `AccessLevel` will cause an error. If no `AccessLevel` names are listed,
+ /// resources within the perimeter can only be accessed via Google Cloud calls
+ /// with request origins within the perimeter.
+ /// Example `accessPolicies/MY_POLICY/accessLevels/MY_LEVEL.`
+ /// If * is specified, then all IngressSources will be allowed.
+ ///
+ [Input("accessLevel")]
+ public Input? AccessLevel { get; set; }
+
+ ///
+ /// A Google Cloud resource that is allowed to ingress the perimeter.
+ /// Requests from these resources will be allowed to access perimeter data.
+ /// Currently only projects are allowed. Format `projects/{project_number}`
+ /// The project may be in any Google Cloud organization, not just the
+ /// organization that the perimeter is defined in. `*` is not allowed, the case
+ /// of allowing all Google Cloud resources only is not supported.
+ ///
+ [Input("resource")]
+ public Input? Resource { get; set; }
+
+ public ServicePerimeterDryRunIngressPolicyIngressFromSourceGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressFromSourceGetArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressFromSourceGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToArgs.cs
new file mode 100644
index 0000000000..aaf9e3ff0a
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToArgs.cs
@@ -0,0 +1,53 @@
+// *** 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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressToArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("operations")]
+ private InputList? _operations;
+
+ ///
+ /// A list of `ApiOperations` the sources specified in corresponding `IngressFrom`
+ /// are allowed to perform in this `ServicePerimeter`.
+ /// Structure is documented below.
+ ///
+ public InputList Operations
+ {
+ get => _operations ?? (_operations = new InputList());
+ set => _operations = value;
+ }
+
+ [Input("resources")]
+ private InputList? _resources;
+
+ ///
+ /// A list of resources, currently only projects in the form
+ /// `projects/<projectnumber>`, protected by this `ServicePerimeter`
+ /// that are allowed to be accessed by sources defined in the
+ /// corresponding `IngressFrom`. A request matches if it contains
+ /// a resource in this list. If `*` is specified for resources,
+ /// then this `IngressTo` rule will authorize access to all
+ /// resources inside the perimeter, provided that the request
+ /// also matches the `operations` field.
+ ///
+ public InputList Resources
+ {
+ get => _resources ?? (_resources = new InputList());
+ set => _resources = value;
+ }
+
+ public ServicePerimeterDryRunIngressPolicyIngressToArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressToArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressToArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToGetArgs.cs
new file mode 100644
index 0000000000..dfe40beaa7
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToGetArgs.cs
@@ -0,0 +1,53 @@
+// *** 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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressToGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("operations")]
+ private InputList? _operations;
+
+ ///
+ /// A list of `ApiOperations` the sources specified in corresponding `IngressFrom`
+ /// are allowed to perform in this `ServicePerimeter`.
+ /// Structure is documented below.
+ ///
+ public InputList Operations
+ {
+ get => _operations ?? (_operations = new InputList());
+ set => _operations = value;
+ }
+
+ [Input("resources")]
+ private InputList? _resources;
+
+ ///
+ /// A list of resources, currently only projects in the form
+ /// `projects/<projectnumber>`, protected by this `ServicePerimeter`
+ /// that are allowed to be accessed by sources defined in the
+ /// corresponding `IngressFrom`. A request matches if it contains
+ /// a resource in this list. If `*` is specified for resources,
+ /// then this `IngressTo` rule will authorize access to all
+ /// resources inside the perimeter, provided that the request
+ /// also matches the `operations` field.
+ ///
+ public InputList Resources
+ {
+ get => _resources ?? (_resources = new InputList());
+ set => _resources = value;
+ }
+
+ public ServicePerimeterDryRunIngressPolicyIngressToGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressToGetArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressToGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationArgs.cs
new file mode 100644
index 0000000000..5bf8765b54
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressToOperationArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("methodSelectors")]
+ private InputList? _methodSelectors;
+
+ ///
+ /// API methods or permissions to allow. Method or permission must belong to
+ /// the service specified by serviceName field. A single `MethodSelector` entry
+ /// with `*` specified for the method field will allow all methods AND
+ /// permissions for the service specified in `serviceName`.
+ /// Structure is documented below.
+ ///
+ public InputList MethodSelectors
+ {
+ get => _methodSelectors ?? (_methodSelectors = new InputList());
+ set => _methodSelectors = value;
+ }
+
+ ///
+ /// The name of the API whose methods or permissions the `IngressPolicy` or
+ /// `EgressPolicy` want to allow. A single `ApiOperation` with `serviceName`
+ /// field set to `*` will allow all methods AND permissions for all services.
+ ///
+ [Input("serviceName")]
+ public Input? ServiceName { get; set; }
+
+ public ServicePerimeterDryRunIngressPolicyIngressToOperationArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressToOperationArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressToOperationArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationGetArgs.cs
new file mode 100644
index 0000000000..0bd81e88ad
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationGetArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressToOperationGetArgs : global::Pulumi.ResourceArgs
+ {
+ [Input("methodSelectors")]
+ private InputList? _methodSelectors;
+
+ ///
+ /// API methods or permissions to allow. Method or permission must belong to
+ /// the service specified by serviceName field. A single `MethodSelector` entry
+ /// with `*` specified for the method field will allow all methods AND
+ /// permissions for the service specified in `serviceName`.
+ /// Structure is documented below.
+ ///
+ public InputList MethodSelectors
+ {
+ get => _methodSelectors ?? (_methodSelectors = new InputList());
+ set => _methodSelectors = value;
+ }
+
+ ///
+ /// The name of the API whose methods or permissions the `IngressPolicy` or
+ /// `EgressPolicy` want to allow. A single `ApiOperation` with `serviceName`
+ /// field set to `*` will allow all methods AND permissions for all services.
+ ///
+ [Input("serviceName")]
+ public Input? ServiceName { get; set; }
+
+ public ServicePerimeterDryRunIngressPolicyIngressToOperationGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressToOperationGetArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressToOperationGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorArgs.cs
new file mode 100644
index 0000000000..5db950dd0f
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Value for method should be a valid method name for the corresponding
+ /// serviceName in `ApiOperation`. If `*` used as value for `method`, then
+ /// ALL methods and permissions are allowed.
+ ///
+ [Input("method")]
+ public Input? Method { get; set; }
+
+ ///
+ /// Value for permission should be a valid Cloud IAM permission for the
+ /// corresponding `serviceName` in `ApiOperation`.
+ ///
+ [Input("permission")]
+ public Input? Permission { get; set; }
+
+ public ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorGetArgs.cs b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorGetArgs.cs
new file mode 100644
index 0000000000..3cb297ec9f
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Inputs/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorGetArgs.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.AccessContextManager.Inputs
+{
+
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Value for method should be a valid method name for the corresponding
+ /// serviceName in `ApiOperation`. If `*` used as value for `method`, then
+ /// ALL methods and permissions are allowed.
+ ///
+ [Input("method")]
+ public Input? Method { get; set; }
+
+ ///
+ /// Value for permission should be a valid Cloud IAM permission for the
+ /// corresponding `serviceName` in `ApiOperation`.
+ ///
+ [Input("permission")]
+ public Input? Permission { get; set; }
+
+ public ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorGetArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorGetArgs Empty => new ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelectorGetArgs();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressFrom.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressFrom.cs
new file mode 100644
index 0000000000..aa67cac9be
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressFrom.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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressFrom
+ {
+ ///
+ /// A list of identities that are allowed access through this `EgressPolicy`.
+ /// Should be in the format of email address. The email address should
+ /// represent individual user or service account only.
+ ///
+ public readonly ImmutableArray Identities;
+ ///
+ /// Specifies the type of identities that are allowed access to outside the
+ /// perimeter. If left unspecified, then members of `identities` field will
+ /// be allowed access.
+ /// Possible values are: `ANY_IDENTITY`, `ANY_USER_ACCOUNT`, `ANY_SERVICE_ACCOUNT`.
+ ///
+ public readonly string? IdentityType;
+ ///
+ /// Whether to enforce traffic restrictions based on `sources` field. If the `sources` field is non-empty, then this field must be set to `SOURCE_RESTRICTION_ENABLED`.
+ /// Possible values are: `SOURCE_RESTRICTION_ENABLED`, `SOURCE_RESTRICTION_DISABLED`.
+ ///
+ public readonly string? SourceRestriction;
+ ///
+ /// Sources that this EgressPolicy authorizes access from.
+ /// Structure is documented below.
+ ///
+ public readonly ImmutableArray Sources;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunEgressPolicyEgressFrom(
+ ImmutableArray identities,
+
+ string? identityType,
+
+ string? sourceRestriction,
+
+ ImmutableArray sources)
+ {
+ Identities = identities;
+ IdentityType = identityType;
+ SourceRestriction = sourceRestriction;
+ Sources = sources;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressFromSource.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressFromSource.cs
new file mode 100644
index 0000000000..3cbc30692a
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressFromSource.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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressFromSource
+ {
+ ///
+ /// An AccessLevel resource name that allows resources outside the ServicePerimeter to be accessed from the inside.
+ ///
+ public readonly string? AccessLevel;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunEgressPolicyEgressFromSource(string? accessLevel)
+ {
+ AccessLevel = accessLevel;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressTo.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressTo.cs
new file mode 100644
index 0000000000..79b5697b87
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressTo.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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressTo
+ {
+ ///
+ /// A list of external resources that are allowed to be accessed. A request
+ /// matches if it contains an external resource in this list (Example:
+ /// s3://bucket/path). Currently '*' is not allowed.
+ ///
+ public readonly ImmutableArray ExternalResources;
+ ///
+ /// A list of `ApiOperations` that this egress rule applies to. A request matches
+ /// if it contains an operation/service in this list.
+ /// Structure is documented below.
+ ///
+ public readonly ImmutableArray Operations;
+ ///
+ /// A list of resources, currently only projects in the form
+ /// `projects/<projectnumber>`, that match this to stanza. A request matches
+ /// if it contains a resource in this list. If * is specified for resources,
+ /// then this `EgressTo` rule will authorize access to all resources outside
+ /// the perimeter.
+ ///
+ public readonly ImmutableArray Resources;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunEgressPolicyEgressTo(
+ ImmutableArray externalResources,
+
+ ImmutableArray operations,
+
+ ImmutableArray resources)
+ {
+ ExternalResources = externalResources;
+ Operations = operations;
+ Resources = resources;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressToOperation.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressToOperation.cs
new file mode 100644
index 0000000000..f94a867c80
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressToOperation.cs
@@ -0,0 +1,41 @@
+// *** 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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressToOperation
+ {
+ ///
+ /// API methods or permissions to allow. Method or permission must belong
+ /// to the service specified by `serviceName` field. A single MethodSelector
+ /// entry with `*` specified for the `method` field will allow all methods
+ /// AND permissions for the service specified in `serviceName`.
+ /// Structure is documented below.
+ ///
+ public readonly ImmutableArray MethodSelectors;
+ ///
+ /// The name of the API whose methods or permissions the `IngressPolicy` or
+ /// `EgressPolicy` want to allow. A single `ApiOperation` with serviceName
+ /// field set to `*` will allow all methods AND permissions for all services.
+ ///
+ public readonly string? ServiceName;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunEgressPolicyEgressToOperation(
+ ImmutableArray methodSelectors,
+
+ string? serviceName)
+ {
+ MethodSelectors = methodSelectors;
+ ServiceName = serviceName;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelector.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelector.cs
new file mode 100644
index 0000000000..11c16e300c
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelector.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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelector
+ {
+ ///
+ /// Value for `method` should be a valid method name for the corresponding
+ /// `serviceName` in `ApiOperation`. If `*` used as value for method,
+ /// then ALL methods and permissions are allowed.
+ ///
+ public readonly string? Method;
+ ///
+ /// Value for permission should be a valid Cloud IAM permission for the
+ /// corresponding `serviceName` in `ApiOperation`.
+ ///
+ public readonly string? Permission;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunEgressPolicyEgressToOperationMethodSelector(
+ string? method,
+
+ string? permission)
+ {
+ Method = method;
+ Permission = permission;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressFrom.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressFrom.cs
new file mode 100644
index 0000000000..657d3d861e
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressFrom.cs
@@ -0,0 +1,48 @@
+// *** 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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressFrom
+ {
+ ///
+ /// A list of identities that are allowed access through this ingress policy.
+ /// Should be in the format of email address. The email address should represent
+ /// individual user or service account only.
+ ///
+ public readonly ImmutableArray Identities;
+ ///
+ /// Specifies the type of identities that are allowed access from outside the
+ /// perimeter. If left unspecified, then members of `identities` field will be
+ /// allowed access.
+ /// Possible values are: `ANY_IDENTITY`, `ANY_USER_ACCOUNT`, `ANY_SERVICE_ACCOUNT`.
+ ///
+ public readonly string? IdentityType;
+ ///
+ /// Sources that this `IngressPolicy` authorizes access from.
+ /// Structure is documented below.
+ ///
+ public readonly ImmutableArray Sources;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunIngressPolicyIngressFrom(
+ ImmutableArray identities,
+
+ string? identityType,
+
+ ImmutableArray sources)
+ {
+ Identities = identities;
+ IdentityType = identityType;
+ Sources = sources;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressFromSource.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressFromSource.cs
new file mode 100644
index 0000000000..de8476dac7
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressFromSource.cs
@@ -0,0 +1,47 @@
+// *** 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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressFromSource
+ {
+ ///
+ /// An `AccessLevel` resource name that allow resources within the
+ /// `ServicePerimeters` to be accessed from the internet. `AccessLevels` listed
+ /// must be in the same policy as this `ServicePerimeter`. Referencing a nonexistent
+ /// `AccessLevel` will cause an error. If no `AccessLevel` names are listed,
+ /// resources within the perimeter can only be accessed via Google Cloud calls
+ /// with request origins within the perimeter.
+ /// Example `accessPolicies/MY_POLICY/accessLevels/MY_LEVEL.`
+ /// If * is specified, then all IngressSources will be allowed.
+ ///
+ public readonly string? AccessLevel;
+ ///
+ /// A Google Cloud resource that is allowed to ingress the perimeter.
+ /// Requests from these resources will be allowed to access perimeter data.
+ /// Currently only projects are allowed. Format `projects/{project_number}`
+ /// The project may be in any Google Cloud organization, not just the
+ /// organization that the perimeter is defined in. `*` is not allowed, the case
+ /// of allowing all Google Cloud resources only is not supported.
+ ///
+ public readonly string? Resource;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunIngressPolicyIngressFromSource(
+ string? accessLevel,
+
+ string? resource)
+ {
+ AccessLevel = accessLevel;
+ Resource = resource;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressTo.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressTo.cs
new file mode 100644
index 0000000000..0cf48541d0
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressTo.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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressTo
+ {
+ ///
+ /// A list of `ApiOperations` the sources specified in corresponding `IngressFrom`
+ /// are allowed to perform in this `ServicePerimeter`.
+ /// Structure is documented below.
+ ///
+ public readonly ImmutableArray Operations;
+ ///
+ /// A list of resources, currently only projects in the form
+ /// `projects/<projectnumber>`, protected by this `ServicePerimeter`
+ /// that are allowed to be accessed by sources defined in the
+ /// corresponding `IngressFrom`. A request matches if it contains
+ /// a resource in this list. If `*` is specified for resources,
+ /// then this `IngressTo` rule will authorize access to all
+ /// resources inside the perimeter, provided that the request
+ /// also matches the `operations` field.
+ ///
+ public readonly ImmutableArray Resources;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunIngressPolicyIngressTo(
+ ImmutableArray operations,
+
+ ImmutableArray resources)
+ {
+ Operations = operations;
+ Resources = resources;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressToOperation.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressToOperation.cs
new file mode 100644
index 0000000000..81b078aded
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressToOperation.cs
@@ -0,0 +1,41 @@
+// *** 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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressToOperation
+ {
+ ///
+ /// API methods or permissions to allow. Method or permission must belong to
+ /// the service specified by serviceName field. A single `MethodSelector` entry
+ /// with `*` specified for the method field will allow all methods AND
+ /// permissions for the service specified in `serviceName`.
+ /// Structure is documented below.
+ ///
+ public readonly ImmutableArray MethodSelectors;
+ ///
+ /// The name of the API whose methods or permissions the `IngressPolicy` or
+ /// `EgressPolicy` want to allow. A single `ApiOperation` with `serviceName`
+ /// field set to `*` will allow all methods AND permissions for all services.
+ ///
+ public readonly string? ServiceName;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunIngressPolicyIngressToOperation(
+ ImmutableArray methodSelectors,
+
+ string? serviceName)
+ {
+ MethodSelectors = methodSelectors;
+ ServiceName = serviceName;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelector.cs b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelector.cs
new file mode 100644
index 0000000000..5986248130
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/Outputs/ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelector.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.AccessContextManager.Outputs
+{
+
+ [OutputType]
+ public sealed class ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelector
+ {
+ ///
+ /// Value for method should be a valid method name for the corresponding
+ /// serviceName in `ApiOperation`. If `*` used as value for `method`, then
+ /// ALL methods and permissions are allowed.
+ ///
+ public readonly string? Method;
+ ///
+ /// Value for permission should be a valid Cloud IAM permission for the
+ /// corresponding `serviceName` in `ApiOperation`.
+ ///
+ public readonly string? Permission;
+
+ [OutputConstructor]
+ private ServicePerimeterDryRunIngressPolicyIngressToOperationMethodSelector(
+ string? method,
+
+ string? permission)
+ {
+ Method = method;
+ Permission = permission;
+ }
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs
new file mode 100644
index 0000000000..8c044ef8ac
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunEgressPolicy.cs
@@ -0,0 +1,166 @@
+// *** 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.AccessContextManager
+{
+ ///
+ /// Manage a single EgressPolicy in the spec (dry-run) configuration for a service perimeter.
+ /// EgressPolicies match requests based on egressFrom and egressTo stanzas.
+ /// For an EgressPolicy to match, both egressFrom and egressTo stanzas must be matched.
+ /// If an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter
+ /// boundary. For example, an EgressPolicy can be used to allow VMs on networks
+ /// within the ServicePerimeter to access a defined set of projects outside the
+ /// perimeter in certain contexts (e.g. to read data from a Cloud Storage bucket
+ /// or query against a BigQuery dataset).
+ ///
+ /// > **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.
+ ///
+ /// To get more information about ServicePerimeterDryRunEgressPolicy, see:
+ ///
+ /// * [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#egresspolicy)
+ ///
+ /// ## Example Usage
+ ///
+ [GcpResourceType("gcp:accesscontextmanager/servicePerimeterDryRunEgressPolicy:ServicePerimeterDryRunEgressPolicy")]
+ public partial class ServicePerimeterDryRunEgressPolicy : global::Pulumi.CustomResource
+ {
+ ///
+ /// Defines conditions on the source of a request causing this `EgressPolicy` to apply.
+ /// Structure is documented below.
+ ///
+ [Output("egressFrom")]
+ public Output EgressFrom { get; private set; } = null!;
+
+ ///
+ /// Defines the conditions on the `ApiOperation` and destination resources that
+ /// cause this `EgressPolicy` to apply.
+ /// Structure is documented below.
+ ///
+ [Output("egressTo")]
+ public Output EgressTo { get; private set; } = null!;
+
+ ///
+ /// The name of the Service Perimeter to add this resource to.
+ ///
+ ///
+ /// - - -
+ ///
+ [Output("perimeter")]
+ public Output Perimeter { get; private set; } = null!;
+
+
+ ///
+ /// Create a ServicePerimeterDryRunEgressPolicy 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 ServicePerimeterDryRunEgressPolicy(string name, ServicePerimeterDryRunEgressPolicyArgs args, CustomResourceOptions? options = null)
+ : base("gcp:accesscontextmanager/servicePerimeterDryRunEgressPolicy:ServicePerimeterDryRunEgressPolicy", name, args ?? new ServicePerimeterDryRunEgressPolicyArgs(), MakeResourceOptions(options, ""))
+ {
+ }
+
+ private ServicePerimeterDryRunEgressPolicy(string name, Input id, ServicePerimeterDryRunEgressPolicyState? state = null, CustomResourceOptions? options = null)
+ : base("gcp:accesscontextmanager/servicePerimeterDryRunEgressPolicy:ServicePerimeterDryRunEgressPolicy", 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 ServicePerimeterDryRunEgressPolicy 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 ServicePerimeterDryRunEgressPolicy Get(string name, Input id, ServicePerimeterDryRunEgressPolicyState? state = null, CustomResourceOptions? options = null)
+ {
+ return new ServicePerimeterDryRunEgressPolicy(name, id, state, options);
+ }
+ }
+
+ public sealed class ServicePerimeterDryRunEgressPolicyArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Defines conditions on the source of a request causing this `EgressPolicy` to apply.
+ /// Structure is documented below.
+ ///
+ [Input("egressFrom")]
+ public Input? EgressFrom { get; set; }
+
+ ///
+ /// Defines the conditions on the `ApiOperation` and destination resources that
+ /// cause this `EgressPolicy` to apply.
+ /// Structure is documented below.
+ ///
+ [Input("egressTo")]
+ public Input? EgressTo { get; set; }
+
+ ///
+ /// The name of the Service Perimeter to add this resource to.
+ ///
+ ///
+ /// - - -
+ ///
+ [Input("perimeter", required: true)]
+ public Input Perimeter { get; set; } = null!;
+
+ public ServicePerimeterDryRunEgressPolicyArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyArgs Empty => new ServicePerimeterDryRunEgressPolicyArgs();
+ }
+
+ public sealed class ServicePerimeterDryRunEgressPolicyState : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Defines conditions on the source of a request causing this `EgressPolicy` to apply.
+ /// Structure is documented below.
+ ///
+ [Input("egressFrom")]
+ public Input? EgressFrom { get; set; }
+
+ ///
+ /// Defines the conditions on the `ApiOperation` and destination resources that
+ /// cause this `EgressPolicy` to apply.
+ /// Structure is documented below.
+ ///
+ [Input("egressTo")]
+ public Input? EgressTo { get; set; }
+
+ ///
+ /// The name of the Service Perimeter to add this resource to.
+ ///
+ ///
+ /// - - -
+ ///
+ [Input("perimeter")]
+ public Input? Perimeter { get; set; }
+
+ public ServicePerimeterDryRunEgressPolicyState()
+ {
+ }
+ public static new ServicePerimeterDryRunEgressPolicyState Empty => new ServicePerimeterDryRunEgressPolicyState();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs
new file mode 100644
index 0000000000..515e6fba7e
--- /dev/null
+++ b/sdk/dotnet/AccessContextManager/ServicePerimeterDryRunIngressPolicy.cs
@@ -0,0 +1,170 @@
+// *** 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.AccessContextManager
+{
+ ///
+ /// Manage a single IngressPolicy in the spec (dry-run) configuration for a service perimeter.
+ /// IngressPolicies match requests based on ingressFrom and ingressTo stanzas. For an ingress policy to match,
+ /// both the ingressFrom and ingressTo stanzas must be matched. If an IngressPolicy matches a request,
+ /// the request is allowed through the perimeter boundary from outside the perimeter.
+ /// For example, access from the internet can be allowed either based on an AccessLevel or,
+ /// for traffic hosted on Google Cloud, the project of the source network.
+ /// For access from private networks, using the project of the hosting network is required.
+ /// Individual ingress policies can be limited by restricting which services and/
+ /// or actions they match using the ingressTo field.
+ ///
+ /// > **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.
+ ///
+ /// To get more information about ServicePerimeterDryRunIngressPolicy, see:
+ ///
+ /// * [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#ingresspolicy)
+ ///
+ /// ## Example Usage
+ ///
+ [GcpResourceType("gcp:accesscontextmanager/servicePerimeterDryRunIngressPolicy:ServicePerimeterDryRunIngressPolicy")]
+ public partial class ServicePerimeterDryRunIngressPolicy : global::Pulumi.CustomResource
+ {
+ ///
+ /// Defines the conditions on the source of a request causing this `IngressPolicy`
+ /// to apply.
+ /// Structure is documented below.
+ ///
+ [Output("ingressFrom")]
+ public Output IngressFrom { get; private set; } = null!;
+
+ ///
+ /// Defines the conditions on the `ApiOperation` and request destination that cause
+ /// this `IngressPolicy` to apply.
+ /// Structure is documented below.
+ ///
+ [Output("ingressTo")]
+ public Output IngressTo { get; private set; } = null!;
+
+ ///
+ /// The name of the Service Perimeter to add this resource to.
+ ///
+ ///
+ /// - - -
+ ///
+ [Output("perimeter")]
+ public Output Perimeter { get; private set; } = null!;
+
+
+ ///
+ /// Create a ServicePerimeterDryRunIngressPolicy 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 ServicePerimeterDryRunIngressPolicy(string name, ServicePerimeterDryRunIngressPolicyArgs args, CustomResourceOptions? options = null)
+ : base("gcp:accesscontextmanager/servicePerimeterDryRunIngressPolicy:ServicePerimeterDryRunIngressPolicy", name, args ?? new ServicePerimeterDryRunIngressPolicyArgs(), MakeResourceOptions(options, ""))
+ {
+ }
+
+ private ServicePerimeterDryRunIngressPolicy(string name, Input id, ServicePerimeterDryRunIngressPolicyState? state = null, CustomResourceOptions? options = null)
+ : base("gcp:accesscontextmanager/servicePerimeterDryRunIngressPolicy:ServicePerimeterDryRunIngressPolicy", 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 ServicePerimeterDryRunIngressPolicy 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 ServicePerimeterDryRunIngressPolicy Get(string name, Input id, ServicePerimeterDryRunIngressPolicyState? state = null, CustomResourceOptions? options = null)
+ {
+ return new ServicePerimeterDryRunIngressPolicy(name, id, state, options);
+ }
+ }
+
+ public sealed class ServicePerimeterDryRunIngressPolicyArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Defines the conditions on the source of a request causing this `IngressPolicy`
+ /// to apply.
+ /// Structure is documented below.
+ ///
+ [Input("ingressFrom")]
+ public Input? IngressFrom { get; set; }
+
+ ///
+ /// Defines the conditions on the `ApiOperation` and request destination that cause
+ /// this `IngressPolicy` to apply.
+ /// Structure is documented below.
+ ///
+ [Input("ingressTo")]
+ public Input? IngressTo { get; set; }
+
+ ///
+ /// The name of the Service Perimeter to add this resource to.
+ ///
+ ///
+ /// - - -
+ ///
+ [Input("perimeter", required: true)]
+ public Input Perimeter { get; set; } = null!;
+
+ public ServicePerimeterDryRunIngressPolicyArgs()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyArgs Empty => new ServicePerimeterDryRunIngressPolicyArgs();
+ }
+
+ public sealed class ServicePerimeterDryRunIngressPolicyState : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Defines the conditions on the source of a request causing this `IngressPolicy`
+ /// to apply.
+ /// Structure is documented below.
+ ///
+ [Input("ingressFrom")]
+ public Input? IngressFrom { get; set; }
+
+ ///
+ /// Defines the conditions on the `ApiOperation` and request destination that cause
+ /// this `IngressPolicy` to apply.
+ /// Structure is documented below.
+ ///
+ [Input("ingressTo")]
+ public Input? IngressTo { get; set; }
+
+ ///
+ /// The name of the Service Perimeter to add this resource to.
+ ///
+ ///
+ /// - - -
+ ///
+ [Input("perimeter")]
+ public Input? Perimeter { get; set; }
+
+ public ServicePerimeterDryRunIngressPolicyState()
+ {
+ }
+ public static new ServicePerimeterDryRunIngressPolicyState Empty => new ServicePerimeterDryRunIngressPolicyState();
+ }
+}
diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs
index 32882c5580..8fec29261c 100644
--- a/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs
+++ b/sdk/dotnet/AccessContextManager/ServicePerimeterEgressPolicy.cs
@@ -10,6 +10,7 @@
namespace Pulumi.Gcp.AccessContextManager
{
///
+ /// Manage a single EgressPolicy in the status (enforced) configuration for a service perimeter.
/// EgressPolicies match requests based on egressFrom and egressTo stanzas.
/// For an EgressPolicy to match, both egressFrom and egressTo stanzas must be matched.
/// If an EgressPolicy matches a request, the request is allowed to span the ServicePerimeter
@@ -27,18 +28,6 @@ namespace Pulumi.Gcp.AccessContextManager
/// * [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#egresspolicy)
///
/// ## Example Usage
- ///
- /// ## Import
- ///
- /// ServicePerimeterEgressPolicy can be imported using any of these accepted formats:
- ///
- /// * `{{perimeter}}`
- ///
- /// When using the `pulumi import` command, ServicePerimeterEgressPolicy can be imported using one of the formats above. For example:
- ///
- /// ```sh
- /// $ pulumi import gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy default {{perimeter}}
- /// ```
///
[GcpResourceType("gcp:accesscontextmanager/servicePerimeterEgressPolicy:ServicePerimeterEgressPolicy")]
public partial class ServicePerimeterEgressPolicy : global::Pulumi.CustomResource
diff --git a/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs b/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs
index 7dd31cd331..784ab59e26 100644
--- a/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs
+++ b/sdk/dotnet/AccessContextManager/ServicePerimeterIngressPolicy.cs
@@ -10,6 +10,7 @@
namespace Pulumi.Gcp.AccessContextManager
{
///
+ /// Manage a single IngressPolicy in the status (enforced) configuration for a service perimeter.
/// IngressPolicies match requests based on ingressFrom and ingressTo stanzas. For an ingress policy to match,
/// both the ingressFrom and ingressTo stanzas must be matched. If an IngressPolicy matches a request,
/// the request is allowed through the perimeter boundary from outside the perimeter.
@@ -28,18 +29,6 @@ namespace Pulumi.Gcp.AccessContextManager
/// * [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.servicePerimeters#ingresspolicy)
///
/// ## Example Usage
- ///
- /// ## Import
- ///
- /// ServicePerimeterIngressPolicy can be imported using any of these accepted formats:
- ///
- /// * `{{perimeter}}`
- ///
- /// When using the `pulumi import` command, ServicePerimeterIngressPolicy can be imported using one of the formats above. For example:
- ///
- /// ```sh
- /// $ pulumi import gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy default {{perimeter}}
- /// ```
///
[GcpResourceType("gcp:accesscontextmanager/servicePerimeterIngressPolicy:ServicePerimeterIngressPolicy")]
public partial class ServicePerimeterIngressPolicy : global::Pulumi.CustomResource
diff --git a/sdk/dotnet/ApplicationIntegration/Client.cs b/sdk/dotnet/ApplicationIntegration/Client.cs
index fecb065c55..6f4c6a13c4 100644
--- a/sdk/dotnet/ApplicationIntegration/Client.cs
+++ b/sdk/dotnet/ApplicationIntegration/Client.cs
@@ -70,7 +70,7 @@ namespace Pulumi.Gcp.ApplicationIntegration
///
/// var serviceAccount = new Gcp.ServiceAccount.Account("service_account", new()
/// {
- /// AccountId = "service-account-id",
+ /// AccountId = "my-service-acc",
/// DisplayName = "Service Account",
/// });
///
diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetGkeArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetGkeArgs.cs
index f56ffad7d4..ae237fe158 100644
--- a/sdk/dotnet/CloudDeploy/Inputs/TargetGkeArgs.cs
+++ b/sdk/dotnet/CloudDeploy/Inputs/TargetGkeArgs.cs
@@ -24,6 +24,12 @@ public sealed class TargetGkeArgs : global::Pulumi.ResourceArgs
[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 TargetGkeArgs()
{
}
diff --git a/sdk/dotnet/CloudDeploy/Inputs/TargetGkeGetArgs.cs b/sdk/dotnet/CloudDeploy/Inputs/TargetGkeGetArgs.cs
index da46a03076..619ac2dd2c 100644
--- a/sdk/dotnet/CloudDeploy/Inputs/TargetGkeGetArgs.cs
+++ b/sdk/dotnet/CloudDeploy/Inputs/TargetGkeGetArgs.cs
@@ -24,6 +24,12 @@ public sealed class TargetGkeGetArgs : global::Pulumi.ResourceArgs
[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 TargetGkeGetArgs()
{
}
diff --git a/sdk/dotnet/CloudDeploy/Outputs/TargetGke.cs b/sdk/dotnet/CloudDeploy/Outputs/TargetGke.cs
index 58b11b220e..f2c8b33426 100644
--- a/sdk/dotnet/CloudDeploy/Outputs/TargetGke.cs
+++ b/sdk/dotnet/CloudDeploy/Outputs/TargetGke.cs
@@ -21,15 +21,22 @@ public sealed class TargetGke
/// 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 TargetGke(
string? cluster,
- bool? internalIp)
+ bool? internalIp,
+
+ string? proxyUrl)
{
Cluster = cluster;
InternalIp = internalIp;
+ ProxyUrl = proxyUrl;
}
}
}
diff --git a/sdk/dotnet/CloudRunV2/Inputs/JobBinaryAuthorizationArgs.cs b/sdk/dotnet/CloudRunV2/Inputs/JobBinaryAuthorizationArgs.cs
index 6aa3d08045..a952b0dadb 100644
--- a/sdk/dotnet/CloudRunV2/Inputs/JobBinaryAuthorizationArgs.cs
+++ b/sdk/dotnet/CloudRunV2/Inputs/JobBinaryAuthorizationArgs.cs
@@ -18,6 +18,12 @@ public sealed class JobBinaryAuthorizationArgs : global::Pulumi.ResourceArgs
[Input("breakglassJustification")]
public Input? BreakglassJustification { get; set; }
+ ///
+ /// The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}
+ ///
+ [Input("policy")]
+ public Input? Policy { get; set; }
+
///
/// If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.
///
diff --git a/sdk/dotnet/CloudRunV2/Inputs/JobBinaryAuthorizationGetArgs.cs b/sdk/dotnet/CloudRunV2/Inputs/JobBinaryAuthorizationGetArgs.cs
index 59b6db7061..3ad4d85c3e 100644
--- a/sdk/dotnet/CloudRunV2/Inputs/JobBinaryAuthorizationGetArgs.cs
+++ b/sdk/dotnet/CloudRunV2/Inputs/JobBinaryAuthorizationGetArgs.cs
@@ -18,6 +18,12 @@ public sealed class JobBinaryAuthorizationGetArgs : global::Pulumi.ResourceArgs
[Input("breakglassJustification")]
public Input? BreakglassJustification { get; set; }
+ ///
+ /// The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}
+ ///
+ [Input("policy")]
+ public Input? Policy { get; set; }
+
///
/// If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.
///
diff --git a/sdk/dotnet/CloudRunV2/Inputs/ServiceBinaryAuthorizationArgs.cs b/sdk/dotnet/CloudRunV2/Inputs/ServiceBinaryAuthorizationArgs.cs
index 2756efd161..1d250a0c67 100644
--- a/sdk/dotnet/CloudRunV2/Inputs/ServiceBinaryAuthorizationArgs.cs
+++ b/sdk/dotnet/CloudRunV2/Inputs/ServiceBinaryAuthorizationArgs.cs
@@ -18,6 +18,12 @@ public sealed class ServiceBinaryAuthorizationArgs : global::Pulumi.ResourceArgs
[Input("breakglassJustification")]
public Input? BreakglassJustification { get; set; }
+ ///
+ /// The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}
+ ///
+ [Input("policy")]
+ public Input? Policy { get; set; }
+
///
/// If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.
///
diff --git a/sdk/dotnet/CloudRunV2/Inputs/ServiceBinaryAuthorizationGetArgs.cs b/sdk/dotnet/CloudRunV2/Inputs/ServiceBinaryAuthorizationGetArgs.cs
index 6718190f11..66a27610eb 100644
--- a/sdk/dotnet/CloudRunV2/Inputs/ServiceBinaryAuthorizationGetArgs.cs
+++ b/sdk/dotnet/CloudRunV2/Inputs/ServiceBinaryAuthorizationGetArgs.cs
@@ -18,6 +18,12 @@ public sealed class ServiceBinaryAuthorizationGetArgs : global::Pulumi.ResourceA
[Input("breakglassJustification")]
public Input? BreakglassJustification { get; set; }
+ ///
+ /// The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}
+ ///
+ [Input("policy")]
+ public Input? Policy { get; set; }
+
///
/// If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.
///
diff --git a/sdk/dotnet/CloudRunV2/Outputs/GetJobBinaryAuthorizationResult.cs b/sdk/dotnet/CloudRunV2/Outputs/GetJobBinaryAuthorizationResult.cs
index 90e237003c..c1557d782a 100644
--- a/sdk/dotnet/CloudRunV2/Outputs/GetJobBinaryAuthorizationResult.cs
+++ b/sdk/dotnet/CloudRunV2/Outputs/GetJobBinaryAuthorizationResult.cs
@@ -18,6 +18,10 @@ public sealed class GetJobBinaryAuthorizationResult
///
public readonly string BreakglassJustification;
///
+ /// The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}
+ ///
+ public readonly string Policy;
+ ///
/// If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.
///
public readonly bool UseDefault;
@@ -26,9 +30,12 @@ public sealed class GetJobBinaryAuthorizationResult
private GetJobBinaryAuthorizationResult(
string breakglassJustification,
+ string policy,
+
bool useDefault)
{
BreakglassJustification = breakglassJustification;
+ Policy = policy;
UseDefault = useDefault;
}
}
diff --git a/sdk/dotnet/CloudRunV2/Outputs/GetServiceBinaryAuthorizationResult.cs b/sdk/dotnet/CloudRunV2/Outputs/GetServiceBinaryAuthorizationResult.cs
index d42e4d7a22..d7b64cbca9 100644
--- a/sdk/dotnet/CloudRunV2/Outputs/GetServiceBinaryAuthorizationResult.cs
+++ b/sdk/dotnet/CloudRunV2/Outputs/GetServiceBinaryAuthorizationResult.cs
@@ -18,6 +18,10 @@ public sealed class GetServiceBinaryAuthorizationResult
///
public readonly string BreakglassJustification;
///
+ /// The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}
+ ///
+ public readonly string Policy;
+ ///
/// If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.
///
public readonly bool UseDefault;
@@ -26,9 +30,12 @@ public sealed class GetServiceBinaryAuthorizationResult
private GetServiceBinaryAuthorizationResult(
string breakglassJustification,
+ string policy,
+
bool useDefault)
{
BreakglassJustification = breakglassJustification;
+ Policy = policy;
UseDefault = useDefault;
}
}
diff --git a/sdk/dotnet/CloudRunV2/Outputs/JobBinaryAuthorization.cs b/sdk/dotnet/CloudRunV2/Outputs/JobBinaryAuthorization.cs
index 2afd9f775e..9056783b72 100644
--- a/sdk/dotnet/CloudRunV2/Outputs/JobBinaryAuthorization.cs
+++ b/sdk/dotnet/CloudRunV2/Outputs/JobBinaryAuthorization.cs
@@ -18,6 +18,10 @@ public sealed class JobBinaryAuthorization
///
public readonly string? BreakglassJustification;
///
+ /// The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}
+ ///
+ public readonly string? Policy;
+ ///
/// If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.
///
public readonly bool? UseDefault;
@@ -26,9 +30,12 @@ public sealed class JobBinaryAuthorization
private JobBinaryAuthorization(
string? breakglassJustification,
+ string? policy,
+
bool? useDefault)
{
BreakglassJustification = breakglassJustification;
+ Policy = policy;
UseDefault = useDefault;
}
}
diff --git a/sdk/dotnet/CloudRunV2/Outputs/ServiceBinaryAuthorization.cs b/sdk/dotnet/CloudRunV2/Outputs/ServiceBinaryAuthorization.cs
index 4f2733cc23..aca1775502 100644
--- a/sdk/dotnet/CloudRunV2/Outputs/ServiceBinaryAuthorization.cs
+++ b/sdk/dotnet/CloudRunV2/Outputs/ServiceBinaryAuthorization.cs
@@ -18,6 +18,10 @@ public sealed class ServiceBinaryAuthorization
///
public readonly string? BreakglassJustification;
///
+ /// The path to a binary authorization policy. Format: projects/{project}/platforms/cloudRun/{policy-name}
+ ///
+ public readonly string? Policy;
+ ///
/// If True, indicates to use the default project's binary authorization policy. If False, binary authorization will be disabled.
///
public readonly bool? UseDefault;
@@ -26,9 +30,12 @@ public sealed class ServiceBinaryAuthorization
private ServiceBinaryAuthorization(
string? breakglassJustification,
+ string? policy,
+
bool? useDefault)
{
BreakglassJustification = breakglassJustification;
+ Policy = policy;
UseDefault = useDefault;
}
}
diff --git a/sdk/dotnet/Compute/RegionTargetHttpsProxy.cs b/sdk/dotnet/Compute/RegionTargetHttpsProxy.cs
index a730b5ec3a..aaf17c26bd 100644
--- a/sdk/dotnet/Compute/RegionTargetHttpsProxy.cs
+++ b/sdk/dotnet/Compute/RegionTargetHttpsProxy.cs
@@ -432,6 +432,10 @@ public partial class RegionTargetHttpsProxy : global::Pulumi.CustomResource
/// INTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED
/// loadBalancingScheme consult ServerTlsPolicy documentation.
/// If left blank, communications are not encrypted.
+ /// If you remove this field from your configuration at the same time as
+ /// deleting or recreating a referenced ServerTlsPolicy resource, you will
+ /// receive a resourceInUseByAnotherResource error. Use lifecycle.create_before_destroy
+ /// within the ServerTlsPolicy resource to avoid this.
///
[Output("serverTlsPolicy")]
public Output ServerTlsPolicy { get; private set; } = null!;
@@ -564,6 +568,10 @@ public InputList CertificateManagerCertificates
/// INTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED
/// loadBalancingScheme consult ServerTlsPolicy documentation.
/// If left blank, communications are not encrypted.
+ /// If you remove this field from your configuration at the same time as
+ /// deleting or recreating a referenced ServerTlsPolicy resource, you will
+ /// receive a resourceInUseByAnotherResource error. Use lifecycle.create_before_destroy
+ /// within the ServerTlsPolicy resource to avoid this.
///
[Input("serverTlsPolicy")]
public Input? ServerTlsPolicy { get; set; }
@@ -682,6 +690,10 @@ public InputList CertificateManagerCertificates
/// INTERNAL_SELF_MANAGED and which with EXTERNAL, EXTERNAL_MANAGED
/// loadBalancingScheme consult ServerTlsPolicy documentation.
/// If left blank, communications are not encrypted.
+ /// If you remove this field from your configuration at the same time as
+ /// deleting or recreating a referenced ServerTlsPolicy resource, you will
+ /// receive a resourceInUseByAnotherResource error. Use lifecycle.create_before_destroy
+ /// within the ServerTlsPolicy resource to avoid this.
///
[Input("serverTlsPolicy")]
public Input? ServerTlsPolicy { get; set; }
diff --git a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingArgs.cs b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingArgs.cs
index 66db1f5c06..287629c14f 100644
--- a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingArgs.cs
@@ -20,6 +20,20 @@ public sealed class ClusterClusterAutoscalingArgs : global::Pulumi.ResourceArgs
[Input("autoProvisioningDefaults")]
public Input? AutoProvisioningDefaults { get; set; }
+ [Input("autoProvisioningLocations")]
+ private InputList? _autoProvisioningLocations;
+
+ ///
+ /// The list of Google Compute Engine
+ /// [zones](https://cloud.google.com/compute/docs/zones#available) in which the
+ /// NodePool's nodes can be created by NAP.
+ ///
+ public InputList AutoProvisioningLocations
+ {
+ get => _autoProvisioningLocations ?? (_autoProvisioningLocations = new InputList());
+ set => _autoProvisioningLocations = value;
+ }
+
///
/// Configuration
/// options for the [Autoscaling profile](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#autoscaling_profiles)
diff --git a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingGetArgs.cs
index 9c5d8ff056..7f1984ef1a 100644
--- a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingGetArgs.cs
+++ b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingGetArgs.cs
@@ -20,6 +20,20 @@ public sealed class ClusterClusterAutoscalingGetArgs : global::Pulumi.ResourceAr
[Input("autoProvisioningDefaults")]
public Input? AutoProvisioningDefaults { get; set; }
+ [Input("autoProvisioningLocations")]
+ private InputList? _autoProvisioningLocations;
+
+ ///
+ /// The list of Google Compute Engine
+ /// [zones](https://cloud.google.com/compute/docs/zones#available) in which the
+ /// NodePool's nodes can be created by NAP.
+ ///
+ public InputList AutoProvisioningLocations
+ {
+ get => _autoProvisioningLocations ?? (_autoProvisioningLocations = new InputList());
+ set => _autoProvisioningLocations = value;
+ }
+
///
/// Configuration
/// options for the [Autoscaling profile](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#autoscaling_profiles)
diff --git a/sdk/dotnet/Container/Outputs/ClusterClusterAutoscaling.cs b/sdk/dotnet/Container/Outputs/ClusterClusterAutoscaling.cs
index 587a401f5c..58cf87895f 100644
--- a/sdk/dotnet/Container/Outputs/ClusterClusterAutoscaling.cs
+++ b/sdk/dotnet/Container/Outputs/ClusterClusterAutoscaling.cs
@@ -20,6 +20,12 @@ public sealed class ClusterClusterAutoscaling
///
public readonly Outputs.ClusterClusterAutoscalingAutoProvisioningDefaults? AutoProvisioningDefaults;
///
+ /// The list of Google Compute Engine
+ /// [zones](https://cloud.google.com/compute/docs/zones#available) in which the
+ /// NodePool's nodes can be created by NAP.
+ ///
+ public readonly ImmutableArray AutoProvisioningLocations;
+ ///
/// Configuration
/// options for the [Autoscaling profile](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler#autoscaling_profiles)
/// feature, which lets you choose whether the cluster autoscaler should optimize for resource utilization or resource availability
@@ -43,6 +49,8 @@ public sealed class ClusterClusterAutoscaling
private ClusterClusterAutoscaling(
Outputs.ClusterClusterAutoscalingAutoProvisioningDefaults? autoProvisioningDefaults,
+ ImmutableArray autoProvisioningLocations,
+
string? autoscalingProfile,
bool? enabled,
@@ -50,6 +58,7 @@ private ClusterClusterAutoscaling(
ImmutableArray resourceLimits)
{
AutoProvisioningDefaults = autoProvisioningDefaults;
+ AutoProvisioningLocations = autoProvisioningLocations;
AutoscalingProfile = autoscalingProfile;
Enabled = enabled;
ResourceLimits = resourceLimits;
diff --git a/sdk/dotnet/Container/Outputs/GetClusterClusterAutoscalingResult.cs b/sdk/dotnet/Container/Outputs/GetClusterClusterAutoscalingResult.cs
index 7032d6e723..d39920d09e 100644
--- a/sdk/dotnet/Container/Outputs/GetClusterClusterAutoscalingResult.cs
+++ b/sdk/dotnet/Container/Outputs/GetClusterClusterAutoscalingResult.cs
@@ -18,6 +18,10 @@ public sealed class GetClusterClusterAutoscalingResult
///
public readonly ImmutableArray AutoProvisioningDefaults;
///
+ /// The list of Google Compute Engine zones in which the NodePool's nodes can be created by NAP.
+ ///
+ public readonly ImmutableArray AutoProvisioningLocations;
+ ///
/// Configuration options for the Autoscaling profile feature, which lets you choose whether the cluster autoscaler should optimize for resource utilization or resource availability when deciding to remove nodes from a cluster. Can be BALANCED or OPTIMIZE_UTILIZATION. Defaults to BALANCED.
///
public readonly string AutoscalingProfile;
@@ -34,6 +38,8 @@ public sealed class GetClusterClusterAutoscalingResult
private GetClusterClusterAutoscalingResult(
ImmutableArray autoProvisioningDefaults,
+ ImmutableArray autoProvisioningLocations,
+
string autoscalingProfile,
bool enabled,
@@ -41,6 +47,7 @@ private GetClusterClusterAutoscalingResult(
ImmutableArray resourceLimits)
{
AutoProvisioningDefaults = autoProvisioningDefaults;
+ AutoProvisioningLocations = autoProvisioningLocations;
AutoscalingProfile = autoscalingProfile;
Enabled = enabled;
ResourceLimits = resourceLimits;
diff --git a/sdk/dotnet/Dataform/Repository.cs b/sdk/dotnet/Dataform/Repository.cs
index c517f21c3f..32b65b62a5 100644
--- a/sdk/dotnet/Dataform/Repository.cs
+++ b/sdk/dotnet/Dataform/Repository.cs
@@ -37,11 +37,34 @@ namespace Pulumi.Gcp.Dataform
/// SecretData = "secret-data",
/// });
///
+ /// var keyring = new Gcp.Kms.KeyRing("keyring", new()
+ /// {
+ /// Name = "example-key-ring",
+ /// Location = "us-central1",
+ /// });
+ ///
+ /// var exampleKey = new Gcp.Kms.CryptoKey("example_key", new()
+ /// {
+ /// Name = "example-crypto-key-name",
+ /// KeyRing = keyring.Id,
+ /// });
+ ///
+ /// var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding("crypto_key_binding", new()
+ /// {
+ /// CryptoKeyId = exampleKey.Id,
+ /// Role = "roles/cloudkms.cryptoKeyEncrypterDecrypter",
+ /// Members = new[]
+ /// {
+ /// $"serviceAccount:service-{project.Number}@gcp-sa-dataform.iam.gserviceaccount.com",
+ /// },
+ /// });
+ ///
/// var dataformRepository = new Gcp.Dataform.Repository("dataform_repository", new()
/// {
/// Name = "dataform_repository",
/// DisplayName = "dataform_repository",
/// NpmrcEnvironmentVariablesSecretVersion = secretVersion.Id,
+ /// KmsKeyName = exampleKey.Id,
/// Labels =
/// {
/// { "label_foo1", "label-bar1" },
@@ -58,6 +81,12 @@ namespace Pulumi.Gcp.Dataform
/// SchemaSuffix = "_suffix",
/// TablePrefix = "prefix_",
/// },
+ /// }, new CustomResourceOptions
+ /// {
+ /// DependsOn =
+ /// {
+ /// cryptoKeyBinding,
+ /// },
/// });
///
/// });
@@ -115,6 +144,13 @@ public partial class Repository : global::Pulumi.CustomResource
[Output("gitRemoteSettings")]
public Output GitRemoteSettings { get; private set; } = null!;
+ ///
+ /// Optional. The reference to a KMS encryption key. If provided, it will be used to encrypt user data in the repository and all child resources.
+ /// It is not possible to add or update the encryption key after the repository is created. Example projects/[kms_project_id]/locations/[region]/keyRings/[key_region]/cryptoKeys/[key]
+ ///
+ [Output("kmsKeyName")]
+ public Output KmsKeyName { get; private set; } = null!;
+
///
/// Optional. Repository user labels.
/// An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }.
@@ -237,6 +273,13 @@ public sealed class RepositoryArgs : global::Pulumi.ResourceArgs
[Input("gitRemoteSettings")]
public Input? GitRemoteSettings { get; set; }
+ ///
+ /// Optional. The reference to a KMS encryption key. If provided, it will be used to encrypt user data in the repository and all child resources.
+ /// It is not possible to add or update the encryption key after the repository is created. Example projects/[kms_project_id]/locations/[region]/keyRings/[key_region]/cryptoKeys/[key]
+ ///
+ [Input("kmsKeyName")]
+ public Input? KmsKeyName { get; set; }
+
[Input("labels")]
private InputMap? _labels;
@@ -331,6 +374,13 @@ public InputMap EffectiveLabels
[Input("gitRemoteSettings")]
public Input? GitRemoteSettings { get; set; }
+ ///
+ /// Optional. The reference to a KMS encryption key. If provided, it will be used to encrypt user data in the repository and all child resources.
+ /// It is not possible to add or update the encryption key after the repository is created. Example projects/[kms_project_id]/locations/[region]/keyRings/[key_region]/cryptoKeys/[key]
+ ///
+ [Input("kmsKeyName")]
+ public Input? KmsKeyName { get; set; }
+
[Input("labels")]
private InputMap? _labels;
diff --git a/sdk/dotnet/DiscoveryEngine/DataStore.cs b/sdk/dotnet/DiscoveryEngine/DataStore.cs
index 72735f512e..4ae1273c35 100644
--- a/sdk/dotnet/DiscoveryEngine/DataStore.cs
+++ b/sdk/dotnet/DiscoveryEngine/DataStore.cs
@@ -44,6 +44,7 @@ namespace Pulumi.Gcp.DiscoveryEngine
/// "SOLUTION_TYPE_SEARCH",
/// },
/// CreateAdvancedSiteSearch = false,
+ /// SkipDefaultSchemaCreation = false,
/// });
///
/// });
@@ -200,6 +201,18 @@ public partial class DataStore : global::Pulumi.CustomResource
[Output("project")]
public Output Project { get; private set; } = null!;
+ ///
+ /// A boolean flag indicating whether to skip the default schema creation for
+ /// the data store. Only enable this flag if you are certain that the default
+ /// schema is incompatible with your use case.
+ /// If set to true, you must manually create a schema for the data store
+ /// before any documents can be ingested.
+ /// This flag cannot be specified if `data_store.starting_schema` is
+ /// specified.
+ ///
+ [Output("skipDefaultSchemaCreation")]
+ public Output SkipDefaultSchemaCreation { get; private set; } = null!;
+
///
/// The solutions that the data store enrolls.
/// Each value may be one of: `SOLUTION_TYPE_RECOMMENDATION`, `SOLUTION_TYPE_SEARCH`, `SOLUTION_TYPE_CHAT`.
@@ -312,6 +325,18 @@ public sealed class DataStoreArgs : global::Pulumi.ResourceArgs
[Input("project")]
public Input? Project { get; set; }
+ ///
+ /// A boolean flag indicating whether to skip the default schema creation for
+ /// the data store. Only enable this flag if you are certain that the default
+ /// schema is incompatible with your use case.
+ /// If set to true, you must manually create a schema for the data store
+ /// before any documents can be ingested.
+ /// This flag cannot be specified if `data_store.starting_schema` is
+ /// specified.
+ ///
+ [Input("skipDefaultSchemaCreation")]
+ public Input? SkipDefaultSchemaCreation { get; set; }
+
[Input("solutionTypes")]
private InputList? _solutionTypes;
@@ -413,6 +438,18 @@ public sealed class DataStoreState : global::Pulumi.ResourceArgs
[Input("project")]
public Input? Project { get; set; }
+ ///
+ /// A boolean flag indicating whether to skip the default schema creation for
+ /// the data store. Only enable this flag if you are certain that the default
+ /// schema is incompatible with your use case.
+ /// If set to true, you must manually create a schema for the data store
+ /// before any documents can be ingested.
+ /// This flag cannot be specified if `data_store.starting_schema` is
+ /// specified.
+ ///
+ [Input("skipDefaultSchemaCreation")]
+ public Input? SkipDefaultSchemaCreation { get; set; }
+
[Input("solutionTypes")]
private InputList? _solutionTypes;
diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigConfigmanagementArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigConfigmanagementArgs.cs
index 981e1841fa..b471afbdc4 100644
--- a/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigConfigmanagementArgs.cs
+++ b/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigConfigmanagementArgs.cs
@@ -19,6 +19,13 @@ public sealed class FeatureFleetDefaultMemberConfigConfigmanagementArgs : global
[Input("configSync")]
public Input? ConfigSync { get; set; }
+ ///
+ /// Set this field to MANAGEMENT_AUTOMATIC to enable Config Sync auto-upgrades, and set this field to MANAGEMENT_MANUAL or MANAGEMENT_UNSPECIFIED to disable Config Sync auto-upgrades.
+ /// Possible values are: `MANAGEMENT_UNSPECIFIED`, `MANAGEMENT_AUTOMATIC`, `MANAGEMENT_MANUAL`.
+ ///
+ [Input("management")]
+ public Input? Management { get; set; }
+
///
/// Version of ACM installed
///
diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigConfigmanagementGetArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigConfigmanagementGetArgs.cs
index 62951fcae7..cf5046659c 100644
--- a/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigConfigmanagementGetArgs.cs
+++ b/sdk/dotnet/GkeHub/Inputs/FeatureFleetDefaultMemberConfigConfigmanagementGetArgs.cs
@@ -19,6 +19,13 @@ public sealed class FeatureFleetDefaultMemberConfigConfigmanagementGetArgs : glo
[Input("configSync")]
public Input? ConfigSync { get; set; }
+ ///
+ /// Set this field to MANAGEMENT_AUTOMATIC to enable Config Sync auto-upgrades, and set this field to MANAGEMENT_MANUAL or MANAGEMENT_UNSPECIFIED to disable Config Sync auto-upgrades.
+ /// Possible values are: `MANAGEMENT_UNSPECIFIED`, `MANAGEMENT_AUTOMATIC`, `MANAGEMENT_MANUAL`.
+ ///
+ [Input("management")]
+ public Input? Management { get; set; }
+
///
/// Version of ACM installed
///
diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementArgs.cs
index a98c62d584..7651ebe1c3 100644
--- a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementArgs.cs
+++ b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementArgs.cs
@@ -30,6 +30,12 @@ public sealed class FeatureMembershipConfigmanagementArgs : global::Pulumi.Resou
[Input("hierarchyController")]
public Input? HierarchyController { get; set; }
+ ///
+ /// Set this field to MANAGEMENT_AUTOMATIC to enable Config Sync auto-upgrades, and set this field to MANAGEMENT_MANUAL or MANAGEMENT_UNSPECIFIED to disable Config Sync auto-upgrades.
+ ///
+ [Input("management")]
+ public Input? Management { get; set; }
+
///
/// Policy Controller configuration for the cluster. Structure is documented below.
///
diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncArgs.cs
index 6fb6c02809..b01c756441 100644
--- a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncArgs.cs
+++ b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncArgs.cs
@@ -12,6 +12,12 @@ namespace Pulumi.Gcp.GkeHub.Inputs
public sealed class FeatureMembershipConfigmanagementConfigSyncArgs : global::Pulumi.ResourceArgs
{
+ ///
+ /// 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.
+ ///
+ [Input("enabled")]
+ public Input? Enabled { get; set; }
+
///
/// (Optional) Structure is documented below.
///
diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncGetArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncGetArgs.cs
index e48f51a743..e6f4947d26 100644
--- a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncGetArgs.cs
+++ b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementConfigSyncGetArgs.cs
@@ -12,6 +12,12 @@ namespace Pulumi.Gcp.GkeHub.Inputs
public sealed class FeatureMembershipConfigmanagementConfigSyncGetArgs : global::Pulumi.ResourceArgs
{
+ ///
+ /// 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.
+ ///
+ [Input("enabled")]
+ public Input? Enabled { get; set; }
+
///
/// (Optional) Structure is documented below.
///
diff --git a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementGetArgs.cs b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementGetArgs.cs
index 1c193c77c1..42723458f6 100644
--- a/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementGetArgs.cs
+++ b/sdk/dotnet/GkeHub/Inputs/FeatureMembershipConfigmanagementGetArgs.cs
@@ -30,6 +30,12 @@ public sealed class FeatureMembershipConfigmanagementGetArgs : global::Pulumi.Re
[Input("hierarchyController")]
public Input? HierarchyController { get; set; }
+ ///
+ /// Set this field to MANAGEMENT_AUTOMATIC to enable Config Sync auto-upgrades, and set this field to MANAGEMENT_MANUAL or MANAGEMENT_UNSPECIFIED to disable Config Sync auto-upgrades.
+ ///
+ [Input("management")]
+ public Input? Management { get; set; }
+
///
/// Policy Controller configuration for the cluster. Structure is documented below.
///
diff --git a/sdk/dotnet/GkeHub/Outputs/FeatureFleetDefaultMemberConfigConfigmanagement.cs b/sdk/dotnet/GkeHub/Outputs/FeatureFleetDefaultMemberConfigConfigmanagement.cs
index 3813a76a1c..6d03f656c3 100644
--- a/sdk/dotnet/GkeHub/Outputs/FeatureFleetDefaultMemberConfigConfigmanagement.cs
+++ b/sdk/dotnet/GkeHub/Outputs/FeatureFleetDefaultMemberConfigConfigmanagement.cs
@@ -19,6 +19,11 @@ public sealed class FeatureFleetDefaultMemberConfigConfigmanagement
///
public readonly Outputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSync? ConfigSync;
///
+ /// Set this field to MANAGEMENT_AUTOMATIC to enable Config Sync auto-upgrades, and set this field to MANAGEMENT_MANUAL or MANAGEMENT_UNSPECIFIED to disable Config Sync auto-upgrades.
+ /// Possible values are: `MANAGEMENT_UNSPECIFIED`, `MANAGEMENT_AUTOMATIC`, `MANAGEMENT_MANUAL`.
+ ///
+ public readonly string? Management;
+ ///
/// Version of ACM installed
///
public readonly string? Version;
@@ -27,9 +32,12 @@ public sealed class FeatureFleetDefaultMemberConfigConfigmanagement
private FeatureFleetDefaultMemberConfigConfigmanagement(
Outputs.FeatureFleetDefaultMemberConfigConfigmanagementConfigSync? configSync,
+ string? management,
+
string? version)
{
ConfigSync = configSync;
+ Management = management;
Version = version;
}
}
diff --git a/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagement.cs b/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagement.cs
index 1b25662c82..c5024ba616 100644
--- a/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagement.cs
+++ b/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagement.cs
@@ -26,6 +26,10 @@ public sealed class FeatureMembershipConfigmanagement
///
public readonly Outputs.FeatureMembershipConfigmanagementHierarchyController? HierarchyController;
///
+ /// Set this field to MANAGEMENT_AUTOMATIC to enable Config Sync auto-upgrades, and set this field to MANAGEMENT_MANUAL or MANAGEMENT_UNSPECIFIED to disable Config Sync auto-upgrades.
+ ///
+ public readonly string? Management;
+ ///
/// Policy Controller configuration for the cluster. Structure is documented below.
///
public readonly Outputs.FeatureMembershipConfigmanagementPolicyController? PolicyController;
@@ -42,6 +46,8 @@ private FeatureMembershipConfigmanagement(
Outputs.FeatureMembershipConfigmanagementHierarchyController? hierarchyController,
+ string? management,
+
Outputs.FeatureMembershipConfigmanagementPolicyController? policyController,
string? version)
@@ -49,6 +55,7 @@ private FeatureMembershipConfigmanagement(
Binauthz = binauthz;
ConfigSync = configSync;
HierarchyController = hierarchyController;
+ Management = management;
PolicyController = policyController;
Version = version;
}
diff --git a/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagementConfigSync.cs b/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagementConfigSync.cs
index d27cb8ece3..34b733feff 100644
--- a/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagementConfigSync.cs
+++ b/sdk/dotnet/GkeHub/Outputs/FeatureMembershipConfigmanagementConfigSync.cs
@@ -13,6 +13,10 @@ namespace Pulumi.Gcp.GkeHub.Outputs
[OutputType]
public sealed class FeatureMembershipConfigmanagementConfigSync
{
+ ///
+ /// 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.
+ ///
+ public readonly bool? Enabled;
///
/// (Optional) Structure is documented below.
///
@@ -38,6 +42,8 @@ public sealed class FeatureMembershipConfigmanagementConfigSync
[OutputConstructor]
private FeatureMembershipConfigmanagementConfigSync(
+ bool? enabled,
+
Outputs.FeatureMembershipConfigmanagementConfigSyncGit? git,
string? metricsGcpServiceAccountEmail,
@@ -48,6 +54,7 @@ private FeatureMembershipConfigmanagementConfigSync(
string? sourceFormat)
{
+ Enabled = enabled;
Git = git;
MetricsGcpServiceAccountEmail = metricsGcpServiceAccountEmail;
Oci = oci;
diff --git a/sdk/dotnet/Logging/GetLogViewIamPolicy.cs b/sdk/dotnet/Logging/GetLogViewIamPolicy.cs
index 6ca4df54f6..eac4f8d9e2 100644
--- a/sdk/dotnet/Logging/GetLogViewIamPolicy.cs
+++ b/sdk/dotnet/Logging/GetLogViewIamPolicy.cs
@@ -11,9 +11,59 @@ namespace Pulumi.Gcp.Logging
{
public static class GetLogViewIamPolicy
{
+ ///
+ /// Retrieves the current IAM policy data for logview
+ ///
+ ///
+ /// ## example
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var policy = Gcp.Logging.GetLogViewIamPolicy.Invoke(new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
public static Task InvokeAsync(GetLogViewIamPolicyArgs args, InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.InvokeAsync("gcp:logging/getLogViewIamPolicy:getLogViewIamPolicy", args ?? new GetLogViewIamPolicyArgs(), options.WithDefaults());
+ ///
+ /// Retrieves the current IAM policy data for logview
+ ///
+ ///
+ /// ## example
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var policy = Gcp.Logging.GetLogViewIamPolicy.Invoke(new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
public static Output Invoke(GetLogViewIamPolicyInvokeArgs args, InvokeOptions? options = null)
=> global::Pulumi.Deployment.Instance.Invoke("gcp:logging/getLogViewIamPolicy:getLogViewIamPolicy", args ?? new GetLogViewIamPolicyInvokeArgs(), options.WithDefaults());
}
diff --git a/sdk/dotnet/Logging/LogViewIamBinding.cs b/sdk/dotnet/Logging/LogViewIamBinding.cs
index c555066aa9..2f915d8a41 100644
--- a/sdk/dotnet/Logging/LogViewIamBinding.cs
+++ b/sdk/dotnet/Logging/LogViewIamBinding.cs
@@ -10,6 +10,420 @@
namespace Pulumi.Gcp.Logging
{
///
+ /// Three different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.
+ /// * `gcp.logging.LogViewIamBinding`: 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 logview are preserved.
+ /// * `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.
+ ///
+ /// A data source can be used to retrieve policy data in advent you do not need creation
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.
+ ///
+ /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.
+ ///
+ /// ## gcp.logging.LogViewIamPolicy
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamBinding
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamMember
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// ## > **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`.
+ /// ---
+ ///
+ /// # IAM policy for Cloud (Stackdriver) Logging LogView
+ /// Three different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.
+ /// * `gcp.logging.LogViewIamBinding`: 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 logview are preserved.
+ /// * `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.
+ ///
+ /// A data source can be used to retrieve policy data in advent you do not need creation
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.
+ ///
+ /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.
+ ///
+ /// ## gcp.logging.LogViewIamPolicy
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamBinding
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamMember
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
/// ## Import
///
/// For all import syntaxes, the "resource in question" can take any of the following forms:
diff --git a/sdk/dotnet/Logging/LogViewIamMember.cs b/sdk/dotnet/Logging/LogViewIamMember.cs
index dd114e8b23..02155efc71 100644
--- a/sdk/dotnet/Logging/LogViewIamMember.cs
+++ b/sdk/dotnet/Logging/LogViewIamMember.cs
@@ -10,6 +10,420 @@
namespace Pulumi.Gcp.Logging
{
///
+ /// Three different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.
+ /// * `gcp.logging.LogViewIamBinding`: 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 logview are preserved.
+ /// * `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.
+ ///
+ /// A data source can be used to retrieve policy data in advent you do not need creation
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.
+ ///
+ /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.
+ ///
+ /// ## gcp.logging.LogViewIamPolicy
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamBinding
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamMember
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// ## > **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`.
+ /// ---
+ ///
+ /// # IAM policy for Cloud (Stackdriver) Logging LogView
+ /// Three different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.
+ /// * `gcp.logging.LogViewIamBinding`: 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 logview are preserved.
+ /// * `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.
+ ///
+ /// A data source can be used to retrieve policy data in advent you do not need creation
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.
+ ///
+ /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.
+ ///
+ /// ## gcp.logging.LogViewIamPolicy
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamBinding
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamMember
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
/// ## Import
///
/// For all import syntaxes, the "resource in question" can take any of the following forms:
diff --git a/sdk/dotnet/Logging/LogViewIamPolicy.cs b/sdk/dotnet/Logging/LogViewIamPolicy.cs
index 75f0f219fe..58f2e12724 100644
--- a/sdk/dotnet/Logging/LogViewIamPolicy.cs
+++ b/sdk/dotnet/Logging/LogViewIamPolicy.cs
@@ -10,6 +10,420 @@
namespace Pulumi.Gcp.Logging
{
///
+ /// Three different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.
+ /// * `gcp.logging.LogViewIamBinding`: 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 logview are preserved.
+ /// * `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.
+ ///
+ /// A data source can be used to retrieve policy data in advent you do not need creation
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.
+ ///
+ /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.
+ ///
+ /// ## gcp.logging.LogViewIamPolicy
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamBinding
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamMember
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// ## > **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`.
+ /// ---
+ ///
+ /// # IAM policy for Cloud (Stackdriver) Logging LogView
+ /// Three different resources help you manage your IAM policy for Cloud (Stackdriver) Logging LogView. Each of these resources serves a different use case:
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Authoritative. Sets the IAM policy for the logview and replaces any existing policy already attached.
+ /// * `gcp.logging.LogViewIamBinding`: 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 logview are preserved.
+ /// * `gcp.logging.LogViewIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the logview are preserved.
+ ///
+ /// A data source can be used to retrieve policy data in advent you do not need creation
+ ///
+ /// * `gcp.logging.LogViewIamPolicy`: Retrieves the IAM policy for the logview
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamPolicy` **cannot** be used in conjunction with `gcp.logging.LogViewIamBinding` and `gcp.logging.LogViewIamMember` or they will fight over what your policy should be.
+ ///
+ /// > **Note:** `gcp.logging.LogViewIamBinding` resources **can be** used in conjunction with `gcp.logging.LogViewIamMember` resources **only if** they do not grant privilege to the same role.
+ ///
+ /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.
+ ///
+ /// ## gcp.logging.LogViewIamPolicy
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()
+ /// {
+ /// Bindings = new[]
+ /// {
+ /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs
+ /// {
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// },
+ /// },
+ /// });
+ ///
+ /// var policy = new Gcp.Logging.LogViewIamPolicy("policy", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData),
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamBinding
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var binding = new Gcp.Logging.LogViewIamBinding("binding", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Members = new[]
+ /// {
+ /// "user:jane@example.com",
+ /// },
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamBindingConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ /// ## gcp.logging.LogViewIamMember
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// With IAM Conditions:
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var member = new Gcp.Logging.LogViewIamMember("member", new()
+ /// {
+ /// Parent = loggingLogView.Parent,
+ /// Location = loggingLogView.Location,
+ /// Bucket = loggingLogView.Bucket,
+ /// Name = loggingLogView.Name,
+ /// Role = "roles/logging.admin",
+ /// Member = "user:jane@example.com",
+ /// Condition = new Gcp.Logging.Inputs.LogViewIamMemberConditionArgs
+ /// {
+ /// Title = "expires_after_2019_12_31",
+ /// Description = "Expiring at midnight of 2019-12-31",
+ /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")",
+ /// },
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
/// ## Import
///
/// For all import syntaxes, the "resource in question" can take any of the following forms:
diff --git a/sdk/dotnet/Netapp/Inputs/VolumeReplicationTransferStatArgs.cs b/sdk/dotnet/Netapp/Inputs/VolumeReplicationTransferStatArgs.cs
index 7d0e65d64a..bbbb7faa8a 100644
--- a/sdk/dotnet/Netapp/Inputs/VolumeReplicationTransferStatArgs.cs
+++ b/sdk/dotnet/Netapp/Inputs/VolumeReplicationTransferStatArgs.cs
@@ -51,14 +51,14 @@ public sealed class VolumeReplicationTransferStatArgs : global::Pulumi.ResourceA
///
/// (Output)
- /// Total time taken so far during current transfer.
+ /// Cumulative time taken across all transfers for the replication relationship.
///
[Input("totalTransferDuration")]
public Input? TotalTransferDuration { get; set; }
///
/// (Output)
- /// Number of bytes transferred so far in current transfer.
+ /// Cumulative bytes transferred so far for the replication relationship.
///
[Input("transferBytes")]
public Input? TransferBytes { get; set; }
diff --git a/sdk/dotnet/Netapp/Inputs/VolumeReplicationTransferStatGetArgs.cs b/sdk/dotnet/Netapp/Inputs/VolumeReplicationTransferStatGetArgs.cs
index a69e7616a5..a72766fee4 100644
--- a/sdk/dotnet/Netapp/Inputs/VolumeReplicationTransferStatGetArgs.cs
+++ b/sdk/dotnet/Netapp/Inputs/VolumeReplicationTransferStatGetArgs.cs
@@ -51,14 +51,14 @@ public sealed class VolumeReplicationTransferStatGetArgs : global::Pulumi.Resour
///
/// (Output)
- /// Total time taken so far during current transfer.
+ /// Cumulative time taken across all transfers for the replication relationship.
///
[Input("totalTransferDuration")]
public Input? TotalTransferDuration { get; set; }
///
/// (Output)
- /// Number of bytes transferred so far in current transfer.
+ /// Cumulative bytes transferred so far for the replication relationship.
///
[Input("transferBytes")]
public Input? TransferBytes { get; set; }
diff --git a/sdk/dotnet/Netapp/Outputs/VolumeReplicationTransferStat.cs b/sdk/dotnet/Netapp/Outputs/VolumeReplicationTransferStat.cs
index 090845ec4b..2b9b213479 100644
--- a/sdk/dotnet/Netapp/Outputs/VolumeReplicationTransferStat.cs
+++ b/sdk/dotnet/Netapp/Outputs/VolumeReplicationTransferStat.cs
@@ -42,12 +42,12 @@ public sealed class VolumeReplicationTransferStat
public readonly string? LastTransferError;
///
/// (Output)
- /// Total time taken so far during current transfer.
+ /// Cumulative time taken across all transfers for the replication relationship.
///
public readonly string? TotalTransferDuration;
///
/// (Output)
- /// Number of bytes transferred so far in current transfer.
+ /// Cumulative bytes transferred so far for the replication relationship.
///
public readonly string? TransferBytes;
///
diff --git a/sdk/dotnet/NetworkConnectivity/RegionalEndpoint.cs b/sdk/dotnet/NetworkConnectivity/RegionalEndpoint.cs
index ebb5e7feac..d49a589f72 100644
--- a/sdk/dotnet/NetworkConnectivity/RegionalEndpoint.cs
+++ b/sdk/dotnet/NetworkConnectivity/RegionalEndpoint.cs
@@ -48,12 +48,12 @@ namespace Pulumi.Gcp.NetworkConnectivity
/// {
/// Name = "my-rep",
/// Location = "us-central1",
- /// TargetGoogleApi = "boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com",
+ /// TargetGoogleApi = "storage.us-central1.p.rep.googleapis.com",
/// AccessType = "REGIONAL",
/// Address = "192.168.0.5",
/// Network = myNetwork.Id,
/// Subnetwork = mySubnetwork.Id,
- /// Description = "My RegionalEndpoint targeting Google API boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com",
+ /// Description = "My RegionalEndpoint targeting Google API storage.us-central1.p.rep.googleapis.com",
/// Labels =
/// {
/// { "env", "default" },
@@ -90,7 +90,7 @@ namespace Pulumi.Gcp.NetworkConnectivity
/// {
/// Name = "my-rep",
/// Location = "us-central1",
- /// TargetGoogleApi = "boqcodelabjaimin-pa.us-central1.p.rep.googleapis.com",
+ /// TargetGoogleApi = "storage.us-central1.p.rep.googleapis.com",
/// AccessType = "GLOBAL",
/// Address = "192.168.0.4",
/// Network = myNetwork.Id,
diff --git a/sdk/dotnet/Organizations/GetProject.cs b/sdk/dotnet/Organizations/GetProject.cs
index 75761c15ac..10514d8bf4 100644
--- a/sdk/dotnet/Organizations/GetProject.cs
+++ b/sdk/dotnet/Organizations/GetProject.cs
@@ -101,6 +101,7 @@ public sealed class GetProjectResult
{
public readonly bool AutoCreateNetwork;
public readonly string BillingAccount;
+ public readonly string DeletionPolicy;
public readonly ImmutableDictionary EffectiveLabels;
public readonly string FolderId;
///
@@ -124,6 +125,8 @@ private GetProjectResult(
string billingAccount,
+ string deletionPolicy,
+
ImmutableDictionary effectiveLabels,
string folderId,
@@ -146,6 +149,7 @@ private GetProjectResult(
{
AutoCreateNetwork = autoCreateNetwork;
BillingAccount = billingAccount;
+ DeletionPolicy = deletionPolicy;
EffectiveLabels = effectiveLabels;
FolderId = folderId;
Id = id;
diff --git a/sdk/dotnet/Organizations/Project.cs b/sdk/dotnet/Organizations/Project.cs
index 163bf12083..cf7ba4a6f5 100644
--- a/sdk/dotnet/Organizations/Project.cs
+++ b/sdk/dotnet/Organizations/Project.cs
@@ -107,6 +107,9 @@ public partial class Project : global::Pulumi.CustomResource
[Output("billingAccount")]
public Output BillingAccount { get; private set; } = null!;
+ [Output("deletionPolicy")]
+ public Output DeletionPolicy { 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.
///
@@ -167,8 +170,11 @@ public partial class Project : global::Pulumi.CustomResource
public Output> PulumiLabels { get; private set; } = null!;
///
- /// If true, the resource can be deleted
- /// without deleting the Project via the Google API. `skip_delete` is deprecated and will be removed in a future major release. The new release adds support for `deletion_policy` instead.
+ /// If true, the resource can be deleted without
+ /// deleting the Project via the Google API. `skip_delete` is deprecated and will be
+ /// removed in 6.0.0. Please use deletion_policy instead. A `skip_delete` value of `false`
+ /// can be changed to a `deletion_policy` value of `DELETE` and a `skip_delete` value of `true`
+ /// to a `deletion_policy` value of `ABANDON` for equivalent behavior.
///
[Output("skipDelete")]
public Output SkipDelete { get; private set; } = null!;
@@ -242,6 +248,9 @@ public sealed class ProjectArgs : global::Pulumi.ResourceArgs
[Input("billingAccount")]
public Input? BillingAccount { get; set; }
+ [Input("deletionPolicy")]
+ public Input? DeletionPolicy { get; set; }
+
///
/// The numeric ID of the folder this project should be
/// created under. Only one of `org_id` or `folder_id` may be
@@ -290,8 +299,11 @@ public InputMap Labels
public Input? ProjectId { get; set; }
///
- /// If true, the resource can be deleted
- /// without deleting the Project via the Google API. `skip_delete` is deprecated and will be removed in a future major release. The new release adds support for `deletion_policy` instead.
+ /// If true, the resource can be deleted without
+ /// deleting the Project via the Google API. `skip_delete` is deprecated and will be
+ /// removed in 6.0.0. Please use deletion_policy instead. A `skip_delete` value of `false`
+ /// can be changed to a `deletion_policy` value of `DELETE` and a `skip_delete` value of `true`
+ /// to a `deletion_policy` value of `ABANDON` for equivalent behavior.
///
[Input("skipDelete")]
public Input? SkipDelete { get; set; }
@@ -322,6 +334,9 @@ public sealed class ProjectState : global::Pulumi.ResourceArgs
[Input("billingAccount")]
public Input? BillingAccount { get; set; }
+ [Input("deletionPolicy")]
+ public Input? DeletionPolicy { get; set; }
+
[Input("effectiveLabels")]
private InputMap? _effectiveLabels;
@@ -408,8 +423,11 @@ public InputMap PulumiLabels
}
///
- /// If true, the resource can be deleted
- /// without deleting the Project via the Google API. `skip_delete` is deprecated and will be removed in a future major release. The new release adds support for `deletion_policy` instead.
+ /// If true, the resource can be deleted without
+ /// deleting the Project via the Google API. `skip_delete` is deprecated and will be
+ /// removed in 6.0.0. Please use deletion_policy instead. A `skip_delete` value of `false`
+ /// can be changed to a `deletion_policy` value of `DELETE` and a `skip_delete` value of `true`
+ /// to a `deletion_policy` value of `ABANDON` for equivalent behavior.
///
[Input("skipDelete")]
public Input? SkipDelete { get; set; }
diff --git a/sdk/dotnet/SecurityCenter/GetV2OrganizationSourceIamPolicy.cs b/sdk/dotnet/SecurityCenter/GetV2OrganizationSourceIamPolicy.cs
new file mode 100644
index 0000000000..e8e2a664c0
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/GetV2OrganizationSourceIamPolicy.cs
@@ -0,0 +1,139 @@
+// *** 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.SecurityCenter
+{
+ public static class GetV2OrganizationSourceIamPolicy
+ {
+ ///
+ /// Retrieves the current IAM policy data for organizationsource
+ ///
+ ///
+ /// ## example
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var policy = Gcp.SecurityCenter.GetV2OrganizationSourceIamPolicy.Invoke(new()
+ /// {
+ /// Source = customSource.Name,
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ public static Task InvokeAsync(GetV2OrganizationSourceIamPolicyArgs args, InvokeOptions? options = null)
+ => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:securitycenter/getV2OrganizationSourceIamPolicy:getV2OrganizationSourceIamPolicy", args ?? new GetV2OrganizationSourceIamPolicyArgs(), options.WithDefaults());
+
+ ///
+ /// Retrieves the current IAM policy data for organizationsource
+ ///
+ ///
+ /// ## example
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var policy = Gcp.SecurityCenter.GetV2OrganizationSourceIamPolicy.Invoke(new()
+ /// {
+ /// Source = customSource.Name,
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ public static Output Invoke(GetV2OrganizationSourceIamPolicyInvokeArgs args, InvokeOptions? options = null)
+ => global::Pulumi.Deployment.Instance.Invoke("gcp:securitycenter/getV2OrganizationSourceIamPolicy:getV2OrganizationSourceIamPolicy", args ?? new GetV2OrganizationSourceIamPolicyInvokeArgs(), options.WithDefaults());
+ }
+
+
+ public sealed class GetV2OrganizationSourceIamPolicyArgs : global::Pulumi.InvokeArgs
+ {
+ [Input("organization", required: true)]
+ public string Organization { get; set; } = null!;
+
+ ///
+ /// Used to find the parent resource to bind the IAM policy to
+ ///
+ [Input("source", required: true)]
+ public string Source { get; set; } = null!;
+
+ public GetV2OrganizationSourceIamPolicyArgs()
+ {
+ }
+ public static new GetV2OrganizationSourceIamPolicyArgs Empty => new GetV2OrganizationSourceIamPolicyArgs();
+ }
+
+ public sealed class GetV2OrganizationSourceIamPolicyInvokeArgs : global::Pulumi.InvokeArgs
+ {
+ [Input("organization", required: true)]
+ public Input Organization { get; set; } = null!;
+
+ ///
+ /// Used to find the parent resource to bind the IAM policy to
+ ///
+ [Input("source", required: true)]
+ public Input Source { get; set; } = null!;
+
+ public GetV2OrganizationSourceIamPolicyInvokeArgs()
+ {
+ }
+ public static new GetV2OrganizationSourceIamPolicyInvokeArgs Empty => new GetV2OrganizationSourceIamPolicyInvokeArgs();
+ }
+
+
+ [OutputType]
+ public sealed class GetV2OrganizationSourceIamPolicyResult
+ {
+ ///
+ /// (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 Organization;
+ ///
+ /// (Required only by `gcp.securitycenter.V2OrganizationSourceIamPolicy`) The policy data generated by
+ /// a `gcp.organizations.getIAMPolicy` data source.
+ ///
+ public readonly string PolicyData;
+ public readonly string Source;
+
+ [OutputConstructor]
+ private GetV2OrganizationSourceIamPolicyResult(
+ string etag,
+
+ string id,
+
+ string organization,
+
+ string policyData,
+
+ string source)
+ {
+ Etag = etag;
+ Id = id;
+ Organization = organization;
+ PolicyData = policyData;
+ Source = source;
+ }
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamBindingConditionArgs.cs b/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamBindingConditionArgs.cs
new file mode 100644
index 0000000000..e2a994e9ec
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamBindingConditionArgs.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.SecurityCenter.Inputs
+{
+
+ public sealed class V2OrganizationSourceIamBindingConditionArgs : 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 V2OrganizationSourceIamBindingConditionArgs()
+ {
+ }
+ public static new V2OrganizationSourceIamBindingConditionArgs Empty => new V2OrganizationSourceIamBindingConditionArgs();
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamBindingConditionGetArgs.cs b/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamBindingConditionGetArgs.cs
new file mode 100644
index 0000000000..6feb1a4968
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamBindingConditionGetArgs.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.SecurityCenter.Inputs
+{
+
+ public sealed class V2OrganizationSourceIamBindingConditionGetArgs : 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 V2OrganizationSourceIamBindingConditionGetArgs()
+ {
+ }
+ public static new V2OrganizationSourceIamBindingConditionGetArgs Empty => new V2OrganizationSourceIamBindingConditionGetArgs();
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamMemberConditionArgs.cs b/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamMemberConditionArgs.cs
new file mode 100644
index 0000000000..1956556ca9
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamMemberConditionArgs.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.SecurityCenter.Inputs
+{
+
+ public sealed class V2OrganizationSourceIamMemberConditionArgs : 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 V2OrganizationSourceIamMemberConditionArgs()
+ {
+ }
+ public static new V2OrganizationSourceIamMemberConditionArgs Empty => new V2OrganizationSourceIamMemberConditionArgs();
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamMemberConditionGetArgs.cs b/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamMemberConditionGetArgs.cs
new file mode 100644
index 0000000000..feaca19c92
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/Inputs/V2OrganizationSourceIamMemberConditionGetArgs.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.SecurityCenter.Inputs
+{
+
+ public sealed class V2OrganizationSourceIamMemberConditionGetArgs : 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 V2OrganizationSourceIamMemberConditionGetArgs()
+ {
+ }
+ public static new V2OrganizationSourceIamMemberConditionGetArgs Empty => new V2OrganizationSourceIamMemberConditionGetArgs();
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/Inputs/V2ProjectNotificationConfigStreamingConfigArgs.cs b/sdk/dotnet/SecurityCenter/Inputs/V2ProjectNotificationConfigStreamingConfigArgs.cs
new file mode 100644
index 0000000000..3c5c5a3c8d
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/Inputs/V2ProjectNotificationConfigStreamingConfigArgs.cs
@@ -0,0 +1,46 @@
+// *** 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.SecurityCenter.Inputs
+{
+
+ public sealed class V2ProjectNotificationConfigStreamingConfigArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Expression that defines the filter to apply across create/update
+ /// events of assets or findings as specified by the event type. The
+ /// expression is a list of zero or more restrictions combined via
+ /// logical operators AND and OR. Parentheses are supported, and OR
+ /// has higher precedence than AND.
+ /// Restrictions have the form <field> <operator> <value> and may have
+ /// a - character in front of them to indicate negation. The fields
+ /// map to those defined in the corresponding resource.
+ /// The supported operators are:
+ /// * = for all value types.
+ /// * >, <, >=, <= for integer values.
+ /// * :, meaning substring matching, for strings.
+ /// The supported value types are:
+ /// * string literals in quotes.
+ /// * integer literals without quotes.
+ /// * boolean literals true and false without quotes.
+ /// See
+ /// [Filtering notifications](https://cloud.google.com/security-command-center/docs/how-to-api-filter-notifications)
+ /// for information on how to write a filter.
+ ///
+ /// - - -
+ ///
+ [Input("filter", required: true)]
+ public Input Filter { get; set; } = null!;
+
+ public V2ProjectNotificationConfigStreamingConfigArgs()
+ {
+ }
+ public static new V2ProjectNotificationConfigStreamingConfigArgs Empty => new V2ProjectNotificationConfigStreamingConfigArgs();
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/Inputs/V2ProjectNotificationConfigStreamingConfigGetArgs.cs b/sdk/dotnet/SecurityCenter/Inputs/V2ProjectNotificationConfigStreamingConfigGetArgs.cs
new file mode 100644
index 0000000000..cda5755f3a
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/Inputs/V2ProjectNotificationConfigStreamingConfigGetArgs.cs
@@ -0,0 +1,46 @@
+// *** 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.SecurityCenter.Inputs
+{
+
+ public sealed class V2ProjectNotificationConfigStreamingConfigGetArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// Expression that defines the filter to apply across create/update
+ /// events of assets or findings as specified by the event type. The
+ /// expression is a list of zero or more restrictions combined via
+ /// logical operators AND and OR. Parentheses are supported, and OR
+ /// has higher precedence than AND.
+ /// Restrictions have the form <field> <operator> <value> and may have
+ /// a - character in front of them to indicate negation. The fields
+ /// map to those defined in the corresponding resource.
+ /// The supported operators are:
+ /// * = for all value types.
+ /// * >, <, >=, <= for integer values.
+ /// * :, meaning substring matching, for strings.
+ /// The supported value types are:
+ /// * string literals in quotes.
+ /// * integer literals without quotes.
+ /// * boolean literals true and false without quotes.
+ /// See
+ /// [Filtering notifications](https://cloud.google.com/security-command-center/docs/how-to-api-filter-notifications)
+ /// for information on how to write a filter.
+ ///
+ /// - - -
+ ///
+ [Input("filter", required: true)]
+ public Input Filter { get; set; } = null!;
+
+ public V2ProjectNotificationConfigStreamingConfigGetArgs()
+ {
+ }
+ public static new V2ProjectNotificationConfigStreamingConfigGetArgs Empty => new V2ProjectNotificationConfigStreamingConfigGetArgs();
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/Outputs/V2OrganizationSourceIamBindingCondition.cs b/sdk/dotnet/SecurityCenter/Outputs/V2OrganizationSourceIamBindingCondition.cs
new file mode 100644
index 0000000000..0d33b55ef6
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/Outputs/V2OrganizationSourceIamBindingCondition.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.SecurityCenter.Outputs
+{
+
+ [OutputType]
+ public sealed class V2OrganizationSourceIamBindingCondition
+ {
+ public readonly string? Description;
+ public readonly string Expression;
+ public readonly string Title;
+
+ [OutputConstructor]
+ private V2OrganizationSourceIamBindingCondition(
+ string? description,
+
+ string expression,
+
+ string title)
+ {
+ Description = description;
+ Expression = expression;
+ Title = title;
+ }
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/Outputs/V2OrganizationSourceIamMemberCondition.cs b/sdk/dotnet/SecurityCenter/Outputs/V2OrganizationSourceIamMemberCondition.cs
new file mode 100644
index 0000000000..b925f58a2d
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/Outputs/V2OrganizationSourceIamMemberCondition.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.SecurityCenter.Outputs
+{
+
+ [OutputType]
+ public sealed class V2OrganizationSourceIamMemberCondition
+ {
+ public readonly string? Description;
+ public readonly string Expression;
+ public readonly string Title;
+
+ [OutputConstructor]
+ private V2OrganizationSourceIamMemberCondition(
+ string? description,
+
+ string expression,
+
+ string title)
+ {
+ Description = description;
+ Expression = expression;
+ Title = title;
+ }
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/Outputs/V2ProjectNotificationConfigStreamingConfig.cs b/sdk/dotnet/SecurityCenter/Outputs/V2ProjectNotificationConfigStreamingConfig.cs
new file mode 100644
index 0000000000..2d00bbcb47
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/Outputs/V2ProjectNotificationConfigStreamingConfig.cs
@@ -0,0 +1,47 @@
+// *** 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.SecurityCenter.Outputs
+{
+
+ [OutputType]
+ public sealed class V2ProjectNotificationConfigStreamingConfig
+ {
+ ///
+ /// Expression that defines the filter to apply across create/update
+ /// events of assets or findings as specified by the event type. The
+ /// expression is a list of zero or more restrictions combined via
+ /// logical operators AND and OR. Parentheses are supported, and OR
+ /// has higher precedence than AND.
+ /// Restrictions have the form <field> <operator> <value> and may have
+ /// a - character in front of them to indicate negation. The fields
+ /// map to those defined in the corresponding resource.
+ /// The supported operators are:
+ /// * = for all value types.
+ /// * >, <, >=, <= for integer values.
+ /// * :, meaning substring matching, for strings.
+ /// The supported value types are:
+ /// * string literals in quotes.
+ /// * integer literals without quotes.
+ /// * boolean literals true and false without quotes.
+ /// See
+ /// [Filtering notifications](https://cloud.google.com/security-command-center/docs/how-to-api-filter-notifications)
+ /// for information on how to write a filter.
+ ///
+ /// - - -
+ ///
+ public readonly string Filter;
+
+ [OutputConstructor]
+ private V2ProjectNotificationConfigStreamingConfig(string filter)
+ {
+ Filter = filter;
+ }
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/V2FolderMuteConfig.cs b/sdk/dotnet/SecurityCenter/V2FolderMuteConfig.cs
new file mode 100644
index 0000000000..e900041479
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/V2FolderMuteConfig.cs
@@ -0,0 +1,329 @@
+// *** 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.SecurityCenter
+{
+ ///
+ /// Mute Findings is a volume management feature in Security Command Center
+ /// that lets you manually or programmatically hide irrelevant findings,
+ /// and create filters to automatically silence existing and future
+ /// findings based on criteria you specify.
+ ///
+ /// To get more information about FolderMuteConfig, see:
+ ///
+ /// * [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v2/folders.muteConfigs)
+ ///
+ /// ## Example Usage
+ ///
+ /// ### Scc V2 Folder Mute Config Basic
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var folder = new Gcp.Organizations.Folder("folder", new()
+ /// {
+ /// Parent = "organizations/123456789",
+ /// DisplayName = "folder-name",
+ /// });
+ ///
+ /// var @default = new Gcp.SecurityCenter.V2FolderMuteConfig("default", new()
+ /// {
+ /// MuteConfigId = "my-config",
+ /// Folder = folder.FolderId,
+ /// Location = "global",
+ /// Description = "My custom Cloud Security Command Center Finding Folder mute Configuration",
+ /// Filter = "severity = \"HIGH\"",
+ /// Type = "STATIC",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// ## Import
+ ///
+ /// FolderMuteConfig can be imported using any of these accepted formats:
+ ///
+ /// * `folders/{{folder}}/locations/{{location}}/muteConfigs/{{mute_config_id}}`
+ ///
+ /// * `{{folder}}/{{location}}/{{mute_config_id}}`
+ ///
+ /// When using the `pulumi import` command, FolderMuteConfig can be imported using one of the formats above. For example:
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig default folders/{{folder}}/locations/{{location}}/muteConfigs/{{mute_config_id}}
+ /// ```
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig default {{folder}}/{{location}}/{{mute_config_id}}
+ /// ```
+ ///
+ [GcpResourceType("gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig")]
+ public partial class V2FolderMuteConfig : global::Pulumi.CustomResource
+ {
+ ///
+ /// The time at which the mute config was created. This field is set by
+ /// the server and will be ignored if provided on config creation.
+ ///
+ [Output("createTime")]
+ public Output CreateTime { get; private set; } = null!;
+
+ ///
+ /// A description of the mute config.
+ ///
+ [Output("description")]
+ public Output Description { get; private set; } = null!;
+
+ ///
+ /// An expression that defines the filter to apply across create/update
+ /// events of findings. While creating a filter string, be mindful of
+ /// the scope in which the mute configuration is being created. E.g.,
+ /// If a filter contains project = X but is created under the
+ /// project = Y scope, it might not match any findings.
+ ///
+ [Output("filter")]
+ public Output Filter { get; private set; } = null!;
+
+ ///
+ /// The folder whose Cloud Security Command Center the Mute
+ /// Config lives in.
+ ///
+ [Output("folder")]
+ public Output Folder { get; private set; } = null!;
+
+ ///
+ /// location Id is provided by folder. If not provided, Use global as default.
+ ///
+ [Output("location")]
+ public Output Location { get; private set; } = null!;
+
+ ///
+ /// Email address of the user who last edited the mute config. This
+ /// field is set by the server and will be ignored if provided on
+ /// config creation or update.
+ ///
+ [Output("mostRecentEditor")]
+ public Output MostRecentEditor { get; private set; } = null!;
+
+ ///
+ /// Unique identifier provided by the client within the parent scope.
+ ///
+ ///
+ /// - - -
+ ///
+ [Output("muteConfigId")]
+ public Output MuteConfigId { get; private set; } = null!;
+
+ ///
+ /// Name of the mute config. Its format is
+ /// organizations/{organization}/locations/global/muteConfigs/{configId},
+ /// folders/{folder}/locations/global/muteConfigs/{configId},
+ /// or projects/{project}/locations/global/muteConfigs/{configId}
+ ///
+ [Output("name")]
+ public Output Name { get; private set; } = null!;
+
+ ///
+ /// The type of the mute config.
+ ///
+ [Output("type")]
+ public Output Type { get; private set; } = null!;
+
+ ///
+ /// Output only. The most recent time at which the mute config was
+ /// updated. This field is set by the server and will be ignored if
+ /// provided on config creation or update.
+ ///
+ [Output("updateTime")]
+ public Output UpdateTime { get; private set; } = null!;
+
+
+ ///
+ /// Create a V2FolderMuteConfig 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 V2FolderMuteConfig(string name, V2FolderMuteConfigArgs args, CustomResourceOptions? options = null)
+ : base("gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig", name, args ?? new V2FolderMuteConfigArgs(), MakeResourceOptions(options, ""))
+ {
+ }
+
+ private V2FolderMuteConfig(string name, Input id, V2FolderMuteConfigState? state = null, CustomResourceOptions? options = null)
+ : base("gcp:securitycenter/v2FolderMuteConfig:V2FolderMuteConfig", 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 V2FolderMuteConfig 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 V2FolderMuteConfig Get(string name, Input id, V2FolderMuteConfigState? state = null, CustomResourceOptions? options = null)
+ {
+ return new V2FolderMuteConfig(name, id, state, options);
+ }
+ }
+
+ public sealed class V2FolderMuteConfigArgs : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// A description of the mute config.
+ ///
+ [Input("description")]
+ public Input? Description { get; set; }
+
+ ///
+ /// An expression that defines the filter to apply across create/update
+ /// events of findings. While creating a filter string, be mindful of
+ /// the scope in which the mute configuration is being created. E.g.,
+ /// If a filter contains project = X but is created under the
+ /// project = Y scope, it might not match any findings.
+ ///
+ [Input("filter", required: true)]
+ public Input Filter { get; set; } = null!;
+
+ ///
+ /// The folder whose Cloud Security Command Center the Mute
+ /// Config lives in.
+ ///
+ [Input("folder", required: true)]
+ public Input Folder { get; set; } = null!;
+
+ ///
+ /// location Id is provided by folder. If not provided, Use global as default.
+ ///
+ [Input("location")]
+ public Input? Location { get; set; }
+
+ ///
+ /// Unique identifier provided by the client within the parent scope.
+ ///
+ ///
+ /// - - -
+ ///
+ [Input("muteConfigId", required: true)]
+ public Input MuteConfigId { get; set; } = null!;
+
+ ///
+ /// The type of the mute config.
+ ///
+ [Input("type", required: true)]
+ public Input Type { get; set; } = null!;
+
+ public V2FolderMuteConfigArgs()
+ {
+ }
+ public static new V2FolderMuteConfigArgs Empty => new V2FolderMuteConfigArgs();
+ }
+
+ public sealed class V2FolderMuteConfigState : global::Pulumi.ResourceArgs
+ {
+ ///
+ /// The time at which the mute config was created. This field is set by
+ /// the server and will be ignored if provided on config creation.
+ ///
+ [Input("createTime")]
+ public Input? CreateTime { get; set; }
+
+ ///
+ /// A description of the mute config.
+ ///
+ [Input("description")]
+ public Input? Description { get; set; }
+
+ ///
+ /// An expression that defines the filter to apply across create/update
+ /// events of findings. While creating a filter string, be mindful of
+ /// the scope in which the mute configuration is being created. E.g.,
+ /// If a filter contains project = X but is created under the
+ /// project = Y scope, it might not match any findings.
+ ///
+ [Input("filter")]
+ public Input? Filter { get; set; }
+
+ ///
+ /// The folder whose Cloud Security Command Center the Mute
+ /// Config lives in.
+ ///
+ [Input("folder")]
+ public Input? Folder { get; set; }
+
+ ///
+ /// location Id is provided by folder. If not provided, Use global as default.
+ ///
+ [Input("location")]
+ public Input? Location { get; set; }
+
+ ///
+ /// Email address of the user who last edited the mute config. This
+ /// field is set by the server and will be ignored if provided on
+ /// config creation or update.
+ ///
+ [Input("mostRecentEditor")]
+ public Input? MostRecentEditor { get; set; }
+
+ ///
+ /// Unique identifier provided by the client within the parent scope.
+ ///
+ ///
+ /// - - -
+ ///
+ [Input("muteConfigId")]
+ public Input? MuteConfigId { get; set; }
+
+ ///
+ /// Name of the mute config. Its format is
+ /// organizations/{organization}/locations/global/muteConfigs/{configId},
+ /// folders/{folder}/locations/global/muteConfigs/{configId},
+ /// or projects/{project}/locations/global/muteConfigs/{configId}
+ ///
+ [Input("name")]
+ public Input? Name { get; set; }
+
+ ///
+ /// The type of the mute config.
+ ///
+ [Input("type")]
+ public Input? Type { get; set; }
+
+ ///
+ /// Output only. The most recent time at which the mute config was
+ /// updated. This field is set by the server and will be ignored if
+ /// provided on config creation or update.
+ ///
+ [Input("updateTime")]
+ public Input? UpdateTime { get; set; }
+
+ public V2FolderMuteConfigState()
+ {
+ }
+ public static new V2FolderMuteConfigState Empty => new V2FolderMuteConfigState();
+ }
+}
diff --git a/sdk/dotnet/SecurityCenter/V2OrganizationSource.cs b/sdk/dotnet/SecurityCenter/V2OrganizationSource.cs
new file mode 100644
index 0000000000..31fdd1e784
--- /dev/null
+++ b/sdk/dotnet/SecurityCenter/V2OrganizationSource.cs
@@ -0,0 +1,218 @@
+// *** 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.SecurityCenter
+{
+ ///
+ /// A Cloud Security Command Center's (Cloud SCC) finding source. A finding
+ /// source is an entity or a mechanism that can produce a finding. A source is
+ /// like a container of findings that come from the same scanner, logger,
+ /// monitor, etc.
+ ///
+ /// To get more information about OrganizationSource, see:
+ ///
+ /// * [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v2/organizations.sources)
+ /// * How-to Guides
+ /// * [Official Documentation](https://cloud.google.com/security-command-center/docs)
+ ///
+ /// ## Example Usage
+ ///
+ /// ### Scc Source Basic
+ ///
+ /// ```csharp
+ /// using System.Collections.Generic;
+ /// using System.Linq;
+ /// using Pulumi;
+ /// using Gcp = Pulumi.Gcp;
+ ///
+ /// return await Deployment.RunAsync(() =>
+ /// {
+ /// var customSource = new Gcp.SecurityCenter.Source("custom_source", new()
+ /// {
+ /// DisplayName = "My Source",
+ /// Organization = "123456789",
+ /// Description = "My custom Cloud Security Command Center Finding Source",
+ /// });
+ ///
+ /// });
+ /// ```
+ ///
+ /// ## Import
+ ///
+ /// OrganizationSource can be imported using any of these accepted formats:
+ ///
+ /// * `organizations/{{organization}}/sources/{{name}}`
+ ///
+ /// * `{{organization}}/{{name}}`
+ ///
+ /// When using the `pulumi import` command, OrganizationSource can be imported using one of the formats above. For example:
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:securitycenter/v2OrganizationSource:V2OrganizationSource default organizations/{{organization}}/sources/{{name}}
+ /// ```
+ ///
+ /// ```sh
+ /// $ pulumi import gcp:securitycenter/v2OrganizationSource:V2OrganizationSource default {{organization}}/{{name}}
+ /// ```
+ ///
+ [GcpResourceType("gcp:securitycenter/v2OrganizationSource:V2OrganizationSource")]
+ public partial class V2OrganizationSource : global::Pulumi.CustomResource
+ {
+ ///
+ /// The description of the source (max of 1024 characters).
+ ///
+ [Output("description")]
+ public Output Description { get; private set; } = null!;
+
+ ///
+ /// The source’s display name. A source’s display name must be unique
+ /// amongst its siblings, for example, two sources with the same parent
+ /// can't share the same display name. The display name must start and end
+ /// with a letter or digit, may contain letters, digits, spaces, hyphens,
+ /// and underscores, and can be no longer than 32 characters.
+ ///
+ [Output("displayName")]
+ public Output DisplayName { get; private set; } = null!;
+
+ ///
+ /// The resource name of this source, in the format
+ /// `organizations/{{organization}}/sources/{{source}}`.
+ ///
+ [Output("name")]
+ public Output Name { get; private set; } = null!;
+
+ ///
+ /// The organization whose Cloud Security Command Center the Source
+ /// lives in.
+ ///
+ ///
+ /// - - -
+ ///
+ [Output("organization")]
+ public Output Organization { get; private set; } = null!;
+
+
+ ///